public ListEnvironmentsResponse listEnvironments(@NonNull final ListEnvironmentsRequest request) throws InternalServiceException { final Cluster cluster = apiModelMapper.toModelCluster(request.getCluster()); try { final List<Environment> environments = environmentRepository.listEnvironments(cluster, request.getEnvironmentNamePrefix()); return ListEnvironmentsResponse.builder() .environmentIds( environments .stream() .map(e -> apiModelMapper.toWrapperEnvironmentId(e.getEnvironmentId())) .collect(Collectors.toList())) .build(); } catch (final InternalServiceException e) { log.error(e.getMessage(), e); throw e; } catch (final Exception e) { log.error(e.getMessage(), e); throw new InternalServiceException(e.getMessage(), e); } } }
@Test public void testListEnvironments() throws Exception { when(environmentRepository.listEnvironments(cluster, null)) .thenReturn(Collections.singletonList(environment)); final ListEnvironmentsResponse response = api.listEnvironments(request); verify(apiModelMapper).toModelCluster(clusterWrapper); verify(environmentRepository).listEnvironments(cluster, null); assertThat(response.getEnvironmentIds().size()).isEqualTo(1); assertThat(response.getEnvironmentIds().get(0)).isEqualTo(environmentIdWrapper); }
@Override public ListEnvironmentsResponse listEnvironments(ListEnvironmentsRequest request) { return ListEnvironmentsResponse.builder() .environmentIds( Collections.singletonList( EnvironmentId.builder() .accountId(accountId) .cluster(clusterName) .environmentName(environmentName) .build())) .build(); }
@Test public void testListEnvironmentsEmptyResult() throws Exception { when(environmentRepository.listEnvironments(cluster, null)).thenReturn(Collections.emptyList()); final ListEnvironmentsResponse response = api.listEnvironments(request); verify(apiModelMapper).toModelCluster(clusterWrapper); verify(environmentRepository).listEnvironments(cluster, null); verify(apiModelMapper, never()).toWrapperEnvironmentId(any()); assertThat(response.getEnvironmentIds().size()).isEqualTo(0); }
@Test @SuppressWarnings("unchecked") public void invokesSchedulerForAllEnvironments() throws Exception { when(dataService.listEnvironments(ListEnvironmentsRequest.builder().cluster(CLUSTER).build())) .thenReturn( ListEnvironmentsResponse.builder() .environmentIds(Arrays.asList(FIRST_ENVIRONMENT_ID, SECOND_ENVIRONMENT_ID)) .build()); when(scheduler.callAsync(schedulerArgument.capture())) .thenReturn( CompletableFuture.completedFuture( new SchedulerOutput(CLUSTER_NAME, FIRST_ENVIRONMENT_ID, 1, 1))); ManagerHandler handler = new ManagerHandler(dataService, ecs, scheduler); handler.handleRequest(new ManagerInput(CLUSTER), null); assertThat( schedulerArgument.getAllValues(), contains( hasProperty("environmentId", is(FIRST_ENVIRONMENT_ID)), hasProperty("environmentId", is(SECOND_ENVIRONMENT_ID)))); } }
@Override @SneakyThrows // TODO add checked exception handling public ManagerOutput handleRequest(ManagerInput input, Context context) { log.debug("Manager request: {}", input); ListEnvironmentsResponse r = data.listEnvironments( ListEnvironmentsRequest.builder().cluster(input.getCluster()).build()); List<EnvironmentId> environments = r.getEnvironmentIds(); ClusterSnapshot state = ecs.snapshotState(input.getCluster().getClusterName()); Stream<CompletableFuture<SchedulerOutput>> pendingRequests = environments .stream() .map(environmentId -> scheduler.callAsync(new SchedulerInput(state, environmentId))); List<SchedulerOutput> outputs = pendingRequests.collect(CompletableFutures.joinList()).join(); return new ManagerOutput(input.getCluster(), outputs); } }
@Test public void testFromDataServiceResponse() { final ListEnvironmentsResponse dsResponse = ListEnvironmentsResponse.builder() .environmentIds( Collections.singletonList( EnvironmentId.builder() .accountId(ACCOUNT_ID) .cluster(CLUSTER) .environmentName(ENVIRONMENT_NAME) .build())) .build(); final ListEnvironments.ListEnvironmentsResponse response = mapper.fromDataServiceResponse(dsResponse); assertThat(response.getEnvironmentNames().size()).isEqualTo(1); assertThat(response.getEnvironmentNames().get(0)).isEqualTo(ENVIRONMENT_NAME); assertThat(response.getNextToken()).isNull(); } }
@Test public void testListEnvironments() throws Exception { dataService.createEnvironment( models.createEnvironmentRequest().environmentId(createdEnvironmentId1).build()); dataService.createEnvironment( models.createEnvironmentRequest().environmentId(createdEnvironmentId3).build()); final ListEnvironmentsResponse listEnvironmentsResponse = dataService.listEnvironments( models .listEnvironmentsRequest() .cluster(models.cluster().build()) .environmentNamePrefix(null) .build()); assertThat(listEnvironmentsResponse.getEnvironmentIds()) .isEqualTo(Arrays.asList(createdEnvironmentId1, createdEnvironmentId3)); } }
@Bean public DataService dataService() throws Exception { return when(mock(DataService.class) .listEnvironments( ListEnvironmentsRequest.builder() .cluster( Cluster.builder().accountId(ACCOUNT_ID).clusterName(CLUSTER_NAME).build()) .build())) .thenReturn( ListEnvironmentsResponse.builder() .environmentIds( Collections.singletonList( EnvironmentId.builder() .accountId(ACCOUNT_ID) .cluster(CLUSTER_NAME) .environmentName(ENVIRONMENT_NAME) .build())) .build()) .getMock(); }