public NullBuilder() { super(new RunIfConfigs(), null, "NULL"); }
public final void setConfigAttributes(Object attributes, TaskFactory taskFactory) { Map attributeMap = (Map) attributes; if (attributes == null || attributeMap.isEmpty()) { return; } runIfConfigs.clear(); if (attributeMap.containsKey(RUN_IF_CONFIGS_ANY) && "1".equals(attributeMap.get(RUN_IF_CONFIGS_ANY))) { runIfConfigs.add(RunIfConfig.ANY); } if (attributeMap.containsKey(RUN_IF_CONFIGS_FAILED) && "1".equals(attributeMap.get(RUN_IF_CONFIGS_FAILED))) { runIfConfigs.add(RunIfConfig.FAILED); } if (attributeMap.containsKey(RUN_IF_CONFIGS_PASSED) && "1".equals(attributeMap.get(RUN_IF_CONFIGS_PASSED))) { runIfConfigs.add(RunIfConfig.PASSED); } if ("1".equals(attributeMap.get(HAS_CANCEL_TASK))) { onCancelConfig = OnCancelConfig.create((Map) attributeMap.get(ON_CANCEL_CONFIG), taskFactory); } else if ("0".equals(attributeMap.get(HAS_CANCEL_TASK))) { onCancelConfig = OnCancelConfig.killAllChildProcess(); } setTaskConfigAttributes(attributeMap); }
public boolean runIfConfigsAny() { return runIfConfigs.match(RunIfConfig.ANY); }
public String getConditionsForDisplay() { if (runIfConfigs.isEmpty()) { return StringUtils.capitalize(RunIfConfig.PASSED.toString()); } List<String> capitalized = runIfConfigs.stream().map(f -> StringUtils.capitalize(f.toString())).collect(Collectors.toList()); return StringUtils.join(capitalized, ", "); }
@Test public void shouldMatchAnyWhenAnyIsDefined() { RunIfConfigs configs = new RunIfConfigs(RunIfConfig.ANY); assertThat(configs.match(RunIfConfig.fromJobResult(JobResult.Passed.toLowerCase())), is(true)); assertThat(configs.match(RunIfConfig.fromJobResult(JobResult.Failed.toLowerCase())), is(true)); assertThat(configs.match(RunIfConfig.fromJobResult(JobResult.Cancelled.toLowerCase())), is(true)); }
@Test public void shouldAddErrorsToErrorCollectionOfTheCollectionAsWellAsEachRunIfConfig() { RunIfConfigs configs = new RunIfConfigs(); RunIfConfig config = new RunIfConfig("passed"); config.addError("status", "some error"); configs.add(config); configs.addError("key", "some error"); assertThat(configs.errors().on("key"), is("some error")); assertThat(configs.get(0).errors().on("status"), is("some error")); }
public static AbstractTask fromJSON(JsonReader jsonReader, AbstractTask task) { RunIfConfigs runIfConfigs = new RunIfConfigs(); jsonReader.readArrayIfPresent("run_if", configs -> { configs.forEach(runIfConfig -> { runIfConfigs.add(new RunIfConfig(runIfConfig.getAsString())); }); }); task.setConditions(runIfConfigs); jsonReader.optJsonObject("on_cancel").ifPresent(onCancelReader -> { OnCancelConfig onCancelConfig = OnCancelRepresenter.fromJSON(jsonReader.readJsonObject("on_cancel")); task.setOnCancelConfig(onCancelConfig); }); return task; } }
@Test public void shouldResetRunifConfigsWhenTheConfigIsNotPresent() { AbstractTask task = new ExecTask(); task.getConditions().add(RunIfConfig.ANY); task.getConditions().add(RunIfConfig.PASSED); Map attributes = new HashMap(); attributes.put(AbstractTask.RUN_IF_CONFIGS_ANY, "0"); attributes.put(AbstractTask.RUN_IF_CONFIGS_FAILED, "1"); attributes.put(AbstractTask.RUN_IF_CONFIGS_PASSED, "0"); task.setConfigAttributes(attributes); assertThat(task.getConditions().match(RunIfConfig.ANY), is(false)); assertThat(task.getConditions().match(RunIfConfig.FAILED), is(true)); assertThat(task.getConditions().match(RunIfConfig.PASSED), is(false)); }
@Test public void shouldReturnCommaSeparatedRunIfConfigsConditionsForDisplay() { AbstractTask execTask = new ExecTask("ls", "-la", "42"); execTask.getConditions().add(RunIfConfig.PASSED); execTask.getConditions().add(RunIfConfig.FAILED); execTask.getConditions().add(RunIfConfig.ANY); String actual = execTask.getConditionsForDisplay(); assertThat(actual, is("Passed, Failed, Any")); }
public static void toJSON(OutputWriter jsonWriter, AbstractTask task) { jsonWriter.addChildList("run_if", task.getConditions().stream().map(RunIfConfig::toString).collect(Collectors.toList())); if (task.hasCancelTask()) { jsonWriter.addChild("on_cancel", attributeWriter -> OnCancelRepresenter.toJSON(attributeWriter, task.getOnCancelConfig())); } }
private CRRunIf crRunIfs(RunIfConfigs runIfs) { if (runIfs == null || runIfs.isEmpty()) return CRRunIf.passed; RunIfConfig runIf = runIfs.first(); if (runIf.equals(RunIfConfig.ANY)) { return CRRunIf.any; } else if (runIf.equals(RunIfConfig.PASSED)) { return CRRunIf.passed; } else if (runIf.equals(RunIfConfig.FAILED)) { return CRRunIf.failed; } else { throw new RuntimeException( String.format("unknown run if condition '%s'", runIf)); } }
public int hashCode() { int result; result = (conditions != null ? conditions.hashCode() : 0); result = 31 * result + (description != null ? description.hashCode() : 0); result = 31 * result + (cancelBuilder != null ? cancelBuilder.hashCode() : 0); return result; }
@Test public void shouldLoadTasksWithExecutionCondition() throws Exception { CruiseConfig config = ConfigMigrator.loadWithMigration(TASKS_WITH_CONDITION).config; JobConfig job = config.jobConfigByName("pipeline1", "mingle", "cardlist", true); assertThat(job.tasks().size(), is(2)); assertThat(job.tasks().findFirstByType(AntTask.class).getConditions().get(0), is(new RunIfConfig("failed"))); RunIfConfigs conditions = job.tasks().findFirstByType(NantTask.class).getConditions(); assertThat(conditions.get(0), is(new RunIfConfig("failed"))); assertThat(conditions.get(1), is(new RunIfConfig("any"))); assertThat(conditions.get(2), is(new RunIfConfig("passed"))); }
@Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } AbstractTask that = (AbstractTask) o; if (onCancelConfig != null ? !onCancelConfig.equals(that.onCancelConfig) : that.onCancelConfig != null) { return false; } if (runIfConfigs != null ? !runIfConfigs.equals(that.runIfConfigs) : that.runIfConfigs != null) { return false; } return true; }
@Test public void shouldMatchWhenContainsCondition() { RunIfConfigs configs = new RunIfConfigs(PASSED); assertThat(configs.match(RunIfConfig.fromJobResult(JobResult.Passed.toLowerCase())), is(true)); assertThat(configs.match(RunIfConfig.fromJobResult(JobResult.Failed.toLowerCase())), is(false)); assertThat(configs.match(RunIfConfig.fromJobResult(JobResult.Cancelled.toLowerCase())), is(false)); }
public static AbstractTask fromJSON(JsonReader jsonReader, AbstractTask task) { RunIfConfigs runIfConfigs = new RunIfConfigs(); jsonReader.readArrayIfPresent("run_if", configs -> { configs.forEach(runIfConfig -> { runIfConfigs.add(new RunIfConfig(runIfConfig.getAsString())); }); }); task.setConditions(runIfConfigs); jsonReader.optJsonObject("on_cancel").ifPresent(onCancelReader -> { OnCancelConfig onCancelConfig = OnCancelRepresenter.fromJSON(jsonReader.readJsonObject("on_cancel")); task.setOnCancelConfig(onCancelConfig); }); return task; } }
@Test public void shouldSetOnCancelExecTask() { AbstractTask task = new ExecTask(); Map onCancelMapAttrib = new HashMap(); onCancelMapAttrib.put(ExecTask.COMMAND, "sudo"); onCancelMapAttrib.put(ExecTask.ARGS, "ls -la"); onCancelMapAttrib.put(ExecTask.WORKING_DIR, "working_dir"); onCancelMapAttrib.put(AbstractTask.RUN_IF_CONFIGS_ANY, "1"); onCancelMapAttrib.put(AbstractTask.RUN_IF_CONFIGS_FAILED, "1"); onCancelMapAttrib.put(AbstractTask.RUN_IF_CONFIGS_PASSED, "1"); Map onCancelConfigAttributes = new HashMap(); onCancelConfigAttributes.put(OnCancelConfig.EXEC_ON_CANCEL, onCancelMapAttrib); onCancelConfigAttributes.put(OnCancelConfig.ON_CANCEL_OPTIONS, "exec"); Map actualTaskAttributes = new HashMap(); actualTaskAttributes.put(AbstractTask.ON_CANCEL_CONFIG, onCancelConfigAttributes); actualTaskAttributes.put(AbstractTask.HAS_CANCEL_TASK, "1"); ExecTask execTask = new ExecTask(); when(taskFactory.taskInstanceFor(execTask.getTaskType())).thenReturn(execTask); task.setConfigAttributes(actualTaskAttributes, taskFactory); assertThat(task.hasCancelTask(), is(true)); ExecTask expected = new ExecTask("sudo", "ls -la", "working_dir"); expected.getConditions().add(RunIfConfig.ANY); expected.getConditions().add(RunIfConfig.FAILED); expected.getConditions().add(RunIfConfig.PASSED); assertThat(task.cancelTask(), is(expected)); }
public static void toJSON(OutputWriter jsonWriter, AbstractTask task) { jsonWriter.addChildList("run_if", task.getConditions().stream().map(RunIfConfig::toString).collect(Collectors.toList())); if (task.hasCancelTask()) { jsonWriter.addChild("on_cancel", attributeWriter -> OnCancelRepresenter.toJSON(attributeWriter, task.getOnCancelConfig())); } }
@Override public int hashCode() { int result = runIfConfigs != null ? runIfConfigs.hashCode() : 0; result = 31 * result + (onCancelConfig != null ? onCancelConfig.hashCode() : 0); result = 31 * result + getTaskType().hashCode(); return result; }