/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.transformation.metadata; import java.io.File; import java.net.URL; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.List; import java.util.Properties; import org.teiid.core.util.SmartTestDesignerSuite; import org.teiid.core.util.TestUtilities; import org.teiid.designer.core.index.CompositeIndexSelector; import org.teiid.designer.core.index.IndexSelector; import org.teiid.designer.core.index.RuntimeIndexSelector; import org.teiid.designer.metadata.runtime.ColumnRecord; import org.teiid.designer.metadata.runtime.MetadataRecord; import org.teiid.designer.metadata.runtime.TableRecord; import org.teiid.designer.query.metadata.IQueryMetadataInterface; import org.teiid.designer.query.metadata.IStoredProcedureInfo; import junit.extensions.TestSetup; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; /** * TestServerRuntimeMetadata */ public class TestServerRuntimeMetadata extends TestCase { private static final String PARTS_VDB = "Parts.vdb"; //$NON-NLS-1$ private static final String BQT_VDB = "BQT.vdb"; //$NON-NLS-1$ private static final String XML_VDB = "XMLVdb.vdb"; //$NON-NLS-1$ private static final String Annotation_VDB = "smallAVDB2.vdb"; //$NON-NLS-1$ private static final String SOAP_VDB = "SOAPTest.vdb"; //$NON-NLS-1$ private static final String QUERY_TEST_VDB = "QT_DB2v72DS_1.vdb"; //$NON-NLS-1$ private static final String BOOKS_VDB = "LotsaBooks.vdb"; //$NON-NLS-1$ private static final String TXN_VDB = "TxnTest.vdb"; //$NON-NLS-1$ private static final String BOOKS_SERVICE_VDB = "BooksWebService.vdb"; //$NON-NLS-1$ private static final String RESOURCE_FOLDER = "indexTestFolder"; //$NON-NLS-1$ private static final char DELIMITER = File.separatorChar; /** * Constructor for TestServerRuntimeMetadata. * * @param name */ public TestServerRuntimeMetadata(String name) { super(name); } /** * Construct the test suite, which uses a one-time setup call and a one-time tear-down call. */ public static Test suite() { TestSuite suite = new TestSuite("TestServerRuntimeMetadata"); //$NON-NLS-1$ suite.addTestSuite(TestServerRuntimeMetadata.class); //suite.addTest(new TestServerRuntimeMetadata("testXMLResultSetColumnPosition")); //$NON-NLS-1$ //suite.addTest(new TestServerRuntimeMetadata("testGetElementIDsInKey13760")); //$NON-NLS-1$ return new TestSetup(suite) { // junit.extensions package // One-time setup and teardown @Override public void setUp() throws Exception { } @Override public void tearDown() { } }; } @Override public void setUp() { TestUtilities.setDefaultTeiidVersion(); } @Override public void tearDown() { TestUtilities.unregisterTeiidServerManager(); } public ServerRuntimeMetadata helpGetMetadata(String vdb) throws Exception { List<RuntimeIndexSelector> selectors = new ArrayList<RuntimeIndexSelector>(); selectors.add(new RuntimeIndexSelector(SmartTestDesignerSuite.getTestDataPath(getClass())+DELIMITER+"/indexTestFolder/"+vdb)); //$NON-NLS-1$ IndexSelector composite = new CompositeIndexSelector(selectors); QueryMetadataContext context = new QueryMetadataContext(composite); return new ServerRuntimeMetadata(context); } public ServerRuntimeMetadata helpGetMetadata( String vdb1, String vdb2 ) throws Exception { List<RuntimeIndexSelector> selectors = new ArrayList<RuntimeIndexSelector>(); selectors.add(new RuntimeIndexSelector(SmartTestDesignerSuite.getTestDataPath(getClass())+DELIMITER+"/indexTestFolder/"+vdb1)); //$NON-NLS-1$ selectors.add(new RuntimeIndexSelector(SmartTestDesignerSuite.getTestDataPath(getClass())+DELIMITER+"/indexTestFolder/"+vdb2)); //$NON-NLS-1$ IndexSelector composite = new CompositeIndexSelector(selectors); QueryMetadataContext context = new QueryMetadataContext(composite); return new ServerRuntimeMetadata(context); } private void helpPrintResult(final Collection records) { if (records instanceof List) { Collections.sort((List)records,new MetadataRecordComparator()); } for (Iterator iter = records.iterator(); iter.hasNext();) { MetadataRecord record = (MetadataRecord)iter.next(); System.out.println(record.getFullName()); } } private IndexSelector helpGetRuntimeSelector1(URL url) throws Exception { return new RuntimeIndexSelector(url); } private IndexSelector helpGetRuntimeSelector2(String filePath) throws Exception { return new RuntimeIndexSelector(filePath); } private IQueryMetadataInterface helpGetTransformatrionMetadata(IndexSelector selector) { return TransformationMetadataFactory.getInstance().getServerMetadata(selector); } public void testGetElementID1() { try { String url = SmartTestDesignerSuite.getTestDataPath(getClass())+"/indexTestFolder/BQT.vdb"; //$NON-NLS-1$ IndexSelector selector = helpGetRuntimeSelector1(new File(url).toURI().toURL()); IQueryMetadataInterface metadata = helpGetTransformatrionMetadata(selector); Object elementID = metadata.getElementID("bQT.bQt2.HuGEA.INTKEY"); //$NON-NLS-1$ assertNotNull(elementID); assertTrue(elementID instanceof ColumnRecord); ColumnRecord record = (ColumnRecord) elementID; assertEquals("INTKEY", record.getName()); //$NON-NLS-1$ assertEquals("BQT/BQT2/HUGEA/INTKEY", record.getPath()); //$NON-NLS-1$ } catch(Exception e) { e.printStackTrace(); fail(e.getMessage()); } } public void testGetElementID2() { try { String resourcePath = SmartTestDesignerSuite.getTestDataPath(getClass())+DELIMITER+RESOURCE_FOLDER+DELIMITER+BQT_VDB; IndexSelector selector = helpGetRuntimeSelector2(resourcePath); IQueryMetadataInterface metadata = helpGetTransformatrionMetadata(selector); Object elementID = metadata.getElementID("bQT.bQt2.HuGEA.INTKEY"); //$NON-NLS-1$ assertNotNull(elementID); assertTrue(elementID instanceof ColumnRecord); ColumnRecord record = (ColumnRecord) elementID; assertEquals("INTKEY", record.getName()); //$NON-NLS-1$ assertEquals("BQT/BQT2/HUGEA/INTKEY", record.getPath()); //$NON-NLS-1$ } catch(Exception e) { e.printStackTrace(); fail(e.getMessage()); } } public void testColumnRecord0() throws Exception { try { IQueryMetadataInterface metadata = helpGetMetadata(BQT_VDB); metadata.getElementID(null); fail("Expected Arg Check failure"); //$NON-NLS-1$ } catch(Exception e) { // failure expected } } public void testGetGroupID1() throws Exception { ServerRuntimeMetadata metadata = helpGetMetadata(QUERY_TEST_VDB); Object groupID = metadata.getGroupID("mmuuid:8d2b0b00-3455-1dfa-9931-e83d04ce10a0"); //$NON-NLS-1$ assertNotNull(groupID); assertTrue(groupID instanceof TableRecord); TableRecord record = (TableRecord) groupID; assertEquals("SMALLB", record.getName().toUpperCase()); //$NON-NLS-1$ assertEquals("BQT2/SmallB", record.getPath()); //$NON-NLS-1$ } public void testGetElementID3() throws Exception { IQueryMetadataInterface metadata = helpGetMetadata(BQT_VDB); Object elementID = metadata.getElementID("BQT.BQT2.HUGEA.INTKEY"); //$NON-NLS-1$ assertNotNull(elementID); assertTrue(elementID instanceof ColumnRecord); ColumnRecord record = (ColumnRecord) elementID; assertEquals("INTKEY", record.getName()); //$NON-NLS-1$ assertEquals("BQT/BQT2/HUGEA/INTKEY", record.getPath()); //$NON-NLS-1$ } public void testGetElementID4() throws Exception { IQueryMetadataInterface metadata = helpGetMetadata(PARTS_VDB); Object elementID = metadata.getElementID("PartsSupplier.PartsSupplier.Parts.Part_Color"); //$NON-NLS-1$ assertNotNull(elementID); assertTrue(elementID instanceof ColumnRecord); ColumnRecord record = (ColumnRecord) elementID; assertEquals("PART_COLOR", record.getName()); //$NON-NLS-1$ assertEquals("PartsSupplier/PARTSSUPPLIER/PARTS/PART_COLOR", record.getPath()); //$NON-NLS-1$ } // defect 16920 public void testGetStroredProc16920 () throws Exception { IQueryMetadataInterface metadata = helpGetMetadata(SOAP_VDB); try { metadata.getStoredProcedureInfoForProcedure("UPD_ST_ADDR"); //$NON-NLS-1$ } catch (Exception e) { }// expected exception } public void testGetVirtualXmlPlan() throws Exception { IQueryMetadataInterface metadata = helpGetMetadata(XML_VDB); Object groupID = metadata.getGroupID("BooksDoc.bookSetMixedDocument"); //$NON-NLS-1$ assertNotNull(groupID); assertTrue(groupID instanceof TableRecord); Object node = metadata.getVirtualPlan(groupID); assertNotNull(node); } // public void testGetXmlSchemas() throws Exception { // IQueryMetadataInterface metadata = helpGetMetadata(XML_VDB); // Object groupID = metadata.getGroupID("BooksDoc.bookSetMixedDocument"); //$NON-NLS-1$ // assertNotNull(groupID); // assertTrue(groupID instanceof TableRecord); // // List schemas = metadata.getXMLSchemas(groupID); // assertNotNull(schemas); // assertEquals(1, schemas.size()); // } public void testGetGroupsForPartialName() throws Exception { IQueryMetadataInterface metadata = helpGetMetadata(BQT_VDB); Collection groups = metadata.getGroupsForPartialName("HUGEA"); //$NON-NLS-1$ assertNotNull(groups); assertEquals(1, groups.size()); assertEquals("BQT.BQT2.HUGEA", groups.iterator().next()); //$NON-NLS-1$ } public void testExtensions() throws Exception { IQueryMetadataInterface metadata = helpGetMetadata(Annotation_VDB); IStoredProcedureInfo info = metadata.getStoredProcedureInfoForProcedure("smallA.smallA"); //$NON-NLS-1$ Object procID = info.getProcedureID(); assertNotNull(info.getProcedureID()); Properties props = metadata.getExtensionProperties(procID); assertNotNull(props); } public void testColumnRecordWithNullArg() { try { IQueryMetadataInterface metadata = helpGetMetadata(BOOKS_VDB); metadata.getElementID(null); fail("Expected Arg Check failure"); //$NON-NLS-1$ } catch(Exception e) { // failure expected } } public void testGetGroupID() { System.out.println("\nTestServerRuntimeMetadata.testGetGroupID()"); //$NON-NLS-1$ try { IQueryMetadataInterface metadata = helpGetMetadata(BOOKS_VDB); Object groupID = metadata.getGroupID("AuthorsDoc.authorBooksDocument"); //$NON-NLS-1$ assertNotNull(groupID); assertTrue(groupID instanceof TableRecord); TableRecord record = (TableRecord) groupID; assertEquals("authorBooksDocument", record.getName()); //$NON-NLS-1$ assertEquals("AuthorsDoc/authorBooksDocument", record.getPath()); //$NON-NLS-1$ } catch(Exception e) { e.printStackTrace(); fail(e.getMessage()); } } public void testGetElementIDsForGroupID() { System.out.println("\nTestServerRuntimeMetadata.testGetElementIDsForGroupID()"); //$NON-NLS-1$ try { IQueryMetadataInterface metadata = helpGetMetadata(BOOKS_VDB); Object groupID = metadata.getGroupID("AuthorsDoc.authorBooksDocument"); //$NON-NLS-1$ assertNotNull(groupID); assertTrue(groupID instanceof TableRecord); List records = metadata.getElementIDsInGroupID(groupID); helpPrintResult(records); assertEquals(16,records.size()); for (Iterator iter = records.iterator(); iter.hasNext();) { ColumnRecord element = (ColumnRecord)iter.next(); assertNotNull( metadata.getElementID(element.getFullName()) ); } } catch(Exception e) { e.printStackTrace(); fail(e.getMessage()); } } public void testGetElementIDsForGroupID2() { System.out.println("\nTestServerRuntimeMetadata.testGetElementIDsForGroupID2()"); //$NON-NLS-1$ try { IQueryMetadataInterface metadata = helpGetMetadata(BOOKS_VDB); Object groupID = metadata.getGroupID("AuthorsDoc.authorsBooksDocument"); //$NON-NLS-1$ assertNotNull(groupID); assertTrue(groupID instanceof TableRecord); List records = metadata.getElementIDsInGroupID(groupID); helpPrintResult(records); assertEquals(17,records.size()); for (Iterator iter = records.iterator(); iter.hasNext();) { ColumnRecord element = (ColumnRecord)iter.next(); assertNotNull( metadata.getElementID(element.getFullName()) ); } } catch(Exception e) { e.printStackTrace(); fail(e.getMessage()); } } public void testGetElementIDsForGroupID3() { System.out.println("\nTestServerRuntimeMetadata.testGetElementIDsForGroupID3()"); //$NON-NLS-1$ try { IQueryMetadataInterface metadata = helpGetMetadata(BOOKS_VDB); Object groupID = metadata.getGroupID("BOOKSO.BOOKS"); //$NON-NLS-1$ assertNotNull(groupID); assertTrue(groupID instanceof TableRecord); List records = metadata.getElementIDsInGroupID(groupID); helpPrintResult(records); assertEquals(7,records.size()); for (Iterator iter = records.iterator(); iter.hasNext();) { ColumnRecord element = (ColumnRecord)iter.next(); assertNotNull( metadata.getElementID(element.getFullName()) ); } } catch(Exception e) { e.printStackTrace(); fail(e.getMessage()); } } public void testGetElementIDsForGroupID4() { System.out.println("\nTestServerRuntimeMetadata.testGetElementIDsForGroupID4()"); //$NON-NLS-1$ try { IQueryMetadataInterface metadata = helpGetMetadata(BOOKS_VDB); Object groupID = metadata.getGroupID("BooksDoc.bookListingDocument"); //$NON-NLS-1$ assertNotNull(groupID); assertTrue(groupID instanceof TableRecord); List records = metadata.getElementIDsInGroupID(groupID); helpPrintResult(records); assertEquals(9,records.size()); for (Iterator iter = records.iterator(); iter.hasNext();) { ColumnRecord element = (ColumnRecord)iter.next(); assertNotNull( metadata.getElementID(element.getFullName()) ); } } catch(Exception e) { e.printStackTrace(); fail(e.getMessage()); } } public void testGetElementIDsForGroupID5() { System.out.println("\nTestServerRuntimeMetadata.testGetElementIDsForGroupID5()"); //$NON-NLS-1$ try { IQueryMetadataInterface metadata = helpGetMetadata(BOOKS_VDB); Object groupID = metadata.getGroupID("BooksDoc.bookSetMixedDocument.MappingClasses.bookSetMixed"); //$NON-NLS-1$ assertNotNull(groupID); assertTrue(groupID instanceof TableRecord); List records = metadata.getElementIDsInGroupID(groupID); helpPrintResult(records); assertEquals(8,records.size()); for (Iterator iter = records.iterator(); iter.hasNext();) { ColumnRecord element = (ColumnRecord)iter.next(); assertNotNull( metadata.getElementID(element.getFullName()) ); } } catch(Exception e) { e.printStackTrace(); fail(e.getMessage()); } } public void testGetUniqueKeysInGroup() { System.out.println("\nTestServerRuntimeMetadata.testGetUniqueKeysInGroup()"); //$NON-NLS-1$ try { IQueryMetadataInterface metadata = helpGetMetadata(BOOKS_VDB); Object groupID = metadata.getGroupID("BOOKSO.BOOK_AUTHORS"); //$NON-NLS-1$ assertNotNull(groupID); assertTrue(groupID instanceof TableRecord); Collection records = metadata.getUniqueKeysInGroup(groupID); assertEquals(1,records.size()); helpPrintResult(records); } catch(Exception e) { e.printStackTrace(); fail(e.getMessage()); } } public void testGetForeignKeysInGroup() { System.out.println("\nTestServerRuntimeMetadata.testGetForeignKeysInGroup()"); //$NON-NLS-1$ try { IQueryMetadataInterface metadata = helpGetMetadata(BOOKS_VDB); Object groupID = metadata.getGroupID("BOOKSO.BOOK_AUTHORS"); //$NON-NLS-1$ assertNotNull(groupID); assertTrue(groupID instanceof TableRecord); Collection records = metadata.getForeignKeysInGroup(groupID); assertEquals(2,records.size()); helpPrintResult(records); } catch(Exception e) { e.printStackTrace(); fail(e.getMessage()); } } public void testGetPrimaryKeyIDForForeignKeyID() { System.out.println("\nTestServerRuntimeMetadata.testGetPrimaryKeyIDForForeignKeyID()"); //$NON-NLS-1$ try { IQueryMetadataInterface metadata = helpGetMetadata(BOOKS_VDB); Object groupID = metadata.getGroupID("BOOKSO.BOOK_AUTHORS"); //$NON-NLS-1$ assertNotNull(groupID); assertTrue(groupID instanceof TableRecord); Collection records = metadata.getForeignKeysInGroup(groupID); assertEquals(2,records.size()); helpPrintResult(records); for (Iterator iter = records.iterator(); iter.hasNext();) { MetadataRecord record = (MetadataRecord)iter.next(); MetadataRecord result = (MetadataRecord)metadata.getPrimaryKeyIDForForeignKeyID(record); assertNotNull(result); System.out.println(result.getFullName()); } } catch(Exception e) { e.printStackTrace(); fail(e.getMessage()); } } public void testGetVirtualPlan() { System.out.println("\nTestServerRuntimeMetadata.testGetVirtualPlan()"); //$NON-NLS-1$ try { IQueryMetadataInterface metadata = helpGetMetadata(BOOKS_VDB); Object groupID = metadata.getGroupID("BOOKSR.LIBRARY"); //$NON-NLS-1$ assertNotNull(groupID); assertTrue(groupID instanceof TableRecord); Object result = metadata.getVirtualPlan(groupID); assertNotNull(result); System.out.println(result); } catch(Exception e) { e.printStackTrace(); fail(e.getMessage()); } } public void testGetInsertPlan() { System.out.println("\nTestServerRuntimeMetadata.testGetVirtualPlan()"); //$NON-NLS-1$ try { IQueryMetadataInterface metadata = helpGetMetadata(TXN_VDB); Object groupID = metadata.getGroupID("TxnTestVirtual.PartTxn"); //$NON-NLS-1$ assertNotNull(groupID); assertTrue(groupID instanceof TableRecord); String result = metadata.getInsertPlan(groupID); assertNotNull(result); System.out.println(result); } catch(Exception e) { e.printStackTrace(); fail(e.getMessage()); } } public void testXMLResultSetColumnPosition() throws Exception{ IQueryMetadataInterface metadata = helpGetMetadata(BOOKS_SERVICE_VDB); Object elementID1 = metadata.getElementID("BooksWebService.Books.getBookCollection.getBookCollectionOutput.Message Samples"); //$NON-NLS-1$ assertNotNull(elementID1); assertTrue(elementID1 instanceof ColumnRecord); ColumnRecord record1 = (ColumnRecord) elementID1; assertEquals(1, record1.getPosition()); elementID1 = metadata.getElementID("BooksFile.getBooks.NewXmlOutput.xml"); //$NON-NLS-1$ assertNotNull(elementID1); assertTrue(elementID1 instanceof ColumnRecord); record1 = (ColumnRecord) elementID1; assertEquals(1, record1.getPosition()); } static class MetadataRecordComparator implements Comparator { @Override public int compare( Object obj1, Object obj2 ) { if (obj1 == null && obj2 == null) { return 0; } else if (obj1 == null && obj2 != null) { return -1; } else if (obj1 != null && obj2 == null) { return 1; } MetadataRecord r1 = (MetadataRecord) obj1; MetadataRecord r2 = (MetadataRecord) obj2; String value1 = r1.getFullName(); String value2 = r2.getFullName(); return value1.compareToIgnoreCase(value2); } } }