// ============================================================================ // // Copyright (C) 2006-2016 Talend Inc. - www.talend.com // // This source code is available under agreement available at // %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt // // You should have received a copy of the agreement // along with this program; if not, write to Talend SA // 9 rue Pages 92150 Suresnes, France // // ============================================================================ package org.talend.dq.helper; import static org.junit.Assert.*; import static org.mockito.Mockito.*; import java.io.File; import java.util.ArrayList; import java.util.List; import junit.framework.Assert; import org.apache.log4j.Logger; import org.eclipse.core.resources.IFolder; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.emf.ecore.util.EcoreUtil; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; import org.talend.commons.exception.PersistenceException; import org.talend.commons.utils.WorkspaceUtils; import org.talend.core.model.metadata.builder.connection.Connection; import org.talend.core.model.metadata.builder.connection.ConnectionFactory; import org.talend.core.model.metadata.builder.connection.DatabaseConnection; import org.talend.core.model.metadata.builder.database.dburl.SupportDBUrlType; import org.talend.core.model.properties.DatabaseConnectionItem; import org.talend.core.model.properties.PropertiesFactory; import org.talend.core.model.repository.ERepositoryObjectType; import org.talend.core.model.repository.IRepositoryViewObject; import org.talend.core.repository.model.ProxyRepositoryFactory; import org.talend.core.repository.model.repositoryObject.MetadataColumnRepositoryObject; import org.talend.core.repository.model.repositoryObject.TdTableRepositoryObject; import org.talend.core.repository.model.repositoryObject.TdViewRepositoryObject; import org.talend.cwm.helper.CatalogHelper; import org.talend.cwm.helper.ConnectionHelper; import org.talend.cwm.helper.SchemaHelper; import org.talend.cwm.helper.TableHelper; import org.talend.cwm.relational.RelationalFactory; import org.talend.cwm.relational.TdColumn; import org.talend.cwm.relational.TdTable; import org.talend.cwm.relational.TdView; import org.talend.dq.nodes.DBColumnRepNode; import org.talend.dq.nodes.DBTableRepNode; import org.talend.dq.nodes.DBViewRepNode; import org.talend.repository.model.IRepositoryNode; import org.talend.repository.model.IRepositoryNode.EProperties; import org.talend.repository.model.RepositoryNode; import orgomg.cwm.resource.relational.Catalog; import orgomg.cwm.resource.relational.Schema; /** * junit test case for class RepositoryNodeHelper, use real objects to test it. * */ public class RepositoryNodeHelperRealTest { Logger log = Logger.getLogger(RepositoryNodeHelperRealTest.class); private UnitTestBuildHelper unitTestBuildHelper; @BeforeClass public static void setUpBeforeClass() throws Exception { // do something here } @AfterClass public static void tearDownAfterClass() throws Exception { // do something here } @Before public void setUp() throws Exception { // do something here UnitTestBuildHelper.initProjectStructure(); } @After public void tearDown() throws Exception { // do something here } /** * Test method for * {@link org.talend.dq.helper.RepositoryNodeHelper#getIFolder(org.talend.repository.model.IRepositoryNode)}. */ @Ignore @Test public void testGetIFolder() { if (this.unitTestBuildHelper != null && this.unitTestBuildHelper.isInit()) { // test DataProfilingNode RepositoryNode dataProfilingNode = this.unitTestBuildHelper.getDataProfilingNode(); IFolder dataProfilingFolder = RepositoryNodeHelper.getIFolder(dataProfilingNode); IPath pathA1 = dataProfilingFolder.getFullPath(); IPath pathA2 = Path.EMPTY.append(this.unitTestBuildHelper.gettProject().getEmfProject().getTechnicalLabel()).append( ERepositoryObjectType.TDQ_DATA_PROFILING.getFolder()); assertTrue(pathA1.makeRelativeTo(pathA2) == Path.EMPTY); String filePathA1 = WorkspaceUtils.ifolderToFile(dataProfilingFolder).toString(); String filePathA2 = this.unitTestBuildHelper.getiProject().getWorkspace().getRoot().getLocation().toOSString() + File.separator + this.unitTestBuildHelper.gettProject().getEmfProject().getTechnicalLabel() + File.separator + ERepositoryObjectType.TDQ_DATA_PROFILING.getFolder(); assertTrue(filePathA1.equals(filePathA2)); // test LibrariesNode RepositoryNode librariesNode = this.unitTestBuildHelper.getLibrariesNode(); IFolder librariesFolder = RepositoryNodeHelper.getIFolder(librariesNode); IPath pathB1 = librariesFolder.getFullPath(); IPath pathB2 = Path.EMPTY.append(this.unitTestBuildHelper.gettProject().getEmfProject().getTechnicalLabel()).append( ERepositoryObjectType.TDQ_LIBRARIES.getFolder()); assertTrue(pathB1.makeRelativeTo(pathB2) == Path.EMPTY); String filePathB1 = WorkspaceUtils.ifolderToFile(librariesFolder).toString(); String filePathB2 = this.unitTestBuildHelper.getiProject().getWorkspace().getRoot().getLocation().toOSString() + File.separator + this.unitTestBuildHelper.gettProject().getEmfProject().getTechnicalLabel() + File.separator + ERepositoryObjectType.TDQ_LIBRARIES.getFolder(); assertTrue(filePathB1.equals(filePathB2)); // test for MetadataNode RepositoryNode metadataNode = this.unitTestBuildHelper.getMetadataNode(); IFolder metadataFolder = RepositoryNodeHelper.getIFolder(metadataNode); IPath pathC1 = metadataFolder.getFullPath(); IPath pathC2 = Path.EMPTY.append(this.unitTestBuildHelper.gettProject().getEmfProject().getTechnicalLabel()).append( ERepositoryObjectType.METADATA.getFolder()); assertTrue(pathC1.makeRelativeTo(pathC2) == Path.EMPTY); String filePathC1 = WorkspaceUtils.ifolderToFile(metadataFolder).toString(); String filePathC2 = this.unitTestBuildHelper.getiProject().getWorkspace().getRoot().getLocation().toOSString() + File.separator + this.unitTestBuildHelper.gettProject().getEmfProject().getTechnicalLabel() + File.separator + ERepositoryObjectType.METADATA.getFolder(); assertTrue(filePathC1.equals(filePathC2)); } } /** * Test method for * {@link org.talend.dq.helper.RepositoryNodeHelper#createRepositoryNode(orgomg.cwm.objectmodel.core.ModelElement)}. * parameter is null */ @Test public void testCreateMysqlColumnRepositoryNodeParameterNull() { RepositoryNode createRepositoryNode = RepositoryNodeHelper.createRepositoryNode(null); Assert.assertTrue(createRepositoryNode == null); } /** * Test method for * {@link org.talend.dq.helper.RepositoryNodeHelper#createRepositoryNode(orgomg.cwm.objectmodel.core.ModelElement)}. * mysql case find column node */ @Test public void testCreateMysqlColumnRepositoryNode() { DatabaseConnectionItem createConnectionItem = createDataBaseConnection("conn1", null, false); //$NON-NLS-1$ Catalog addCatalog = this.addCatalog(createConnectionItem.getConnection(), "catalog1"); //$NON-NLS-1$ TdTable addTable = this.addTable(addCatalog, "table1"); //$NON-NLS-1$ TdColumn addColumn = this.addColumn(addTable, "column1"); //$NON-NLS-1$ try { ProxyRepositoryFactory.getInstance().save(createConnectionItem, null); } catch (PersistenceException e) { log.error(e, e); Assert.fail(e.getMessage()); } RepositoryNode createRepositoryNode = RepositoryNodeHelper.createRepositoryNode(addColumn); if (createRepositoryNode != null) { IRepositoryViewObject object = createRepositoryNode.getObject(); Assert.assertTrue(createRepositoryNode instanceof DBColumnRepNode); Assert.assertTrue(object != null); Assert.assertTrue(object instanceof MetadataColumnRepositoryObject); Assert.assertTrue(object.getId().equals(addColumn.getName())); Assert.assertTrue(object.getLabel().equals(addColumn.getName())); Assert.assertTrue(object.getRepositoryNode() != null); Assert.assertTrue(createRepositoryNode.getProperties(EProperties.LABEL).equals( ERepositoryObjectType.METADATA_CON_COLUMN)); Assert.assertTrue(createRepositoryNode.getProperties(EProperties.CONTENT_TYPE).equals( ERepositoryObjectType.METADATA_CON_COLUMN)); Assert.assertTrue(createRepositoryNode.getParent().getParent().getParent().getParent().getParent() != null); } } /** * Test method for * {@link org.talend.dq.helper.RepositoryNodeHelper#createRepositoryNode(orgomg.cwm.objectmodel.core.ModelElement)}. * mysql case find table node */ @Test public void testCreateMysqlTableRepositoryNode() { DatabaseConnectionItem createConnectionItem = createDataBaseConnection("conn1", null, false); //$NON-NLS-1$ Catalog addCatalog = this.addCatalog(createConnectionItem.getConnection(), "catalog1"); //$NON-NLS-1$ TdTable addTable = this.addTable(addCatalog, "table1"); //$NON-NLS-1$ try { ProxyRepositoryFactory.getInstance().save(createConnectionItem, null); } catch (PersistenceException e) { log.error(e, e); Assert.fail(e.getMessage()); } RepositoryNode createRepositoryNode = RepositoryNodeHelper.createRepositoryNode(addTable); if (createRepositoryNode != null) { IRepositoryViewObject object = createRepositoryNode.getObject(); Assert.assertTrue(createRepositoryNode instanceof DBTableRepNode); Assert.assertTrue(object != null); Assert.assertTrue(object instanceof TdTableRepositoryObject); Assert.assertTrue(object.getId().equals(addTable.getName())); Assert.assertTrue(object.getLabel().equals(addTable.getName())); Assert.assertTrue(object.getRepositoryNode() != null); Assert.assertTrue(createRepositoryNode.getProperties(EProperties.LABEL).equals( ERepositoryObjectType.METADATA_CON_COLUMN)); Assert.assertTrue(createRepositoryNode.getProperties(EProperties.CONTENT_TYPE).equals( ERepositoryObjectType.METADATA_CON_COLUMN)); Assert.assertTrue(createRepositoryNode.getParent().getParent().getParent() != null); } } /** * Test method for * {@link org.talend.dq.helper.RepositoryNodeHelper#createRepositoryNode(orgomg.cwm.objectmodel.core.ModelElement)}. * mysql case find View node */ @Test public void testCreateMysqlViewRepositoryNode() { DatabaseConnectionItem createConnectionItem = createDataBaseConnection("conn1", null, false); //$NON-NLS-1$ Catalog addCatalog = this.addCatalog(createConnectionItem.getConnection(), "catalog1"); //$NON-NLS-1$ TdView addView = this.addView(addCatalog, "view1"); //$NON-NLS-1$ try { ProxyRepositoryFactory.getInstance().save(createConnectionItem, null); } catch (PersistenceException e) { log.error(e, e); Assert.fail(e.getMessage()); } RepositoryNode createRepositoryNode = RepositoryNodeHelper.createRepositoryNode(addView); if (createRepositoryNode != null) { IRepositoryViewObject object = createRepositoryNode.getObject(); Assert.assertTrue(createRepositoryNode instanceof DBViewRepNode); Assert.assertTrue(object != null); Assert.assertTrue(object instanceof TdViewRepositoryObject); Assert.assertTrue(object.getId().equals(addView.getName())); Assert.assertTrue(object.getLabel().equals(addView.getName())); Assert.assertTrue(object.getRepositoryNode() != null); Assert.assertTrue(createRepositoryNode.getProperties(EProperties.LABEL).equals( ERepositoryObjectType.METADATA_CON_COLUMN)); Assert.assertTrue(createRepositoryNode.getProperties(EProperties.CONTENT_TYPE).equals( ERepositoryObjectType.METADATA_CON_COLUMN)); Assert.assertTrue(createRepositoryNode.getParent().getParent().getParent() != null); } } /** * Test method for * {@link org.talend.dq.helper.RepositoryNodeHelper#createRepositoryNode(orgomg.cwm.objectmodel.core.ModelElement)}. * mssql case */ @Test public void testCreateMssqlRepositoryNode() { DatabaseConnectionItem createConnectionItem = createDataBaseConnection("conn1", null, false); //$NON-NLS-1$ Catalog addCatalog = this.addCatalog(createConnectionItem.getConnection(), "catalog1"); //$NON-NLS-1$ Schema addSchema = this.addSchema(addCatalog, "schema1"); //$NON-NLS-1$ TdTable addTable = this.addTable(addSchema, "table1"); //$NON-NLS-1$ TdColumn addColumn = this.addColumn(addTable, "column1"); //$NON-NLS-1$ try { ProxyRepositoryFactory.getInstance().save(createConnectionItem, null); } catch (PersistenceException e) { log.error(e, e); Assert.fail(e.getMessage()); } RepositoryNode createRepositoryNode = RepositoryNodeHelper.createRepositoryNode(addColumn); if (createRepositoryNode != null) { IRepositoryViewObject object = createRepositoryNode.getObject(); Assert.assertTrue(createRepositoryNode instanceof DBColumnRepNode); Assert.assertTrue(object != null); Assert.assertTrue(object instanceof MetadataColumnRepositoryObject); Assert.assertTrue(object.getId().equals(addColumn.getName())); Assert.assertTrue(object.getLabel().equals(addColumn.getName())); Assert.assertTrue(object.getRepositoryNode() != null); Assert.assertTrue(createRepositoryNode.getProperties(EProperties.LABEL).equals( ERepositoryObjectType.METADATA_CON_COLUMN)); Assert.assertTrue(createRepositoryNode.getProperties(EProperties.CONTENT_TYPE).equals( ERepositoryObjectType.METADATA_CON_COLUMN)); Assert.assertTrue(createRepositoryNode.getParent().getParent().getParent().getParent().getParent().getParent() != null); } } /** * Test method for * {@link org.talend.dq.helper.RepositoryNodeHelper#createRepositoryNode(orgomg.cwm.objectmodel.core.ModelElement)}. * oracle case */ @Test public void testCreateOracleRepositoryNode() { DatabaseConnectionItem createConnectionItem = createDataBaseConnection("conn1", null, false); //$NON-NLS-1$ Schema addSchema = this.addSchema(createConnectionItem.getConnection(), "catalog1"); //$NON-NLS-1$ TdTable addTable = this.addTable(addSchema, "table1"); //$NON-NLS-1$ TdColumn addColumn = this.addColumn(addTable, "column1"); //$NON-NLS-1$ try { ProxyRepositoryFactory.getInstance().save(createConnectionItem, null); } catch (PersistenceException e) { log.error(e, e); Assert.fail(e.getMessage()); } RepositoryNode createRepositoryNode = RepositoryNodeHelper.createRepositoryNode(addColumn); if (createRepositoryNode != null) { IRepositoryViewObject object = createRepositoryNode.getObject(); Assert.assertTrue(createRepositoryNode instanceof DBColumnRepNode); Assert.assertTrue(object != null); Assert.assertTrue(object instanceof MetadataColumnRepositoryObject); Assert.assertTrue(object.getId().equals(addColumn.getName())); Assert.assertTrue(object.getLabel().equals(addColumn.getName())); Assert.assertTrue(object.getRepositoryNode() != null); Assert.assertTrue(createRepositoryNode.getProperties(EProperties.LABEL).equals( ERepositoryObjectType.METADATA_CON_COLUMN)); Assert.assertTrue(createRepositoryNode.getProperties(EProperties.CONTENT_TYPE).equals( ERepositoryObjectType.METADATA_CON_COLUMN)); Assert.assertTrue(createRepositoryNode.getParent().getParent().getParent().getParent().getParent() != null); } } private DatabaseConnectionItem createDataBaseConnection(String name, IFolder folder, Boolean isDelete) { DatabaseConnection createConnection = null; IPath createPath = Path.EMPTY; if (folder != null) { createPath = new Path(folder.getFullPath().lastSegment()); } // connection createConnection = ConnectionFactory.eINSTANCE.createDatabaseConnection(); createConnection.setName(name); createConnection.setUsername("UserName"); //$NON-NLS-1$ createConnection.setRawPassword("Password"); //$NON-NLS-1$ createConnection.setURL("URL"); //$NON-NLS-1$ createConnection.setDatabaseType(SupportDBUrlType.MYSQLDEFAULTURL.getDBKey()); // ~connection DatabaseConnectionItem createDatabaseConnectionItem = PropertiesFactory.eINSTANCE.createDatabaseConnectionItem(); org.talend.core.model.properties.Property createDatabaseConnectionProperty = PropertiesFactory.eINSTANCE.createProperty(); createDatabaseConnectionProperty.setId(EcoreUtil.generateUUID()); createDatabaseConnectionProperty.setItem(createDatabaseConnectionItem); createDatabaseConnectionProperty.setLabel(createConnection.getName()); createDatabaseConnectionItem.setProperty(createDatabaseConnectionProperty); createDatabaseConnectionItem.setConnection(createConnection); try { ProxyRepositoryFactory.getInstance().create(createDatabaseConnectionItem, createPath, false); } catch (PersistenceException e) { log.error(e, e); Assert.fail(e.getMessage()); } return createDatabaseConnectionItem; } public Catalog addCatalog(Connection conn, String catalogName) { Catalog createCatalog = CatalogHelper.createCatalog(catalogName); ConnectionHelper.addCatalog(createCatalog, conn); return createCatalog; } public Schema addSchema(Catalog catalog, String schemaName) { Schema createSchema = SchemaHelper.createSchema(schemaName); List<Schema> schemaList = new ArrayList<Schema>(); schemaList.add(createSchema); CatalogHelper.addSchemas(schemaList, catalog); return createSchema; } public Schema addSchema(Connection conn, String schemaName) { Schema createSchema = SchemaHelper.createSchema(schemaName); ConnectionHelper.addSchema(createSchema, conn); return createSchema; } public TdTable addTable(Catalog catalog, String tableName) { TdTable createTdTable = RelationalFactory.eINSTANCE.createTdTable(); createTdTable.setName(tableName); List<TdTable> tables = new ArrayList<TdTable>(); tables.add(createTdTable); CatalogHelper.addTables(tables, catalog); return createTdTable; } public TdTable addTable(Schema schema, String tableName) { TdTable createTdTable = RelationalFactory.eINSTANCE.createTdTable(); createTdTable.setName(tableName); List<TdTable> tables = new ArrayList<TdTable>(); tables.add(createTdTable); SchemaHelper.addTables(tables, schema); return createTdTable; } public TdView addView(Catalog catalog, String tableName) { TdView createTdView = RelationalFactory.eINSTANCE.createTdView(); createTdView.setName(tableName); List<TdView> tables = new ArrayList<TdView>(); tables.add(createTdView); CatalogHelper.addViews(tables, catalog); return createTdView; } public TdColumn addColumn(TdTable table, String columnName) { TdColumn createTdColumn = RelationalFactory.eINSTANCE.createTdColumn(); createTdColumn.setName(columnName); TableHelper.addColumn(table, createTdColumn); return createTdColumn; } // test for match part @Test public void testFilterPackages_1() { RepositoryNode catalogNode1 = mock(RepositoryNode.class); when(catalogNode1.getLabel()).thenReturn("catalog type 1"); //$NON-NLS-1$ RepositoryNode catalogNode2 = mock(RepositoryNode.class); when(catalogNode2.getLabel()).thenReturn("catalog type 2"); //$NON-NLS-1$ RepositoryNode catalogNode3 = mock(RepositoryNode.class); when(catalogNode3.getLabel()).thenReturn("catalog sub 1"); //$NON-NLS-1$ RepositoryNode catalogNode4 = mock(RepositoryNode.class); when(catalogNode4.getLabel()).thenReturn("catalog sub 2"); //$NON-NLS-1$ List<IRepositoryNode> filterPackages = new ArrayList<IRepositoryNode>(); filterPackages.add(catalogNode1); filterPackages.add(catalogNode2); filterPackages.add(catalogNode3); filterPackages.add(catalogNode4); List<IRepositoryNode> filterResult = RepositoryNodeHelper.filterPackages(filterPackages, "type"); //$NON-NLS-1$ Assert.assertEquals(2, filterResult.size()); for (IRepositoryNode node : filterResult) { Assert.assertTrue(node.getLabel().contains("catalog type")); //$NON-NLS-1$ } } // test for no match @Test public void testFilterPackages_2() { RepositoryNode catalogNode1 = mock(RepositoryNode.class); when(catalogNode1.getLabel()).thenReturn("catalog type 1"); //$NON-NLS-1$ RepositoryNode catalogNode2 = mock(RepositoryNode.class); when(catalogNode2.getLabel()).thenReturn("catalog type 2"); //$NON-NLS-1$ RepositoryNode catalogNode3 = mock(RepositoryNode.class); when(catalogNode3.getLabel()).thenReturn("catalog sub 1"); //$NON-NLS-1$ RepositoryNode catalogNode4 = mock(RepositoryNode.class); when(catalogNode4.getLabel()).thenReturn("catalog sub 2"); //$NON-NLS-1$ List<IRepositoryNode> filterPackages = new ArrayList<IRepositoryNode>(); filterPackages.add(catalogNode1); filterPackages.add(catalogNode2); filterPackages.add(catalogNode3); filterPackages.add(catalogNode4); List<IRepositoryNode> filterResult = RepositoryNodeHelper.filterPackages(filterPackages, "no one"); //$NON-NLS-1$ Assert.assertEquals(0, filterResult.size()); } // test for add comma in the filter string @Test public void testFilterPackages_3() { RepositoryNode catalogNode1 = mock(RepositoryNode.class); when(catalogNode1.getLabel()).thenReturn("catalog type 1"); //$NON-NLS-1$ RepositoryNode catalogNode2 = mock(RepositoryNode.class); when(catalogNode2.getLabel()).thenReturn("catalog type 2"); //$NON-NLS-1$ RepositoryNode catalogNode3 = mock(RepositoryNode.class); when(catalogNode3.getLabel()).thenReturn("catalog sub 1"); //$NON-NLS-1$ RepositoryNode catalogNode4 = mock(RepositoryNode.class); when(catalogNode4.getLabel()).thenReturn("catalog sub 2"); //$NON-NLS-1$ List<IRepositoryNode> filterPackages = new ArrayList<IRepositoryNode>(); filterPackages.add(catalogNode1); filterPackages.add(catalogNode2); filterPackages.add(catalogNode3); filterPackages.add(catalogNode4); List<IRepositoryNode> filterResult = RepositoryNodeHelper.filterPackages(filterPackages, "type,sub"); //$NON-NLS-1$ Assert.assertEquals(4, filterResult.size()); for (IRepositoryNode node : filterResult) { Assert.assertTrue(node.getLabel().contains("catalog")); //$NON-NLS-1$ } } }