public ListClustersResponse listClusters(@NonNull final ListClustersRequest request) throws InternalServiceException { try { List<Cluster> clusters = environmentRepository.listClusters( request.getAccountId(), request.getClusterNamePrefix()); return ListClustersResponse.builder() .clusters(clusters.stream().map(apiModelMapper::toCluster).collect(Collectors.toList())) .build(); } catch (final Exception e) { log.error(e.getMessage(), e); throw new InternalServiceException(e.getMessage(), e); } } }
@Override @SneakyThrows // TODO add checked exception handling public Void handleRequest(CloudWatchEvent<Map> input, Context context) { log.debug("Reconciler request: {}", input); ListClustersResponse r = dataService.listClusters(ListClustersRequest.builder().build()); List<Cluster> clusters = r.getClusters(); clusters .stream() .map(c -> stateFunction.triggerAsync(new ManagerInput(c))) .collect(CompletableFutures.joinList()) .join(); return null; } }
@Test public void invokesManagerAsynchronouslyForAllClusters() throws Exception { when(data.listClusters(any())) .thenReturn(new ListClustersResponse(Arrays.asList(CLUSTER1, CLUSTER2))); when(manager.triggerAsync(input.capture())).thenReturn(CompletableFuture.completedFuture(null)); ReconcilerHandler handler = new ReconcilerHandler(data, manager); handler.handleRequest(new CloudWatchEvent<>(), null); assertThat( input.getAllValues(), hasItems(new ManagerInput(CLUSTER1), new ManagerInput(CLUSTER2))); } }
@Override public ListClustersResponse listClusters(ListClustersRequest request) { return ListClustersResponse.builder() .clusters( Collections.singletonList( Cluster.builder().accountId(accountId).clusterName(clusterName).build())) .build(); }
@Test public void itFiltersByAccountIdIfGiven() throws Exception { when(repository.listClusters("1", null)).thenReturn(asList(cluster("1", "alpha"))); ListClustersResponse response = api.listClusters(ListClustersRequest.builder().accountId("1").build()); assertThat(response.getClusters()) .extracting("accountId", "clusterName") .containsExactly(tuple("1", "alpha")); }
@Bean public DataService dataService() throws Exception { return when(mock(DataService.class).listClusters(ListClustersRequest.builder().build())) .thenReturn( ListClustersResponse.builder() .clusters( Collections.singletonList( Cluster.builder() .accountId(ACCOUNT_ID) .clusterName(CLUSTER_NAME) .build())) .build()) .getMock(); }
@Test public void itFiltersByAccountIdAndPrefixIfGiven() throws Exception { when(repository.listClusters("1", "alpha")) .thenReturn(asList(cluster("1", "alpha-one"), cluster("1", "alpha-two"))); ListClustersResponse response = api.listClusters( ListClustersRequest.builder().accountId("1").clusterNamePrefix("alpha").build()); assertThat(response.getClusters()) .extracting("accountId", "clusterName") .containsExactlyInAnyOrder(tuple("1", "alpha-one"), tuple("1", "alpha-two")); } }
@Test public void itListsAllClusters() throws Exception { when(repository.listClusters(null, null)) .thenReturn(asList(cluster("1", "alpha"), cluster("2", "beta"), cluster("3", "gamma"))); ListClustersResponse response = api.listClusters(ListClustersRequest.builder().build()); assertThat(response.getClusters()) .extracting("accountId", "clusterName") .containsExactlyInAnyOrder(tuple("1", "alpha"), tuple("2", "beta"), tuple("3", "gamma")); }
@Test public void testListClusterWithTwoEnvironments() throws Exception { dataService.createEnvironment( models.createEnvironmentRequest().environmentId(createdEnvironmentId1).build()); dataService.createEnvironment( models.createEnvironmentRequest().environmentId(createdEnvironmentId2).build()); final ListClustersResponse listClustersResponse = dataService.listClusters(models.listClustersRequest().clusterNamePrefix(null).build()); assertThat(listClustersResponse.getClusters()) .isEqualTo( Arrays.asList( models.cluster().clusterName(CLUSTER_ONE).build(), models.cluster().clusterName(CLUSTER_TWO).build())); } }