private void validateAllocatedContainers(boolean isReplicated, String containerTemplateLink) throws Throwable { QueryTask.Query kindClause = new QueryTask.Query() .setTermPropertyName(ServiceDocument.FIELD_NAME_KIND) .setTermMatchValue(Utils.buildKind(ContainerService.State.class)); QueryTask.Query containerTemplateClause = new QueryTask.Query() .setTermPropertyName( ContainerService.State.FIELD_NAME_CONTAINER_TEMPLATE_SERVICE_LINK) .setTermMatchValue(containerTemplateLink); QueryTask.QuerySpecification querySpecification = new QueryTask.QuerySpecification(); querySpecification.query.addBooleanClause(kindClause); querySpecification.query.addBooleanClause(containerTemplateClause); QueryTask query = QueryTask.create(querySpecification).setDirect(true); NodeGroupBroadcastResponse queryResponse = testEnvironment.sendBroadcastQueryAndWait(query); Set<String> documentLinks = QueryTaskUtils.getBroadcastQueryResults(queryResponse); // Verify that count(replicas) == count(dockerVms) i.e. 1 container per vm int expectedReplicaCount = isReplicated ? dockerVms.size() : 1; assertThat(documentLinks.size(), is(expectedReplicaCount)); // Verify that each container was assigned to a unique docker vm Set<String> uniqueVmLinks = new HashSet<>(); for (String documentLink : documentLinks) { ContainerService.State state = testEnvironment.getServiceState(documentLink, ContainerService.State.class); uniqueVmLinks.add(state.vmServiceLink); } assertThat(uniqueVmLinks.size(), is(expectedReplicaCount)); }
/** * This method queries for the document link of the cluster configuration for the Kubernetes * Cluster. * * @param currentState */ private void queryClusterConfiguration(final KubernetesClusterCreateTask currentState) { QueryTask.Query kindClause = new QueryTask.Query() .setTermPropertyName(ServiceDocument.FIELD_NAME_KIND) .setTermMatchValue(Utils.buildKind(ClusterConfigurationService.State.class)); QueryTask.Query idClause = new QueryTask.Query() .setTermPropertyName(ClusterConfigurationService.State.FIELD_NAME_SELF_LINK) .setTermMatchValue( ClusterConfigurationServiceFactory.SELF_LINK + "/" + ClusterType.KUBERNETES.toString().toLowerCase()); QueryTask.QuerySpecification querySpecification = new QueryTask.QuerySpecification(); querySpecification.query.addBooleanClause(kindClause); querySpecification.query.addBooleanClause(idClause); QueryTask queryTask = QueryTask.create(querySpecification).setDirect(true); sendRequest( HostUtils.getCloudStoreHelper(this) .createBroadcastPost( ServiceUriPaths.CORE_LOCAL_QUERY_TASKS, ServiceUriPaths.DEFAULT_NODE_SELECTOR) .setBody(queryTask) .setCompletion( (Operation operation, Throwable throwable) -> { if (null != throwable) { failTask(throwable); return; } NodeGroupBroadcastResponse queryResponse = operation.getBody(NodeGroupBroadcastResponse.class); Set<String> documentLinks = QueryTaskUtils.getBroadcastQueryResults(queryResponse); if (documentLinks.isEmpty()) { failTask( new IllegalStateException( String.format( "Cannot find cluster configuration for %s", ClusterType.KUBERNETES.toString()))); return; } retrieveClusterConfiguration(currentState, documentLinks.iterator().next()); })); }