package org.springframework.cloud.cloudfoundry; import java.io.InputStreamReader; import java.io.Reader; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Scanner; import org.junit.Before; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.springframework.cloud.service.ServiceInfo; import org.springframework.cloud.service.UriBasedServiceInfo; import org.springframework.cloud.util.EnvironmentAccessor; import com.fasterxml.jackson.databind.ObjectMapper; import static org.hamcrest.CoreMatchers.instanceOf; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; /** * Base test class that provides setup and utility methods to generate test payload * * @author Ramnivas Laddad * */ public abstract class AbstractCloudFoundryConnectorTest { protected CloudFoundryConnector testCloudConnector = new CloudFoundryConnector(); @Mock protected EnvironmentAccessor mockEnvironment; protected static final String hostname = "10.20.30.40"; protected static final int port = 1234; protected static String username = "myuser"; protected static final String password = "mypass"; private static ObjectMapper objectMapper = new ObjectMapper(); @Before public void setup() { MockitoAnnotations.initMocks(this); testCloudConnector.setCloudEnvironment(mockEnvironment); } protected static ServiceInfo getServiceInfo(List<ServiceInfo> serviceInfos, String serviceId) { for (ServiceInfo serviceInfo : serviceInfos) { if (serviceInfo.getId().equals(serviceId)) { return serviceInfo; } } return null; } protected String readTestDataFile(String fileName) { Scanner scanner = null; try { Reader fileReader = new InputStreamReader(getClass().getResourceAsStream(fileName)); scanner = new Scanner(fileReader); return scanner.useDelimiter("\\Z").next(); } finally { if (scanner != null) { scanner.close(); } } } protected static String getServicesPayload(String... servicePayloads) { Map<String, List<String>> labelPayloadMap = new HashMap<String, List<String>>(); for (String payload: servicePayloads) { String label = getServiceLabel(payload); List<String> payloadsForLabel = labelPayloadMap.get(label); if (payloadsForLabel == null) { payloadsForLabel = new ArrayList<String>(); labelPayloadMap.put(label, payloadsForLabel); } payloadsForLabel.add(payload); } StringBuilder result = new StringBuilder("{\n"); int labelSize = labelPayloadMap.size(); int i = 0; for (Map.Entry<String, List<String>> entry : labelPayloadMap.entrySet()) { result.append(quote(entry.getKey())).append(":"); result.append(getServicePayload(entry.getValue())); if (i++ != labelSize-1) { result.append(",\n"); } } result.append("}"); return result.toString(); } private static String getServicePayload(List<String> servicePayloads) { StringBuilder payload = new StringBuilder("["); // In Scala, this would have been servicePayloads mkString "," :-) for (int i = 0; i < servicePayloads.size(); i++) { payload.append(servicePayloads.get(i)); if (i != servicePayloads.size() - 1) { payload.append(","); } } payload.append("]"); return payload.toString(); } @SuppressWarnings("unchecked") private static String getServiceLabel(String servicePayload) { try { Map<String, Object> serviceMap = objectMapper.readValue(servicePayload, Map.class); return serviceMap.get("label").toString(); } catch (Exception e) { return null; } } private static String quote(String str) { return "\"" + str + "\""; } protected static void assertServiceFoundOfType(ServiceInfo serviceInfo, Class<? extends ServiceInfo> type) { assertNotNull(serviceInfo); assertThat(serviceInfo, instanceOf(type)); } protected static void assertServiceFoundOfType(List<ServiceInfo> serviceInfos, String serviceId, Class<? extends ServiceInfo> type) { ServiceInfo serviceInfo = getServiceInfo(serviceInfos, serviceId); assertServiceFoundOfType(serviceInfo, type); } protected static void assertUriBasedServiceInfoFields(ServiceInfo serviceInfo, String scheme, String host, int port, String username, String password, String path) { assertThat(serviceInfo, instanceOf(UriBasedServiceInfo.class)); UriBasedServiceInfo info = (UriBasedServiceInfo) serviceInfo; assertEquals(scheme, info.getScheme()); assertEquals(host, info.getHost()); assertEquals(port, info.getPort()); assertEquals(username, info.getUserName()); assertEquals(password, info.getPassword()); assertEquals(path, info.getPath()); } }