private JobIdentifier jobIdentifier() { JobIdentifier jobIdentifier = new JobIdentifier(pipelineName, 1, pipelineLabel, stageName, stageCounter, jobName, 1L); return jobIdentifier; } }
public static JobInstance buildingInstance(String pipelineName, String stageName, String jobName, String pipelineLabel) { JobInstance job = building(jobName); JobIdentifier identifier = new JobIdentifier(pipelineName, null, pipelineLabel, stageName, "1", jobName, 0L); job.setIdentifier(identifier); return job; }
@Before public void setUp() throws Exception { jobIdentifier = new JobIdentifier("test-pipeline", 1, "Test Pipeline", "test-stage", "1", "test-job"); jobIdentifier.setBuildId(100L); }
@Test public void shouldMakeTheFetchHandlerUseTheArtifactMd5Checksum() throws Exception { ArtifactMd5Checksums artifactMd5Checksums = mock(ArtifactMd5Checksums.class); when(urlService.baseRemoteURL()).thenReturn("http://10.10.1.1/go/files"); when(checksumFileHandler.url("http://10.10.1.1/go/files", "cruise/10/dev/1/windows")).thenReturn("http://10.10.1.1/go/files/cruise/10/dev/1/windows/cruise-output/md5.checksum"); when(checksumFileHandler.getArtifactMd5Checksums()).thenReturn(artifactMd5Checksums); FetchHandler fetchHandler = mock(FetchHandler.class); FetchArtifactBuilder builder = getBuilder(new JobIdentifier("cruise", 10, "1", "dev", "1", "windows", 1L), "log", dest.getPath(), fetchHandler, checksumFileHandler); builder.fetch(downloadAction, urlService); verify(fetchHandler).useArtifactMd5Checksums(artifactMd5Checksums); }
@Test public void shouldReturnBuildLocator() throws Exception { JobIdentifier id = new JobIdentifier("cruise", 1, "label-", "dev", "1", "linux-firefox-1", 100L); assertThat(id.buildLocator(), is("cruise/1/dev/1/linux-firefox-1")); }
@Test public void shouldValidateChecksumOnArtifact() throws Exception { when(urlService.baseRemoteURL()).thenReturn("http://10.10.1.1/go/files"); when(checksumFileHandler.url("http://10.10.1.1/go/files", "cruise/10/dev/1/windows")).thenReturn("http://10.10.1.1/go/files/cruise/10/dev/1/windows/cruise-output/md5.checksum"); FetchArtifactBuilder builder = getBuilder(new JobIdentifier("cruise", 10, "1", "dev", "1", "windows", 1L), "log", dest.getPath(), mock(FetchHandler.class), checksumFileHandler); builder.fetch(downloadAction, urlService); verify(downloadAction).perform("http://10.10.1.1/go/files/cruise/10/dev/1/windows/cruise-output/md5.checksum", checksumFileHandler); }
private DefaultJobPlan jobPlan(String pipelineName) { return new DefaultJobPlan(null, null, null, 0, new JobIdentifier(pipelineName, 0, "label", "stage", "1", "blahBuildName", 0L), null, new EnvironmentVariables(), new EnvironmentVariables(), null); } }
@Test public void shouldGiveWarningWhenMd5FileNotExists() throws Exception { httpService.setupDownload(format("%s/remoting/files/cruise/1/dev/1/windows/a.jar", new URLService().baseRemoteURL()), "some content"); FetchArtifactBuilder builder = getBuilder(new JobIdentifier("cruise", -1, "1", "dev", "1", "windows", 1L), "a.jar", "foo", new FileHandler(new File("pipelines/cruise/foo/a.jar"), "a.jar")); runBuilder(builder, JobResult.Passed); assertThat(new File(sandbox, "pipelines/cruise/foo/a.jar").isFile(), is(true)); assertThat(console.output(), containsString("[WARN] The md5checksum property file was not found")); }
@Test public void shouldBeAbleToSerializeAndDeserialize() throws ClassNotFoundException, IOException { DefaultJobPlan original = new DefaultJobPlan(new Resources(), new ArrayList<>(), new ArrayList<>(), 0, new JobIdentifier(), "uuid", new EnvironmentVariables(), new EnvironmentVariables(), null); DefaultJobPlan clone = (DefaultJobPlan) serializeAndDeserialize(original); assertThat(clone, is(original)); } }
@Test public void shouldBuildWhenChecksumValidForArtifact() throws Exception { httpService.setupDownload(format("%s/remoting/files/cruise/1/dev/1/windows/cruise-output/md5.checksum", new URLService().baseRemoteURL()), "a.jar=9893532233caff98cd083a116b013c0b"); httpService.setupDownload(format("%s/remoting/files/cruise/1/dev/1/windows/a.jar", new URLService().baseRemoteURL()), "some content"); FetchArtifactBuilder builder = getBuilder(new JobIdentifier("cruise", -1, "1", "dev", "1", "windows", 1L), "a.jar", "foo", new FileHandler(new File("pipelines/cruise/foo/a.jar"), "a.jar")); runBuilder(builder, JobResult.Passed); assertThat(console.output(), containsString(format("Saved artifact to [%s] after verifying the integrity of its contents", new File(sandbox, "pipelines/cruise/foo/a.jar").getPath()))); }
@Test public void shouldFailBuildAndPrintErrorMessageToConsoleWhenArtifactNotExisit() throws Exception { FetchArtifactBuilder builder = getBuilder(new JobIdentifier("cruise", -1, "1", "dev", "1", "windows", 1L), "a.jar", "foo", new FileHandler(new File("pipelines/cruise/foo/a.jar"), "a.jar")); runBuilder(builder, JobResult.Failed); assertThat(console.output(), not(containsString("Saved artifact"))); assertThat(console.output(), containsString("Could not fetch artifact")); }
@Test public void shouldSaveFileWhenFetchingFile() throws Exception { ChecksumFileHandler checksumFileHandler = mock(ChecksumFileHandler.class); when(checksumFileHandler.handleResult(SC_OK, publisher)).thenReturn(true); File artifactOnAgent = new File("pipelines/cruise/a.jar"); toClean.add(artifactOnAgent); FetchArtifactBuilder builder = getBuilder(new JobIdentifier("cruise", -1, "1", "dev", "1", "windows", 1L), "log", "some where do download", new FileHandler(artifactOnAgent, getSrc()), checksumFileHandler); builder.fetch(new DownloadAction(new StubFetchZipHttpService(), publisher, clock), new StubURLService()); assertThat(artifactOnAgent.isFile(), is(true)); }
@Test public void shouldFailBuildWhenChecksumNotValidForArtifact() throws Exception { httpService.setupDownload(format("%s/remoting/files/cruise/1/dev/1/windows/cruise-output/md5.checksum", new URLService().baseRemoteURL()), "a.jar=invalid-checksum"); httpService.setupDownload(format("%s/remoting/files/cruise/1/dev/1/windows/a.jar", new URLService().baseRemoteURL()), "some content"); FetchArtifactBuilder builder = getBuilder(new JobIdentifier("cruise", -1, "1", "dev", "1", "windows", 1L), "a.jar", "foo", new FileHandler(new File("pipelines/cruise/foo/a.jar"), "a.jar")); runBuilder(builder, JobResult.Failed); assertThat(console.output(), containsString("[ERROR] Verification of the integrity of the artifact [a.jar] failed")); assertThat(new File(sandbox, "pipelines/cruise/foo/a.jar").isFile(), is(true)); }
private BuildAssignment createAssignment(EnvironmentVariableContext environmentVariableContext) throws IOException { JobPlan plan = new DefaultJobPlan(new Resources(), new ArrayList<>(), new ArrayList<>(), -1, new JobIdentifier(PIPELINE_NAME, 1, "1", STAGE_NAME, "1", JOB_NAME, 123L), null, new EnvironmentVariables(), new EnvironmentVariables(), null); MaterialRevisions materialRevisions = materialRevisions(); BuildCause buildCause = BuildCause.createWithModifications(materialRevisions, TRIGGERED_BY_USER); List<Builder> builders = new ArrayList<>(); builders.add(new CommandBuilder("ls", "", dir, new RunIfConfigs(), new NullBuilder(), "")); return BuildAssignment.create(plan, buildCause, builders, dir, environmentVariableContext, new ArtifactStores()); }
private BuildAssignment createAssignment(EnvironmentVariableContext environmentVariableContext) throws IOException { JobPlan plan = new DefaultJobPlan(new Resources(), new ArrayList<>(), new ArrayList<>(), -1, new JobIdentifier(PIPELINE_NAME, 1, "1", STAGE_NAME, "1", JOB_NAME, 123L), null, new EnvironmentVariables(), new EnvironmentVariables(), null); MaterialRevisions materialRevisions = materialRevisions(); BuildCause buildCause = BuildCause.createWithModifications(materialRevisions, TRIGGERED_BY_USER); List<Builder> builders = new ArrayList<>(); builders.add(new CommandBuilder("ant", "", dir, new RunIfConfigs(), new NullBuilder(), "")); return BuildAssignment.create(plan, buildCause, builders, dir, environmentVariableContext, new ArtifactStores()); }
public static JobInstance instanceForRunMultipleInstance(String pipelineName, String stageName, String jobName, String pipelineLabel, int counter) { String instanceName = RunMultipleInstance.CounterBasedJobNameGenerator.appendMarker(jobName, counter); JobInstance jobInstance = building(instanceName); jobInstance.setRunMultipleInstance(true); JobIdentifier identifier = new JobIdentifier(pipelineName, null, pipelineLabel, stageName, "1", instanceName, 0L); jobInstance.setIdentifier(identifier); return jobInstance; }
private DefaultJobPlan jobPlan(String pipelineName, String jobName, String resource, String uuid) { JobIdentifier jobIdentifier = new JobIdentifier(pipelineName, 1, "1", "stage1", "1", jobName, 1L); DefaultJobPlan plan = new DefaultJobPlan(new Resources(resource), new ArrayList<>(), null, 100, jobIdentifier, null, new EnvironmentVariables(), new EnvironmentVariables(), null); plan.setAgentUuid(uuid); return plan; }
private synchronized Stage persistStage(Pipeline pipeline, Stage stage) { long pipelineId = pipeline.getId(); stage.setOrderId(resolveStageOrder(pipelineId, stage.getName())); Stage savedStage = stageDao.save(pipeline, stage); savedStage.setIdentifier(new StageIdentifier(pipeline.getName(), pipeline.getCounter(), pipeline.getLabel(), stage.getName(), String.valueOf(stage.getCounter()))); for (JobInstance jobInstance : savedStage.getJobInstances()) { jobInstance.setIdentifier(new JobIdentifier(pipeline, savedStage, jobInstance)); } return savedStage; }
@Test public void shouldNotPopulate_RerunOfStage_whenNotAvailable() { JobIdentifier id = new JobIdentifier("pipeline-name", 10, "label-10", "stage-name", "2", "build-name"); EnvironmentVariableContext context = new EnvironmentVariableContext(); id.populateEnvironmentVariables(context); assertThat(context.hasProperty("GO_RERUN_OF_STAGE_COUNTER"), is(false)); id.setRerunOfCounter(1); context = new EnvironmentVariableContext(); id.populateEnvironmentVariables(context); assertThat(context.hasProperty("GO_RERUN_OF_STAGE_COUNTER"), is(true)); } }
@Before public void setUp() throws Exception { httpService = mock(HttpService.class); artifactFolder = temporaryFolder.newFolder("artifact_folder"); tempFile = temporaryFolder.newFile("artifact_folder/file.txt"); FileUtils.writeStringToFile(tempFile, "some-random-data", UTF_8); goArtifactsManipulatorStub = new GoArtifactsManipulatorStub(httpService); jobIdentifier = new JobIdentifier("pipeline1", 1, "label-1", "stage1", "1", "job1"); AgentRuntimeInfo agentRuntimeInfo = new AgentRuntimeInfo(new AgentIdentifier("h", "1", "u"), AgentRuntimeStatus.Idle, currentWorkingDirectory(), null, false); goPublisher = new DefaultGoPublisher(goArtifactsManipulatorStub, jobIdentifier, new BuildRepositoryRemoteStub(), agentRuntimeInfo, "utf-8"); }