package org.springframework.cloud; import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; import java.util.ArrayList; import java.util.List; import org.junit.Test; import org.springframework.cloud.app.ApplicationInstanceInfo; import org.springframework.cloud.service.BaseServiceInfo; import org.springframework.cloud.service.ServiceInfo; /** * Test for AbstractCloudConnector. * * @author Ramnivas Laddad * */ public class AbstractCloudConnectorTest { @Test public void fallbacksCorrectly() { TestServiceData acceptableServiceData = new TestServiceData("my-service1", "test-tag"); TestServiceData unAcceptableServiceData = new TestServiceData("my-service2", "unknown-tag"); CloudConnector testCloudConnector = new TestCloudConnector(acceptableServiceData, unAcceptableServiceData); List<ServiceInfo> serviceInfos = testCloudConnector.getServiceInfos(); assertNotNull(serviceInfos); assertEquals(2, serviceInfos.size()); assertThat(serviceInfos.get(0), is(instanceOf(TestServiceInfo.class))); assertThat(serviceInfos.get(0), is(instanceOf(BaseServiceInfo.class))); } } class TestCloudConnector extends AbstractCloudConnector<TestServiceData> { private List<TestServiceData> serviceDatas = new ArrayList<TestServiceData>(); public TestCloudConnector(TestServiceData... serviceDatas) { super(TestServiceInfoCreator.class); for (TestServiceData serviceData : serviceDatas) { this.serviceDatas.add(serviceData); } } @Override public boolean isInMatchingCloud() { return true; } @Override public ApplicationInstanceInfo getApplicationInstanceInfo() { return null; } @Override protected List<TestServiceData> getServicesData() { return serviceDatas; } @Override protected FallbackServiceInfoCreator<BaseServiceInfo,TestServiceData> getFallbackServiceInfoCreator() { return new TestFallbackServiceInfoCreator(); } } class TestFallbackServiceInfoCreator extends FallbackServiceInfoCreator<BaseServiceInfo,TestServiceData> { @Override public BaseServiceInfo createServiceInfo(TestServiceData serviceData) { return new BaseServiceInfo(serviceData.getId()); } } class TestServiceInfo extends BaseServiceInfo { private String tag; public TestServiceInfo(String id, String tag) { super(id); this.tag = tag; } public String getTag() { return this.tag; } } class TestServiceData { private String id; private String tag; public TestServiceData(String id, String tag) { this.id = id; this.tag = tag; } public String getId() { return id; } public String getTag() { return tag; } } class TestCompositeServiceData extends TestServiceData { private TestServiceData[] constituents; public TestCompositeServiceData(String id, String tag, TestServiceData... constituents) { super(id, tag); this.constituents = constituents; } public TestServiceData[] getConstituents() { return constituents; } }