package org.springframework.cloud.cloudfoundry; import org.junit.Test; import org.springframework.cloud.service.BaseServiceInfo; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import static org.junit.Assert.*; public class CloudFoundryServiceInfoCreatorTest { @Test public void tagsMatch() { DummyServiceInfoCreator serviceInfoCreator = new DummyServiceInfoCreator(new Tags("firstTag", "secondTag")); assertAcceptedWithTags(serviceInfoCreator, "firstTag", "noMatchTag"); assertAcceptedWithTags(serviceInfoCreator, "noMatchTag", "secondTag"); assertAcceptedWithTags(serviceInfoCreator, "firstTag", "secondTag"); assertNotAcceptedWithTags(serviceInfoCreator, "noMatchTag"); assertNotAcceptedWithTags(serviceInfoCreator); } @Test public void labelMatches() { DummyServiceInfoCreator serviceInfoCreator = new DummyServiceInfoCreator(new Tags("testTag")); assertAcceptedWithLabel(serviceInfoCreator, "testTag"); assertAcceptedWithLabel(serviceInfoCreator, "testTagWithSuffix"); assertNotAcceptedWithLabel(serviceInfoCreator, "withPrefixTestTag"); assertNotAcceptedWithLabel(serviceInfoCreator, "noMatchTag"); } @Test public void uriSchemeMatches() { DummyServiceInfoCreator serviceInfoCreator = new DummyServiceInfoCreator(new Tags(), "amqp", "amqps"); assertAcceptedWithCredentials(serviceInfoCreator, "uri", "amqp://example.com"); assertAcceptedWithCredentials(serviceInfoCreator, "uri", "amqps://example.com"); assertAcceptedWithCredentials(serviceInfoCreator, "url", "amqp://example.com"); assertAcceptedWithCredentials(serviceInfoCreator, "url", "amqps://example.com"); assertNotAcceptedWithCredentials(serviceInfoCreator, "uri", "http://example.com"); assertNotAcceptedWithCredentials(serviceInfoCreator, "url", "http://example.com"); assertNotAcceptedWithCredentials(serviceInfoCreator, "otherkey", "amqp://example.com"); assertNotAcceptedWithCredentials(serviceInfoCreator, "otherkey", "amqps://example.com"); } @Test public void uriKeyMatchesScheme() { DummyServiceInfoCreator serviceInfoCreator = new DummyServiceInfoCreator(new Tags(), "amqp", "amqps"); assertAcceptedWithCredentials(serviceInfoCreator, "amqpUri", "http://example.com"); assertAcceptedWithCredentials(serviceInfoCreator, "amqpsUri", "http://example.com"); assertAcceptedWithCredentials(serviceInfoCreator, "amqpUrl", "http://example.com"); assertAcceptedWithCredentials(serviceInfoCreator, "amqpsUrl", "http://example.com"); assertAcceptedWithCredentials(serviceInfoCreator, "amqpuri", "http://example.com"); assertAcceptedWithCredentials(serviceInfoCreator, "amqpsuri", "http://example.com"); assertAcceptedWithCredentials(serviceInfoCreator, "amqpurl", "http://example.com"); assertAcceptedWithCredentials(serviceInfoCreator, "amqpsurl", "http://example.com"); } @Test public void uriFromCredentials() { DummyServiceInfoCreator serviceInfoCreator = new DummyServiceInfoCreator(new Tags(), "amqp", "amqps"); assertUriRetrieved(serviceInfoCreator, "uri", "amqp://example.com"); assertUriRetrieved(serviceInfoCreator, "uri", "amqps://example.com"); assertUriRetrieved(serviceInfoCreator, "url", "amqp://example.com"); assertUriRetrieved(serviceInfoCreator, "url", "amqps://example.com"); assertUriRetrieved(serviceInfoCreator, "amqpUri", "http://example.com"); assertUriRetrieved(serviceInfoCreator, "amqpsUri", "http://example.com"); assertUriRetrieved(serviceInfoCreator, "amqpUrl", "http://example.com"); assertUriRetrieved(serviceInfoCreator, "amqpsUrl", "http://example.com"); assertUriRetrieved(serviceInfoCreator, "amqpuri", "http://example.com"); assertUriRetrieved(serviceInfoCreator, "amqpsuri", "http://example.com"); assertUriRetrieved(serviceInfoCreator, "amqpurl", "http://example.com"); assertUriRetrieved(serviceInfoCreator, "amqpsurl", "http://example.com"); } @Test public void uriFromCredentialsWithNoSchemes() { DummyServiceInfoCreator serviceInfoCreator = new DummyServiceInfoCreator(new Tags()); assertUriRetrieved(serviceInfoCreator, "uri", "amqp://example.com"); assertUriRetrieved(serviceInfoCreator, "url", "amqp://example.com"); } private void assertUriRetrieved(DummyServiceInfoCreator serviceInfoCreator, String key, String value) { Map<String, Object> serviceData = new ServiceDataBuilder().withCredentials(key, value).build(); Map<String, Object> credentials = serviceInfoCreator.getCredentials(serviceData); String uri = serviceInfoCreator.getUriFromCredentials(credentials); assertEquals(value, uri); } private void assertAcceptedWithTags(DummyServiceInfoCreator serviceInfoCreator, String... tags) { Map<String, Object> serviceData = new ServiceDataBuilder().withTags(tags).build(); assertTrue(serviceInfoCreator.accept(serviceData)); } private void assertNotAcceptedWithTags(DummyServiceInfoCreator serviceInfoCreator, String... tags) { Map<String, Object> serviceData = new ServiceDataBuilder().withTags(tags).build(); assertFalse(serviceInfoCreator.accept(serviceData)); } private void assertAcceptedWithLabel(DummyServiceInfoCreator serviceInfoCreator, String label) { Map<String, Object> serviceData = new ServiceDataBuilder().withLabel(label).build(); assertTrue(serviceInfoCreator.accept(serviceData)); } private void assertNotAcceptedWithLabel(DummyServiceInfoCreator serviceInfoCreator, String label) { Map<String, Object> serviceData = new ServiceDataBuilder().withLabel(label).build(); assertFalse(serviceInfoCreator.accept(serviceData)); } private void assertAcceptedWithCredentials(DummyServiceInfoCreator serviceInfoCreator, String key, String value) { Map<String, Object> serviceData = new ServiceDataBuilder().withCredentials(key, value).build(); assertTrue(serviceInfoCreator.accept(serviceData)); } private void assertNotAcceptedWithCredentials(DummyServiceInfoCreator serviceInfoCreator, String key, String value) { Map<String, Object> serviceData = new ServiceDataBuilder().withCredentials(key, value).build(); assertFalse(serviceInfoCreator.accept(serviceData)); } private class ServiceDataBuilder { private String[] tags = new String[0]; private String label = ""; private Map<String, Object> credentials = new HashMap<String, Object>(); public ServiceDataBuilder withTags(String... tags) { this.tags = tags; return this; } public ServiceDataBuilder withCredentials(String key, String value) { credentials.put(key, value); return this; } public ServiceDataBuilder withLabel(String label) { this.label = label; return this; } public Map<String, Object> build() { Map<String, Object> serviceData = new HashMap<String, Object>(); serviceData.put("tags", Arrays.asList(tags)); serviceData.put("label", label); serviceData.put("credentials", credentials); return serviceData; } } private class DummyServiceInfoCreator extends CloudFoundryServiceInfoCreator<DummyServiceInfo> { public DummyServiceInfoCreator(Tags tags) { super(tags); } public DummyServiceInfoCreator(Tags tags, String... uriSchemes) { super(tags, uriSchemes); } @Override public DummyServiceInfo createServiceInfo(Map<String, Object> serviceData) { return new DummyServiceInfo("test"); } } private class DummyServiceInfo extends BaseServiceInfo { public DummyServiceInfo(String id) { super(id); } @Override public String getId() { return null; } } }