package cf.spring.servicebroker; import com.fasterxml.jackson.databind.JsonNode; import org.apache.http.impl.client.CloseableHttpClient; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.testng.annotations.Test; import java.util.HashMap; import java.util.Map; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertTrue; /** * @author Mike Heath */ public class CatalogMetaDataTest extends AbstractServiceBrokerTest { private static final String BROKER_ID = "my-cool-broker"; private static final String BROKER_META_FIELD = "meta-field"; private static final String BROKER_META_VALUE = "meta-value"; private static final String DYNAMIC_FIELD = "SpEL"; private static final String DYNAMIC_VALUE = "is cool."; private static final String PLAN_ID = "the-plan"; private static final String PLAN_META_FIELD = "plan-meta-field"; private static final String PLAN_META_VALUE = "meta-world-peace"; @EnableAutoConfiguration @Configuration @EnableServiceBroker(username = USERNAME, password = PASSWORD) @ServiceBroker(@Service(id = BROKER_ID, name = "Service Brokers FTW", description = "Broker with metadata", metadata = @Metadata(field = BROKER_META_FIELD, value = BROKER_META_VALUE), plans = { @ServicePlan(id = PLAN_ID, name = "test", description = "Plan with metadata", metadata = @Metadata(field = PLAN_META_FIELD, value = PLAN_META_VALUE)) })) static class ServiceBrokerSimpleMetaData { @Provision ProvisionResponse provision(ProvisionRequest request) { return null; } @Bind BindResponse bind(BindRequest request) { return null; } } @EnableAutoConfiguration @Configuration @EnableServiceBroker(username = USERNAME, password = PASSWORD) @ServiceBroker(@Service(id = BROKER_ID, name = "Service Brokers FTW", description = "Broker with metadata", metadata = @Metadata(field = "#{brokerField}", value = "#{dynamicValue}"), plans = { @ServicePlan(id = PLAN_ID, name = "test", description = "Plan with metadata", metadata = @Metadata(field = "#{planField}", value = "#{dynamicValue}")) })) static class ServiceBrokerSpelMetaData { @Provision ProvisionResponse provision(ProvisionRequest request) { return null; } @Bind BindResponse bind(BindRequest request) { return null; } @Bean public String brokerField() { return BROKER_META_FIELD; } @Bean public String planField() { return PLAN_META_FIELD; } @Bean Map<String, String> dynamicValue() { final Map<String, String> values = new HashMap<>(); values.put(DYNAMIC_FIELD, DYNAMIC_VALUE); return values; } } @Test public void simpleMetaData() throws Exception { final SpringApplication application = new SpringApplication(ServiceBrokerSimpleMetaData.class); try ( ConfigurableApplicationContext context = application.run(); CloseableHttpClient client = buildAuthenticatingClient() ) { JsonNode catalog = loadCatalog(client); assertNotNull(catalog); assertTrue(catalog.has("services")); final JsonNode services = catalog.get("services"); assertTrue(services.isArray()); assertEquals(services.size(), 1); final JsonNode serviceBroker = services.get(0); assertTrue(serviceBroker.has("metadata")); final JsonNode brokerMetadata = serviceBroker.get("metadata"); assertTrue(brokerMetadata.has(BROKER_META_FIELD)); assertEquals(brokerMetadata.get(BROKER_META_FIELD).asText(), BROKER_META_VALUE); assertTrue(serviceBroker.has("plans")); final JsonNode plans = serviceBroker.get("plans"); assertTrue(plans.isArray()); assertEquals(plans.size(), 1); final JsonNode plan = plans.get(0); assertTrue(plan.has("metadata")); final JsonNode planMetadata = plan.get("metadata"); assertTrue(planMetadata.has(PLAN_META_FIELD)); assertEquals(planMetadata.get(PLAN_META_FIELD).asText(), PLAN_META_VALUE); } } @Test public void spelMetaData() throws Exception { final SpringApplication application = new SpringApplication(ServiceBrokerSpelMetaData.class); try ( ConfigurableApplicationContext context = application.run(); CloseableHttpClient client = buildAuthenticatingClient() ) { JsonNode catalog = loadCatalog(client); assertNotNull(catalog); assertTrue(catalog.has("services")); final JsonNode services = catalog.get("services"); assertTrue(services.isArray()); assertEquals(services.size(), 1); final JsonNode serviceBroker = services.get(0); assertTrue(serviceBroker.has("metadata")); final JsonNode brokerMetadata = serviceBroker.get("metadata"); assertTrue(brokerMetadata.has(BROKER_META_FIELD)); validateDynamicValue(brokerMetadata.get(BROKER_META_FIELD)); assertTrue(serviceBroker.has("plans")); final JsonNode plans = serviceBroker.get("plans"); assertTrue(plans.isArray()); assertEquals(plans.size(), 1); final JsonNode plan = plans.get(0); assertTrue(plan.has("metadata")); final JsonNode planMetadata = plan.get("metadata"); assertTrue(planMetadata.has(PLAN_META_FIELD)); validateDynamicValue(planMetadata.get(PLAN_META_FIELD)); } } private void validateDynamicValue(JsonNode value) { assertNotNull(value); assertTrue(value.has(DYNAMIC_FIELD)); assertEquals(value.get(DYNAMIC_FIELD).asText(), DYNAMIC_VALUE); } }