@Test public void shouldReturnSrcFileWhenSrcFileIsNotEmpty() throws Exception { FetchTask fetchTask = new FetchTask(); fetchTask.setSrcfile("a.jar"); assertThat(fetchTask.getSrc(), is("a.jar")); }
@Test public void shouldReturnSrcDirWhenSrcDirIsNotEmpty() throws Exception { FetchTask fetchTask = new FetchTask(); fetchTask.setSrcdir("folder"); assertThat(fetchTask.getSrc(), is("folder")); }
@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 shouldDetectDependencyMaterialUsedInFetchArtifactFromAncestor() { DependencyMaterial material = new DependencyMaterial(new CaseInsensitiveString("parent-pipeline"), new CaseInsensitiveString("stage-bar")); PipelineConfig pipelineConfig = mock(PipelineConfig.class); ArrayList<FetchTask> fetchTasks = new ArrayList<>(); fetchTasks.add(new FetchTask(new CaseInsensitiveString("grandparent-pipeline/parent-pipeline"), new CaseInsensitiveString("grandparent-stage"), new CaseInsensitiveString("grandparent-job"), "src", "dest")); when(pipelineConfig.getFetchTasks()).thenReturn(fetchTasks); assertThat(material.isUsedInFetchArtifact(pipelineConfig), is(true)); }
@Test public void shouldCreateArtifactDest() { FetchTask fetchTask = new FetchTask(new CaseInsensitiveString("up-pipeline"), new CaseInsensitiveString("bar-stage"), new CaseInsensitiveString("baz-job"), "quux.c", "dest-dir"); File artifactDest = fetchTask.artifactDest("foo-pipeline", "file-name-in-dest"); assertThat(artifactDest, is(new File("pipelines/foo-pipeline/dest-dir/file-name-in-dest"))); }
@Test public void shouldSetSrcFileToNullWhenSrcDirIsUpdated() { FetchTask fetchTask = new FetchTask(new CaseInsensitiveString("pname"), new CaseInsensitiveString("sname"), new CaseInsensitiveString("jname"), "sfile", "dest"); 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 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 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 shouldCreateChecksumPath() { FetchTask fetchTask = new FetchTask(new CaseInsensitiveString("up-pipeline"), new CaseInsensitiveString("bar-stage"), new CaseInsensitiveString("baz-job"), "quux.c", "bang-file"); String checksumPath = fetchTask.checksumPath(); assertThat(checksumPath, is("up-pipeline_bar-stage_baz-job_md5.checksum")); }
@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 shouldPopulateErrorsIfFetchArtifactFromPipelineThatIsNotDependency() { FetchTask task = new FetchTask(new CaseInsensitiveString("dummy"), new CaseInsensitiveString("stage"), new CaseInsensitiveString("job"), "src", "dest"); task.validate(ConfigSaveValidationContext.forChain(config, new BasicPipelineConfigs(), downstream, downstream.getStage(new CaseInsensitiveString("stage")))); assertThat(task.errors().isEmpty(), is(false)); assertThat(task.errors().on(FetchTask.PIPELINE_NAME), is("Pipeline \"downstream\" tries to fetch artifact from pipeline " + "\"dummy\" which is not an upstream pipeline")); }
@Test public void shouldBeValidIfFetchArtifactUsingADependantPipeline() { FetchTask task = new FetchTask(new CaseInsensitiveString("upstream"), new CaseInsensitiveString("up-stage1"), new CaseInsensitiveString("up-job1"), "src", "dest"); task.validate(ConfigSaveValidationContext.forChain(config, downstream, downstream.getStage(new CaseInsensitiveString("stage")))); assertThat(task.errors().isEmpty(), is(true)); }
@Test public void validate_shouldNotTryAndValidateWhenWithinTemplate() throws Exception { FetchTask task = new FetchTask(new CaseInsensitiveString("dummy"), new CaseInsensitiveString("stage"), new CaseInsensitiveString("job"), "src", "dest"); task.validate(ConfigSaveValidationContext.forChain(config, new TemplatesConfig(), downstream.getStage(new CaseInsensitiveString("stage")))); assertThat(task.errors().isEmpty(), is(true)); }
@Test public void shouldBeValidWhenFetchArtifactIsFromAnyAncestorStage_s_predecessorStage__onTheUpstreamPipeline() { FetchTask task = new FetchTask(new CaseInsensitiveString("uppest_stream/upstream"), new CaseInsensitiveString("uppest-stage1"), new CaseInsensitiveString("uppest-job1"), "src", "dest"); task.validate(ConfigSaveValidationContext.forChain(config, new BasicPipelineConfigs(), downstream, downstream.getStage(new CaseInsensitiveString("stage")))); assertThat(task.errors().isEmpty(), is(true)); }
@Test public void shouldPopulateErrorsIfFetchArtifactUsingJobNameWithDifferentCase() { FetchTask task = new FetchTask(new CaseInsensitiveString("upstream"), new CaseInsensitiveString("stage"), new CaseInsensitiveString("JOB"), "src", "dest"); task.validate(ConfigSaveValidationContext.forChain(config, new BasicPipelineConfigs(), downstream, downstream.getStage(new CaseInsensitiveString("stage")))); assertThat(task.errors().isEmpty(), is(true)); }
@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")); }
@Test public void shouldPopulateErrorIfFetchArtifactFromDependentPipelineButStageDoesNotExist() { FetchTask task = new FetchTask(new CaseInsensitiveString("upstream"), new CaseInsensitiveString("stage-does-not-exist"), new CaseInsensitiveString("job"), "src", "dest"); task.validate(ConfigSaveValidationContext.forChain(config, new BasicPipelineConfigs(), downstream, downstream.getStage(new CaseInsensitiveString("stage")), downstream.getStage( new CaseInsensitiveString("stage")), downstream.getStage(new CaseInsensitiveString("stage")).getJobs().get(0))); assertThat(task.errors().isEmpty(), is(false)); assertThat(task.errors().on(FetchTask.STAGE), is("\"downstream :: stage :: job\" tries to fetch artifact from stage " + "\"upstream :: stage-does-not-exist\" which does not exist.")); }
@Test public void validate_shouldNotErrorWhenReferencingConfigRepositoryPipelineFromConfigRepositoryPipeline() { uppestStream.setOrigin(new RepoConfigOrigin()); downstream.setOrigin(new RepoConfigOrigin()); FetchTask task = new FetchTask(new CaseInsensitiveString("uppest_stream/upstream"), new CaseInsensitiveString("uppest-stage2"), new CaseInsensitiveString("uppest-job2"), "src", "dest"); task.validate(ConfigSaveValidationContext.forChain(config, new BasicPipelineConfigs(), downstream, downstream.getStage(new CaseInsensitiveString("stage")))); assertThat(task.errors().isEmpty(), is(true)); }
@Test public void validate_shouldNotErrorWhenReferencingFilePipelineFromFilePipeline() { uppestStream.setOrigin(new FileConfigOrigin()); downstream.setOrigin(new FileConfigOrigin()); FetchTask task = new FetchTask(new CaseInsensitiveString("uppest_stream/upstream"), new CaseInsensitiveString("uppest-stage2"), new CaseInsensitiveString("uppest-job2"), "src", "dest"); task.validate(ConfigSaveValidationContext.forChain(config, new BasicPipelineConfigs(), downstream, downstream.getStage(new CaseInsensitiveString("stage")))); assertThat(task.errors().isEmpty(), is(true)); }
@Test public void validate_shouldErrorWhenReferencingConfigRepositoryPipelineFromFilePipeline() { uppestStream.setOrigin(new RepoConfigOrigin()); downstream.setOrigin(new FileConfigOrigin()); FetchTask task = new FetchTask(new CaseInsensitiveString("uppest_stream/upstream"), new CaseInsensitiveString("uppest-stage2"), new CaseInsensitiveString("uppest-job2"), "src", "dest"); StageConfig stage = downstream.getStage(new CaseInsensitiveString("stage")); task.validate(ConfigSaveValidationContext.forChain(config, new BasicPipelineConfigs(), downstream, stage, stage.getJobs().first())); assertThat(task.errors().isEmpty(), is(false)); assertThat(task.errors().on(FetchTask.ARTIFACT_ORIGIN), startsWith("\"downstream :: stage :: job\" tries to fetch artifact from job \"uppest_stream :: uppest-stage2 :: uppest-job2\" which is defined in")); }