@Test public void shouldNotUpdateItsAttributesFromAttributeMapWhenKeysNotPresent() throws Exception { FetchTask fetchTask = new FetchTask(); fetchTask.setConfigAttributes( m(FetchTask.PIPELINE_NAME, "pipeline_foo", FetchTask.STAGE, "stage_bar", FetchTask.JOB, "job_baz", FetchTask.SRC, "src_file", FetchTask.IS_SOURCE_A_FILE, "1", FetchTask.SRC, "src_file", FetchTask.DEST, "dest_dir")); fetchTask.setConfigAttributes(m()); assertThat(fetchTask.getTargetPipelineName(), is(new CaseInsensitiveString("pipeline_foo"))); assertThat(fetchTask.getStage(), is(new CaseInsensitiveString("stage_bar"))); assertThat(fetchTask.getJob().toString(), is("job_baz")); assertThat(fetchTask.getSrcfile(), is("src_file")); assertThat(fetchTask.getSrcdir(), is(nullValue())); assertThat(fetchTask.getDest(), is("dest_dir")); }
private CRFetchArtifactTask fetchTaskToCRFetchTask(FetchTask task) { CRFetchArtifactTask fetchTask = new CRFetchArtifactTask( task.getStage().toString(), task.getJob().toString(), task.getSrc()); fetchTask.setDestination(task.getDest()); fetchTask.setPipelineName(task.getPipelineName().toString()); fetchTask.setSourceIsDirectory(!task.isSourceAFile()); commonCRTaskMembers(fetchTask, task); return fetchTask; }
private static void representFetchTask(OutputWriter jsonWriter, FetchTask fetchTask) { jsonWriter.add("is_source_a_file", fetchTask.isSourceAFile()); if (fetchTask.isSourceAFile()) { jsonWriter.add("source", fetchTask.getRawSrcfile()); } else { jsonWriter.add("source", fetchTask.getRawSrcdir()); } jsonWriter.add("destination", fetchTask.getDest()); }
@Override public String describe() { return String.format("fetch artifact [%s] => [%s] from [%s/%s/%s]", getSrc(), getDest(), getPipelineName(), getStage(), getJob()); }
FetchHandler getHandler(FetchTask task, String pipelineName) { return isNotEmpty(task.getRawSrcdir()) ? new DirHandler(task.getRawSrcdir(), task.destOnAgent(pipelineName)) : new FileHandler( task.artifactDest(pipelineName, FilenameUtils.getName(task.getRawSrcfile())), task.getSrc()); }
private Builder createFetchTaskBuilder(FetchTask task, Pipeline pipeline, JobIdentifier fetchFrom, Builder cancelBuilder, ChecksumFileHandler checksumHandler) { final FetchHandler fetchHandler = getHandler(task, pipeline.getName()); return new FetchArtifactBuilder(task.getConditions(), cancelBuilder, task.describe(), fetchFrom, task.getSrc(), task.getDest(), fetchHandler, checksumHandler); }
@Test public void shouldPopulateErrorsIfFetchArtifactDoesNotHaveStageAndOrJobDefined() { FetchTask task = new FetchTask(new CaseInsensitiveString(""), new CaseInsensitiveString(""), new CaseInsensitiveString(""), "src", "dest"); task.validate(ConfigSaveValidationContext.forChain(config, new BasicPipelineConfigs(), downstream, new StageConfig(), new JobConfig())); assertThat(task.errors().isEmpty(), is(false)); assertThat(task.errors().on(FetchTask.STAGE), is("Stage is a required field.")); assertThat(task.errors().on(FetchTask.JOB), is("Job is a required field.")); }
@Test public void shouldPopulateErrorOnSrcFileOrSrcDirOrDestIfIsNotAValidFilePathPattern() { FetchTask task = new FetchTask(new CaseInsensitiveString("upstream"), new CaseInsensitiveString("stage"), new CaseInsensitiveString("job"), "..", ".."); StageConfig stage = upstream.getStage(new CaseInsensitiveString("stage")); ValidationContext context = ConfigSaveValidationContext.forChain(config, new BasicPipelineConfigs(), upstream, stage, stage.getJobs().first()); task.validate(context); assertThat(task.errors().isEmpty(), is(false)); assertThat(task.errors().on(FetchTask.SRC), is("Task of job 'job' in stage 'stage' of pipeline 'upstream' has src path '..' which is outside the working directory.")); assertThat(task.errors().on(FetchTask.DEST), is("Task of job 'job' in stage 'stage' of pipeline 'upstream' has dest path '..' which is outside the working directory.")); task.setSrcfile(null); task.setSrcdir(".."); task.validate(context); assertThat(task.errors().on(FetchTask.SRC), is("Task of job 'job' in stage 'stage' of pipeline 'upstream' has src path '..' which is outside the working directory.")); }
private static AbstractFetchTask fetchTaskFromJson(JsonReader jsonReader) { FetchTask fetchTask = new FetchTask(); if (jsonReader == null) { return fetchTask; } setBaseTask(jsonReader, fetchTask); Optional<Boolean> isSourceAFileValue = jsonReader.optBoolean("is_source_a_file"); Boolean isSourceAFile = isSourceAFileValue.orElse(false); if (isSourceAFile) { jsonReader.readStringIfPresent("source", fetchTask::setSrcfile); } else { jsonReader.readStringIfPresent("source", fetchTask::setSrcdir); } jsonReader.readStringIfPresent("destination", fetchTask::setDest); return fetchTask; }
@Test public void should_NOT_BeValidWhen_ImmediateParentDeclaredInPathFromAncestor_isNotAParentPipeline_PipelineConfigValidationContext() { PipelineConfig upstreamsPeer = config.pipelineConfigByName(new CaseInsensitiveString("upstreams_peer")); upstreamsPeer.setMaterialConfigs(new MaterialConfigs(MaterialConfigsMother.dependencyMaterialConfig("uppest_stream", "uppest-stage1"))); upstreamsPeer.add(StageConfigMother.stageConfig("peer-stage", new JobConfigs(new JobConfig("peer-job")))); downstream = config.pipelineConfigByName(new CaseInsensitiveString("downstream")); downstream.setMaterialConfigs(new MaterialConfigs(MaterialConfigsMother.dependencyMaterialConfig("upstream", "up-stage1"), MaterialConfigsMother.dependencyMaterialConfig("upstreams_peer", "peer-stage"))); FetchTask task = new FetchTask(new CaseInsensitiveString("upstream/uppest_stream"), new CaseInsensitiveString("up-stage1"), new CaseInsensitiveString("up-job1"), "src", "dest"); StageConfig stage = downstream.getStage(new CaseInsensitiveString("stage")); task.validateTree(PipelineConfigSaveValidationContext.forChain(true, "group", config, downstream, stage, stage.getJobs().get(0))); assertThat(task.errors().isEmpty(), is(false)); assertThat(task.errors().on(FetchTask.PIPELINE_NAME), is("Pipeline named 'uppest_stream' exists, but is not an ancestor of 'downstream' as declared in 'upstream/uppest_stream'.")); }
@Test public void shouldIndicateSourceIsAFileBasedOnValuePopulated() { FetchTask fetchTask = new FetchTask(); fetchTask.setSrcfile("a.txt"); assertThat(fetchTask.isSourceAFile(), is(true)); FetchTask fetchTaskWithDir = new FetchTask(); fetchTaskWithDir.setSrcdir("/a/b"); assertThat(fetchTaskWithDir.isSourceAFile(), is(false)); }
@Test public void shouldSetSrcFileToNullIfSrcDirIsDefined() throws Exception { FetchTask fetchTask = new FetchTask(); fetchTask.setConfigAttributes( m(FetchTask.PIPELINE_NAME, "pipeline_foo", FetchTask.STAGE, "stage_bar", FetchTask.JOB, "job_baz", FetchTask.IS_SOURCE_A_FILE, "0", FetchTask.SRC, "src_dir", FetchTask.DEST, "dest_dir")); assertThat(fetchTask.getSrcfile(), is(nullValue())); assertThat(fetchTask.getSrcdir(), is("src_dir")); }
@Test public void describeTestForSrcDirAndSrcFile() throws Exception { FetchTask fetchTask = new FetchTask(new CaseInsensitiveString("mingle"), new CaseInsensitiveString("dev"), new CaseInsensitiveString("windows-3"), "cruise.zip", "dest\\subfolder"); fetchTask.setSrcdir("cruise-output"); assertThat(fetchTask.describe(), is("fetch artifact [cruise.zip] => [dest/subfolder] from [mingle/dev/windows-3]")); }
@Test public void shouldReturnSrcFileWhenSrcFileIsNotEmpty() throws Exception { FetchTask fetchTask = new FetchTask(); fetchTask.setSrcfile("a.jar"); assertThat(fetchTask.getSrc(), is("a.jar")); }
public FetchTask toFetchTask(CRFetchArtifactTask crTask) { FetchTask fetchTask = new FetchTask( new CaseInsensitiveString(crTask.getPipelineName() == null ? "" : crTask.getPipelineName()), new CaseInsensitiveString(crTask.getStage()), new CaseInsensitiveString(crTask.getJob()), crTask.getSource(), crTask.getDestination()); if (crTask.sourceIsDirectory()) { fetchTask.setSrcdir(crTask.getSource()); fetchTask.setSrcfile(null); } setCommonTaskMembers(fetchTask, crTask); return fetchTask; }
@Test public void shouldNormalizeDest() throws Exception { FetchTask fetchTask = new FetchTask(new CaseInsensitiveString("mingle"), new CaseInsensitiveString("dev"), new CaseInsensitiveString("windows-3"), "cruise-output/console.log", "dest\\subfolder"); assertThat(fetchTask.getDest(), is("dest/subfolder")); }
@Test public void shouldPopulateAllFieldsInReturnedPropertiesForDisplay() { FetchTask fetchTask = new FetchTask(new CaseInsensitiveString("foo-pipeline"), new CaseInsensitiveString("bar-stage"), new CaseInsensitiveString("baz-job"), "quux.c", "bang-file"); assertThat(fetchTask.getPropertiesForDisplay(), hasItems(new TaskProperty("Pipeline Name", "foo-pipeline", "pipeline_name"), new TaskProperty("Stage Name", "bar-stage", "stage_name"), new TaskProperty("Job Name", "baz-job", "job_name"), new TaskProperty("Source File", "quux.c", "source_file"), new TaskProperty("Destination", "bang-file", "destination"))); assertThat(fetchTask.getPropertiesForDisplay().size(), is(5)); fetchTask = new FetchTask(new CaseInsensitiveString("foo-pipeline"), new CaseInsensitiveString("bar-stage"), new CaseInsensitiveString("baz-job"), null, "bang-file"); fetchTask.setSrcdir("foo/src"); assertThat(fetchTask.getPropertiesForDisplay(), hasItems(new TaskProperty("Pipeline Name", "foo-pipeline", "pipeline_name"), new TaskProperty("Stage Name", "bar-stage", "stage_name"), new TaskProperty("Job Name", "baz-job", "job_name"), new TaskProperty("Source Directory", "foo/src", "source_directory"), new TaskProperty("Destination", "bang-file", "destination"))); assertThat(fetchTask.getPropertiesForDisplay().size(), is(5)); fetchTask = new FetchTask(new CaseInsensitiveString(null), new CaseInsensitiveString("bar-stage"), new CaseInsensitiveString("baz-job"), null, null); assertThat(fetchTask.getPropertiesForDisplay(), hasItems(new TaskProperty("Stage Name", "bar-stage", "stage_name"), new TaskProperty("Job Name", "baz-job", "job_name"))); assertThat(fetchTask.getPropertiesForDisplay().size(), is(2)); }
@Test public void shouldNormalizeSrcFile() throws Exception { FetchTask fetchTask = new FetchTask(new CaseInsensitiveString("mingle"), new CaseInsensitiveString("dev"), new CaseInsensitiveString("windows-3"), "cruise-output\\console.log", "dest\\subfolder"); assertThat(fetchTask.getSrc(), is("cruise-output/console.log")); }
@Test public void validate_shouldPopulateErrorOnSrcFileOrSrcDirOrDestIfIsNotAValidFilePathPattern() { FetchTask task = new FetchTask(new CaseInsensitiveString(""), new CaseInsensitiveString(""), new CaseInsensitiveString(""), "", ""); task.validateAttributes(ConfigSaveValidationContext.forChain(config, new BasicPipelineConfigs(), downstream, downstream.getStage(new CaseInsensitiveString("stage")), downstream.getStage( new CaseInsensitiveString("stage")).getJobs().get(0))); assertThat(task.errors().isEmpty(), is(false)); assertThat(task.errors().on(FetchTask.SRC), is("Should provide either srcdir or srcfile")); }