Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Service instance labeling for fetch instance API #349

Open
wants to merge 2 commits into
base: 4.1.x
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,13 @@ public class GetServiceInstanceResponse {

private final Map<String, Object> parameters;

private final ServiceInstanceMetadata metadata;

/**
* Construct a new {@link GetServiceInstanceResponse}
*/
public GetServiceInstanceResponse() {
this(null, null, null, new Hashtable<>());
this(null, null, null, new Hashtable<>(), null);
}

/**
Expand All @@ -64,13 +66,15 @@ public GetServiceInstanceResponse() {
* @param planId the plan ID
* @param dashboardUrl the dashboard URL
* @param parameters the parameters
* @param metadata containing metadata for the service instance
*/
public GetServiceInstanceResponse(String serviceDefinitionId, String planId, String dashboardUrl,
Map<String, Object> parameters) {
Map<String, Object> parameters, ServiceInstanceMetadata metadata) {
this.serviceDefinitionId = serviceDefinitionId;
this.planId = planId;
this.dashboardUrl = dashboardUrl;
this.parameters = parameters;
this.metadata = metadata;
}

/**
Expand Down Expand Up @@ -110,6 +114,15 @@ public Map<String, Object> getParameters() {
return parameters;
}

/**
* Get object containing metadata for the service instance
*
* @return the service instance metadata
*/
public ServiceInstanceMetadata getMetadata() {
return this.metadata;
}

/**
* Create a builder that provides a fluent API for constructing a {@literal GetServiceInstanceResponse}.
*
Expand All @@ -132,7 +145,8 @@ public final boolean equals(Object o) {
Objects.equals(serviceDefinitionId, that.serviceDefinitionId) &&
Objects.equals(planId, that.planId) &&
Objects.equals(dashboardUrl, that.dashboardUrl) &&
Objects.equals(parameters, that.parameters);
Objects.equals(parameters, that.parameters) &&
Objects.equals(metadata, that.metadata);
}

/**
Expand All @@ -147,7 +161,7 @@ public final boolean canEqual(Object other) {

@Override
public final int hashCode() {
return Objects.hash(serviceDefinitionId, planId, dashboardUrl, parameters);
return Objects.hash(serviceDefinitionId, planId, dashboardUrl, parameters, metadata);
}

@Override
Expand All @@ -156,7 +170,8 @@ public String toString() {
"serviceDefinitionId='" + serviceDefinitionId + '\'' +
", planId='" + planId + '\'' +
", dashboardUrl='" + dashboardUrl + '\'' +
", parameters=" + parameters +
", parameters=" + parameters + '\'' +
", metadata=" + metadata +
'}';
}

Expand All @@ -173,6 +188,8 @@ public static final class GetServiceInstanceResponseBuilder {

private final Map<String, Object> parameters = new HashMap<>();

private ServiceInstanceMetadata metadata;

private GetServiceInstanceResponseBuilder() {
}

Expand Down Expand Up @@ -249,13 +266,28 @@ public GetServiceInstanceResponseBuilder parameters(String key, Object value) {
return this;
}

/**
* Object containing metadata for the service instance
* Can be {@literal null} to indicate that metadata was not provided for the service instance.
*
* <p>
* This value will set the {@literal metadata} field in the body of the response to the platform.
*
* @param metadata the service instance metadata
* @return the builder
*/
public GetServiceInstanceResponseBuilder metadata(ServiceInstanceMetadata metadata) {
this.metadata = metadata;
return this;
}

/**
* Construct a {@link GetServiceInstanceResponse} from the provided values.
*
* @return the newly constructed {@literal GetServiceInstanceResponse}
*/
public GetServiceInstanceResponse build() {
return new GetServiceInstanceResponse(serviceDefinitionId, planId, dashboardUrl, parameters);
return new GetServiceInstanceResponse(serviceDefinitionId, planId, dashboardUrl, parameters, metadata);
}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@

import com.jayway.jsonpath.DocumentContext;
import nl.jqno.equalsverifier.EqualsVerifier;
import org.assertj.core.util.Maps;
import org.junit.jupiter.api.Test;

import org.springframework.cloud.servicebroker.JsonUtils;
Expand All @@ -29,6 +30,8 @@
import static org.assertj.core.api.Assertions.entry;
import static org.springframework.cloud.servicebroker.JsonPathAssert.assertThat;



class GetServiceInstanceResponseTest {

@Test
Expand All @@ -40,13 +43,15 @@ void responseWithDefaultsIsBuilt() {
assertThat(response.getPlanId()).isNull();
assertThat(response.getDashboardUrl()).isNull();
assertThat(response.getParameters()).hasSize(0);
assertThat(response.getMetadata()).isNull();

DocumentContext json = JsonUtils.toJsonPath(response);

assertThat(json).hasNoPath("$.service_id");
assertThat(json).hasNoPath("$.plan_id");
assertThat(json).hasNoPath("$.dashboard_url");
assertThat(json).hasMapAtPath("$.parameters").hasSize(0);
assertThat(json).hasNoPath("$.metadata");
}

@Test
Expand All @@ -63,6 +68,7 @@ void responseWithAllValuesIsBuilt() {
.parameters("field2", 2)
.parameters("field3", true)
.parameters(parameters)
.metadata(ServiceInstanceMetadata.builder().label("key","value").build())
.build();

assertThat(response.getServiceDefinitionId()).isEqualTo("service-definition-id");
Expand All @@ -76,6 +82,9 @@ void responseWithAllValuesIsBuilt() {
assertThat(response.getParameters().get("field4")).isEqualTo("value4");
assertThat(response.getParameters().get("field5")).isEqualTo("value5");

assertThat(response.getMetadata()).isEqualTo(
ServiceInstanceMetadata.builder().label("key","value").build());

DocumentContext json = JsonUtils.toJsonPath(response);

assertThat(json).hasPath("$.service_id").isEqualTo("service-definition-id");
Expand All @@ -86,6 +95,8 @@ void responseWithAllValuesIsBuilt() {
assertThat(json).hasPath("$.parameters.field3").isEqualTo(true);
assertThat(json).hasPath("$.parameters.field4").isEqualTo("value4");
assertThat(json).hasPath("$.parameters.field5").isEqualTo("value5");
assertThat(json).hasPath("$.metadata.labels").isEqualTo(
Maps.newHashMap("key", "value"));
}

@Test
Expand All @@ -97,6 +108,13 @@ void responseWithAllValuesIsDeserialized() {
assertThat(response.getPlanId()).isEqualTo("plan-id");
assertThat(response.getDashboardUrl()).isEqualTo("https://dashboard.local");
assertThat(response.getParameters()).containsOnly(entry("field1", "field-a"), entry("field2", "field-b"));

Map<String,Object> labels = new HashMap<>();
labels.put("key1","value1");
labels.put("key2","value2");

assertThat(response.getMetadata()).isEqualTo(ServiceInstanceMetadata.builder().labels(labels).build());

}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,11 @@
"parameters": {
"field1": "field-a",
"field2": "field-b"
},
"metadata": {
"labels": {
"key1" : "value1",
"key2" : "value2"
}
}
}