package org.teiid.designer.runtime.connection; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.mockito.Mockito.when; import java.util.Properties; import org.eclipse.datatools.connectivity.IConnectionProfile; import org.eclipse.datatools.connectivity.internal.ConnectionProfile; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.teiid.core.designer.util.StringConstants; import org.teiid.designer.core.ModelResourceMockFactory; import org.teiid.designer.core.workspace.ModelResource; import org.teiid.designer.core.workspace.ModelWorkspaceException; import org.teiid.designer.core.workspace.ResourceAnnotationHelper; import org.teiid.designer.datatools.connection.ConnectionInfoHelper; import org.teiid.designer.datatools.connection.ConnectionProfileFactory; public class ConnectionInfoHelperTest { private ConnectionInfoHelper helper; private ModelResource modelResource; @Mock private ResourceAnnotationHelper resourceHelper; @Mock private ConnectionProfile connectionProfile; @Mock private ConnectionProfileFactory connectionProfileFactory; private static String CP_NAME_VALUE = "connectionProfileName"; //$NON-NLS-1$ private static String CP_NAME_KEY = ConnectionInfoHelper.CONNECTION_PROFILE_NAMESPACE + ConnectionInfoHelper.PROFILE_NAME_KEY; private static String CP_DESC_VALUE = "connectionProfileDesc"; //$NON-NLS-1$ private static String CP_DESC_KEY = ConnectionInfoHelper.CONNECTION_PROFILE_NAMESPACE + ConnectionInfoHelper.PROFILE_DESCRIPTION_KEY; private static String CP_PROVIDER_ID_VALUE = "connectionProfileProviderId"; //$NON-NLS-1$ private static String CP_PROVIDER_ID_KEY = ConnectionInfoHelper.CONNECTION_PROFILE_NAMESPACE + ConnectionInfoHelper.PROFILE_PROVIDER_ID_KEY; private static final String EMPTY_STRING = StringConstants.EMPTY_STRING; private Properties connectionProps; private Properties baseConnectionProps; @Before public void beforeEach() throws ModelWorkspaceException { MockitoAnnotations.initMocks(this); connectionProps = new Properties(); connectionProps.put(CP_NAME_KEY, CP_NAME_VALUE); connectionProps.put(CP_DESC_KEY, CP_DESC_VALUE); connectionProps.put(CP_PROVIDER_ID_KEY, CP_PROVIDER_ID_VALUE); // baseConnectionProps = new Properties(); // baseConnectionProps.put(IConnectionInfoHelper.DATABASE_NAME_KEY, VALUE_1); // baseConnectionProps.put(ConnectionInfoHelper.DRIVER_CLASS_KEY, VALUE_2); // Set up ModelResource modelResource = ModelResourceMockFactory.createModelResource("SourceA", "ProjectA"); // Actually set up the ResourceAnnotation with the helper class resourceHelper.getResourceAnnotation(modelResource, true); // Construct a ConnectionInfoHelper with a mock resource helper & mock CP factory helper = new ConnectionInfoHelper(resourceHelper, connectionProfileFactory); // ConnectionInfoProviderFactory factory = new ConnectionInfoProviderFactory(); // provider = factory.getProvider(profile); } @Test public void shouldCreateConnectionProfile() { when(connectionProfileFactory.createConnectionProfile(CP_NAME_VALUE, CP_DESC_VALUE, CP_PROVIDER_ID_VALUE, connectionProps)).thenReturn(connectionProfile); IConnectionProfile profile = helper.createConnectionProfile(CP_NAME_VALUE, CP_DESC_VALUE, CP_PROVIDER_ID_VALUE, connectionProps); assertNotNull(profile); } @Test public void shouldNotCreateConnectionProfileWithNullName() { when(connectionProfileFactory.createConnectionProfile(CP_NAME_VALUE, CP_DESC_VALUE, CP_PROVIDER_ID_VALUE, connectionProps)).thenReturn(connectionProfile); IConnectionProfile profile = helper.createConnectionProfile(null, CP_DESC_VALUE, CP_PROVIDER_ID_VALUE, connectionProps); assertNull(profile); } @Test public void shouldNotCreateConnectionProfileWithEmptyName() { when(connectionProfileFactory.createConnectionProfile(CP_NAME_VALUE, CP_DESC_VALUE, CP_PROVIDER_ID_VALUE, connectionProps)).thenReturn(connectionProfile); IConnectionProfile profile = helper.createConnectionProfile(EMPTY_STRING, CP_DESC_VALUE, CP_PROVIDER_ID_VALUE, connectionProps); assertNull(profile); } @Test public void shouldNotCreateConnectionProfileWithNullId() { when(connectionProfileFactory.createConnectionProfile(CP_NAME_VALUE, CP_DESC_VALUE, CP_PROVIDER_ID_VALUE, connectionProps)).thenReturn(connectionProfile); IConnectionProfile profile = helper.createConnectionProfile(CP_NAME_VALUE, CP_DESC_VALUE, null, connectionProps); assertNull(profile); } @Test public void shouldNotCreateConnectionProfileWithEmptyId() { when(connectionProfileFactory.createConnectionProfile(CP_NAME_VALUE, CP_DESC_VALUE, CP_PROVIDER_ID_VALUE, connectionProps)).thenReturn(connectionProfile); IConnectionProfile profile = helper.createConnectionProfile(CP_NAME_VALUE, CP_DESC_VALUE, EMPTY_STRING, connectionProps); assertNull(profile); } // TODO: This is a difficult test to get to work. The getConnectionProfile() method is creating a new // properties object which can't be mocked with the current method structure. Rethink?? // @Test public void shouldGetConnectionProfile() throws ModelWorkspaceException { when(resourceHelper.getProperties(modelResource, ConnectionInfoHelper.CONNECTION_PROFILE_NAMESPACE)).thenReturn(connectionProps); when(connectionProfileFactory.createConnectionProfile(CP_NAME_VALUE, CP_DESC_VALUE, CP_PROVIDER_ID_VALUE, baseConnectionProps)).thenReturn(connectionProfile); IConnectionProfile profile = helper.getConnectionProfile(modelResource); assertNotNull(profile); } @Test( expected = IllegalArgumentException.class ) public void shouldNotGetConnectionProfileWithNullModelResource() { ModelResource nullMR = null; helper.getConnectionProfile(nullMR); } /* @Test public void modelResourceShouldHaveConnectionInfo() throws ModelWorkspaceException { when(resourceHelper.getProperties(modelResource, ConnectionInfoHelper.CONNECTION_PROFILE_NAMESPACE)).thenReturn(connectionProps); assertTrue(helper.hasConnectionInfo(modelResource)); } */ @Test( expected = IllegalArgumentException.class ) public void shouldNotHaveConnectionInfoWithNullModelResource() { ModelResource nullMR = null; helper.hasConnectionInfo(nullMR); } @Test public void modelResourceShouldNotHaveConnectionInfo() throws ModelWorkspaceException { when(resourceHelper.getProperties(modelResource, ConnectionInfoHelper.CONNECTION_PROFILE_NAMESPACE)).thenReturn(new Properties()); assertFalse(helper.hasConnectionInfo(modelResource)); } /* @Test public void shouldSetConnectionInfo() throws ModelWorkspaceException { when(resourceHelper.getProperties(modelResource, ConnectionInfoHelper.CONNECTION_PROFILE_NAMESPACE)).thenReturn(new Properties()); when(helper.getProperties(connectionProfile)).thenReturn(connectionProps); helper.setConnectionInfo(modelResource, connectionProfile); } @Test( expected = IllegalArgumentException.class ) public void shouldNotSetConnectionInfoNullModelResource() { helper.setConnectionInfo(null, null); } @Test( expected = IllegalArgumentException.class ) public void shouldNotSetConnectionInfoNullConnectionProfile() { helper.setConnectionInfo(modelResource, null); } */ @Test( expected = IllegalArgumentException.class ) public void shouldNotGetPropertiesWithNullConnectionProfile() { ConnectionProfile nullCP = null; helper.getProperties(nullCP); } /* @Test public void shouldGetDataSourceProperties() throws ModelWorkspaceException { when(connectionProfileFactory.createConnectionProfile(CP_NAME_VALUE, CP_DESC_VALUE, CP_PROVIDER_ID_VALUE, connectionProps)).thenReturn(connectionProfile); when(resourceHelper.getProperties(modelResource, ConnectionInfoHelper.CONNECTION_PROFILE_NAMESPACE)).thenReturn(connectionProps); when(helper.getProperties(connectionProfile)).thenReturn(connectionProps); when(connectionProfile.getBaseProperties()).thenReturn(new Properties()); mockStatic(ModelUtil.class); Resource emfResource = mock(Resource.class); when(modelResource.getEmfResource()).thenReturn(emfResource); when(ModelUtil.isPhysical(emfResource)).thenReturn(true); provider.getConnectionProperties(modelResource); } @Test( expected = IllegalArgumentException.class ) public void shouldNotGetDataSourcePropertiesWithNullModelResource() throws ModelWorkspaceException { ModelResource nullMR = null; provider.getConnectionProperties(nullMR); } @Test public void shouldGenerateUniqueConnectionJndiNameWithNamePathUUID() { String jndiName = provider.generateUniqueConnectionJndiName("modelname", new Path("L/MyProject/"), "uuid_AAAA"); assertNotNull(jndiName); } @Test( expected = IllegalArgumentException.class ) public void shouldNotGenerateUniqueConnectionJndiNameWithNullName() { provider.generateUniqueConnectionJndiName(null, null, null); } @Test( expected = IllegalArgumentException.class ) public void shouldNotGenerateUniqueConnectionJndiNameWithEmptyName() { provider.generateUniqueConnectionJndiName(EMPTY_STRING, null, null); } @Test( expected = IllegalArgumentException.class ) public void shouldNotGenerateUniqueConnectionJndiNameWithNullPath() { provider.generateUniqueConnectionJndiName("someName", null, null); } @Test( expected = IllegalArgumentException.class ) public void shouldNotGenerateUniqueConnectionJndiNameWithNullUuid() { provider.generateUniqueConnectionJndiName("someName", new Path("L/MyProject/"), null); } @Test( expected = IllegalArgumentException.class ) public void shouldNotGenerateUniqueConnectionJndiNameWithEmptyUuid() { provider.generateUniqueConnectionJndiName("someName", new Path("L/MyProject/"), EMPTY_STRING); } @Test public void shouldGenerateUniqueConnectionJndiNameWithModelResourceUUID() { when(modelResource.getItemName()).thenReturn("modelname)"); when(modelResource.getPath()).thenReturn(new Path("L/MyProject/")); String jndiName = provider.generateUniqueConnectionJndiName(modelResource, "uuid_AAAA"); assertNotNull(jndiName); } @Test( expected = IllegalArgumentException.class ) public void shouldNotGenerateUniqueConnectionJndiNullModelResource() { ModelResource nullMR = null; provider.generateUniqueConnectionJndiName(nullMR, EMPTY_STRING); } @Test( expected = IllegalArgumentException.class ) public void shouldNotGenerateUniqueConnectionJndiModelResourceNullUuid() { provider.generateUniqueConnectionJndiName(modelResource, null); } @Test( expected = IllegalArgumentException.class ) public void shouldNotGenerateUniqueConnectionJndiModelResourceEmptyUuid() { provider.generateUniqueConnectionJndiName(modelResource, EMPTY_STRING); } @Test( expected = IllegalArgumentException.class ) public void shouldNotGetModelJdbcPropertiesNullModelResource() throws ModelWorkspaceException { ModelResource nullMR = null; provider.getConnectionProperties(nullMR); } */ }