package org.springframework.cloud.service;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.springframework.cloud.Cloud;
/**
*
* @author Ramnivas Laddad
*
*/
public abstract class AbstractCloudServiceConnectorFactoryTest<SCF extends AbstractCloudServiceConnectorFactory<SC>, SC, SI extends ServiceInfo> {
@Mock Cloud mockCloud;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
}
@Test
public void creatingBoundService() throws Exception {
String id = "my-service";
when(mockCloud.getServiceConnector(id, getConnectorType(), null)).thenReturn(getMockConnector());
SCF testSCF = createTestCloudServiceConnectorFactory(id, null);
testSCF.setCloud(mockCloud);
testSCF.afterPropertiesSet();
assertSame(getMockConnector(), testSCF.getObject());
}
@Test
public void creatingNonExistingServiceShouldFail() throws Exception {
String id = "my-service";
when(mockCloud.getServiceConnector(id, getConnectorType(), null)).thenReturn(null);
SCF testSCF = createTestCloudServiceConnectorFactory(id, null);
testSCF.setCloud(mockCloud);
testSCF.afterPropertiesSet();
assertNull(testSCF.getObject());
}
@Test
public void creatingServiceConnectorWithoutIdReturnsTheSignletonService() throws Exception {
String id = "my-service";
List<ServiceInfo> serviceInfos = new ArrayList<ServiceInfo>();
serviceInfos.add(getTestServiceInfo(id));
when(mockCloud.getServiceConnector(id, getConnectorType(), null)).thenReturn(getMockConnector());
when(mockCloud.getServiceInfos(getConnectorType())).thenReturn(serviceInfos);
SCF testSCF = createTestCloudServiceConnectorFactory(null, null);
testSCF.setCloud(mockCloud);
testSCF.afterPropertiesSet();
assertSame(getMockConnector(), testSCF.getObject());
}
public abstract SCF createTestCloudServiceConnectorFactory(String id, ServiceConnectorConfig config);
public abstract Class<SC> getConnectorType();
public abstract SC getMockConnector();
public abstract SI getTestServiceInfo(String id);
}