in genie-web/src/integTest/java/com/netflix/genie/web/apis/rest/v3/controllers/CommandRestControllerIntegrationTest.java [1419:1511]
void canGetClustersForCommand() throws Exception {
final String placeholder = UUID.randomUUID().toString();
final String cluster1Id = this.createConfigResource(
new Cluster.Builder(placeholder, placeholder, placeholder, ClusterStatus.UP).build(),
null
);
final String cluster2Id = this.createConfigResource(
new Cluster.Builder(placeholder, placeholder, placeholder, ClusterStatus.OUT_OF_SERVICE).build(),
null
);
final String cluster3Id = this.createConfigResource(
new Cluster
.Builder(placeholder, placeholder, placeholder, ClusterStatus.TERMINATED)
.build(),
null
);
final String commandId = this.createConfigResource(
new Command
.Builder(NAME, USER, VERSION, CommandStatus.ACTIVE, EXECUTABLE_AND_ARGS)
.withClusterCriteria(
Lists.newArrayList(
new Criterion.Builder().withId(cluster1Id).build(),
new Criterion.Builder().withId(cluster2Id).build(),
new Criterion.Builder().withId(cluster3Id).build()
)
)
.build(),
null
);
Assertions
.assertThat(
Arrays.stream(
GenieObjectMapper.getMapper().readValue(
RestAssured
.given(this.getRequestSpecification())
.when()
.port(this.port)
.get(COMMANDS_API + "/{id}/clusters", commandId)
.then()
.statusCode(Matchers.is(HttpStatus.OK.value()))
.contentType(Matchers.containsString(MediaTypes.HAL_JSON_VALUE))
.extract()
.asByteArray(),
new TypeReference<EntityModel<Cluster>[]>() {
}
)
)
.map(EntityModel::getContent)
.filter(Objects::nonNull)
.map(Cluster::getId)
.filter(Optional::isPresent)
.map(Optional::get)
.collect(Collectors.toList())
)
.containsExactlyInAnyOrder(cluster1Id, cluster2Id, cluster3Id);
// Test filtering
final RestDocumentationFilter getFilter = RestAssuredRestDocumentation.document(
"{class-name}/{method-name}/{step}/",
Snippets.ID_PATH_PARAM, // Path parameters
RequestDocumentation.requestParameters(
RequestDocumentation
.parameterWithName("status")
.description("The status of clusters to search for")
.attributes(
Attributes.key(Snippets.CONSTRAINTS).value(CommandStatus.values())
)
.optional()
), // Query Parameters
Snippets.HAL_CONTENT_TYPE_HEADER, // Response Headers
PayloadDocumentation.responseFields(
PayloadDocumentation
.subsectionWithPath("[]")
.description("The list of clusters found")
.attributes(Snippets.EMPTY_CONSTRAINTS)
)
);
RestAssured
.given(this.getRequestSpecification())
.filter(getFilter)
.param("status", ClusterStatus.UP.toString())
.when()
.port(this.port)
.get(COMMANDS_API + "/{id}/clusters", commandId)
.then()
.statusCode(Matchers.is(HttpStatus.OK.value()))
.contentType(Matchers.containsString(MediaTypes.HAL_JSON_VALUE))
.body("$", Matchers.hasSize(1))
.body("[0].id", Matchers.is(cluster1Id));
}