public List<String> getUuids() { List<String> uuids = new ArrayList<>(); for(EnvironmentAgentConfig config : this) { uuids.add(config.getUuid()); } return uuids; }
@Override public void addAgent(String uuid) { agents.add(new EnvironmentAgentConfig(uuid)); }
@Test public void shouldFailValidationIfUUIDDoesNotMapToAnAgent() { EnvironmentAgentConfig config = new EnvironmentAgentConfig("uuid1"); HashSet<String> uuids = new HashSet<>(); uuids.add("uuid2"); uuids.add("uuid3"); boolean isValid = config.validateUuidPresent(new CaseInsensitiveString("foo"), uuids); assertThat(isValid, is(false)); assertThat(config.errors().on(EnvironmentAgentConfig.UUID), is("Environment 'foo' has an invalid agent uuid 'uuid1'")); }
@Override public boolean validateContainsOnlyUuids(Set<String> uuids) { boolean isValid = true; for (EnvironmentAgentConfig agent : agents) { isValid = agent.validateUuidPresent(name, uuids) && isValid; } return isValid; }
public List<ConfigErrors> validateConfig(CruiseConfig cruiseConfig) { List<ConfigErrors> errors = new ArrayList<>(); Set<String> uuids = cruiseConfig.agents().acceptedUuids(); if (!cruiseConfig.getEnvironments().validateContainOnlyUuids(uuids)) { for (EnvironmentConfig environmentConfig : cruiseConfig.getEnvironments()) { for (EnvironmentAgentConfig environmentAgentConfig : environmentConfig.getAgents()) { if (!environmentAgentConfig.errors().isEmpty()) { errors.add(environmentAgentConfig.errors()); } } } } return errors; } }
@Override public boolean hasAgent(String uuid) { for (EnvironmentAgentConfig agent : agents) { if (agent.hasUuid(uuid)) { return true; } } return false; }
@Test public void shouldPassValidationIfUUIDMapsToAnAgent() { EnvironmentAgentConfig config = new EnvironmentAgentConfig("uuid1"); HashSet<String> uuids = new HashSet<>(); uuids.add("uuid1"); uuids.add("uuid2"); boolean isValid = config.validateUuidPresent(new CaseInsensitiveString("foo"), uuids); assertThat(isValid, is(true)); assertThat(config.errors().isEmpty(), is(true)); } }
@Override public boolean validateContainsOnlyUuids(Set<String> uuids) { boolean isValid = true; for (EnvironmentAgentConfig agent : this.getAgents()) { isValid = agent.validateUuidPresent(this.name(), uuids) && isValid; } return isValid; }
@Test public void shouldNotThrowExceptionIfValidationPasses() throws Exception { BasicCruiseConfig cruiseConfig = new BasicCruiseConfig(); BasicEnvironmentConfig environmentConfig = new BasicEnvironmentConfig(new CaseInsensitiveString("env")); environmentConfig.addAgent("exists_1"); cruiseConfig.addEnvironment(environmentConfig); cruiseConfig.agents().add(new AgentConfig("exists_1")); new EnvironmentAgentValidator().validate(cruiseConfig); assertThat(environmentConfig.getAgents().first().errors().isEmpty(), is(true)); }
private void validateDuplicateAgents(ValidationContext validationContext) { ArrayList<String> allAgents = new ArrayList<>(); for (EnvironmentConfig part : this) { for (EnvironmentAgentConfig agent : part.getAgents()) { if (allAgents.contains(agent.getUuid())) { String message = String.format("Environment agent '%s' is defined more than once.", agent.getUuid()); configErrors.add("agent", message); } else { allAgents.add(agent.getUuid()); } } } }
@Override public void removeAgent(String uuid) { agents.remove(new EnvironmentAgentConfig(uuid)); }
public static void toJSON(OutputWriter outputWriter, EnvironmentAgentConfig agentViewModel) { outputWriter .addLinks(linksWriter -> addLinks(linksWriter, agentViewModel)) .add("uuid", agentViewModel.getUuid()); }
public void setConfigAttributes(Object attributes) { if (attributes != null) { List<Map> agentAttributes = (List) attributes; this.clear(); for (Map attributeMap : agentAttributes) { this.add(new EnvironmentAgentConfig((String) attributeMap.get("uuid"))); } } } }
private static void addLinks(OutputLinkWriter linksWriter, EnvironmentAgentConfig agentViewModel) { String uuid = agentViewModel.getUuid(); linksWriter.addLink("self", Routes.AgentsAPI.uuid(uuid)) .addAbsoluteLink("doc", Routes.AgentsAPI.DOC) .addAbsoluteLink("find", Routes.AgentsAPI.find()); } }
@Override public void addAgentIfNew(String uuid) { EnvironmentAgentConfig agentConfig = new EnvironmentAgentConfig(uuid); if (!agents.contains(agentConfig)) { agents.add(agentConfig); } }
public Agents agentsForPipeline(final CaseInsensitiveString pipelineName) { Agents configs = new Agents(); if (environments.isPipelineAssociatedWithAnyEnvironment(pipelineName)) { EnvironmentConfig forPipeline = environments.findEnvironmentForPipeline(pipelineName); for (EnvironmentAgentConfig environmentAgentConfig : forPipeline.getAgents()) { configs.add(goConfigService.agentByUuid(environmentAgentConfig.getUuid())); } } else { for (AgentConfig agentConfig : goConfigService.agents()) { if (!environments.isAgentUnderEnvironment(agentConfig.getUuid())) { configs.add(agentConfig); } } } return configs; }
@Test public void shouldUpdateAgents() { environmentConfig.addAgent("uuid-1"); environmentConfig.setConfigAttributes(Collections.singletonMap(BasicEnvironmentConfig.AGENTS_FIELD, Arrays.asList(Collections.singletonMap("uuid", "uuid-2"), Collections.singletonMap("uuid", "uuid-3")))); EnvironmentAgentsConfig expectedAgents = new EnvironmentAgentsConfig(); expectedAgents.add(new EnvironmentAgentConfig("uuid-2")); expectedAgents.add(new EnvironmentAgentConfig("uuid-3")); assertThat(environmentConfig.getAgents(), is(expectedAgents)); }
@Test public void shouldModifyEmptyEnvironmentConfigWithUIOrigin() { BasicCruiseConfig mainCruiseConfig = new BasicCruiseConfig(pipelines); PartialConfig partialConfig = PartialConfigMother.withEnvironment("remoteEnv"); partialConfig.setOrigins(new RepoConfigOrigin()); cruiseConfig = new BasicCruiseConfig(mainCruiseConfig, true, partialConfig); cruiseConfig.getEnvironments().get(0).addAgent("agent"); MergeEnvironmentConfig mergedEnv = (MergeEnvironmentConfig) cruiseConfig.getEnvironments().get(0); assertThat(mergedEnv.getFirstEditablePart().getAgents(), hasItem(new EnvironmentAgentConfig("agent"))); }
@Test public void shouldModifyEnvironmentConfigWithFileOrigin() { BasicCruiseConfig mainCruiseConfig = new BasicCruiseConfig(pipelines); BasicEnvironmentConfig envInFile = new BasicEnvironmentConfig(new CaseInsensitiveString("Env")); mainCruiseConfig.addEnvironment(envInFile); mainCruiseConfig.setOrigins(new FileConfigOrigin()); PartialConfig partialConfig = PartialConfigMother.withEnvironment("Env"); partialConfig.setOrigins(new RepoConfigOrigin()); cruiseConfig = new BasicCruiseConfig(mainCruiseConfig, true, partialConfig); cruiseConfig.getEnvironments().get(0).addAgent("agent"); assertThat(envInFile.getAgents(), hasItem(new EnvironmentAgentConfig("agent"))); }