package org.springframework.cloud.service; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.mockito.Mockito.when; import javax.sql.DataSource; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.springframework.beans.factory.FactoryBean; import org.springframework.cloud.Cloud; /** * * @author Ramnivas Laddad * */ public class GenericCloudServiceConnectorFactoryTest { @Mock Cloud mockCloud; @Mock DataSource mockDataSource; private final String serviceId = "mysql-db"; @Before public void setup() { MockitoAnnotations.initMocks(this); } @Test public void creatingBoundServiceWithoutConnectorType() throws Exception { when(mockCloud.getServiceConnector(serviceId, null, null)).thenReturn(mockDataSource); GenericCloudServiceConnectorFactory testFactory = new GenericCloudServiceConnectorFactory(serviceId, null); testFactory.setCloud(mockCloud); testFactory.afterPropertiesSet(); assertSame(mockDataSource, testFactory.getObject()); } @Test public void creatingBoundServiceWithConnectorType() throws Exception { when(mockCloud.getServiceConnector(serviceId, DataSource.class, null)).thenReturn(mockDataSource); GenericCloudServiceConnectorFactory testFactory = new GenericCloudServiceConnectorFactory(serviceId, null); testFactory.setServiceConnectorType(DataSource.class); testFactory.setCloud(mockCloud); testFactory.afterPropertiesSet(); assertSame(mockDataSource, testFactory.getObject()); } @Test public void creatingBoundServiceWithFactoryConnectorType() throws Exception { when(mockCloud.getServiceConnector(serviceId, DataSourceFactory.class, null)).thenReturn(new DataSourceFactory()); GenericCloudServiceConnectorFactory testFactory = new GenericCloudServiceConnectorFactory(serviceId, null); testFactory.setServiceConnectorType(DataSourceFactory.class); testFactory.setCloud(mockCloud); testFactory.afterPropertiesSet(); assertSame(mockDataSource, testFactory.getObject()); } @Test public void creatingBoundServiceWithIncorrectConnectorType() throws Exception { when(mockCloud.getServiceConnector(serviceId, DataSource.class, null)).thenReturn(mockDataSource); GenericCloudServiceConnectorFactory testFactory = new GenericCloudServiceConnectorFactory(serviceId, null); testFactory.setServiceConnectorType(String.class); testFactory.setCloud(mockCloud); testFactory.afterPropertiesSet(); assertNull(testFactory.getObject()); } class DataSourceFactory implements FactoryBean<DataSource> { @Override public DataSource getObject() throws Exception { return mockDataSource; } @Override public Class<?> getObjectType() { return mockDataSource.getClass(); } @Override public boolean isSingleton() { return true; } } }