public void setRunInstanceCount(Integer runInstanceCount) { setRunInstanceCount(Integer.toString(runInstanceCount)); }
private static void setRunInstanceCount(JobConfig jobConfig) { String runInstanceCount = null; if (jsonReader.hasJsonObject("run_instance_count")) { runInstanceCount = jsonReader.getString("run_instance_count"); } if ("all".equalsIgnoreCase(runInstanceCount)) { jobConfig.setRunOnAllAgents(true); } else if (!"null".equalsIgnoreCase(runInstanceCount)) { jobConfig.setRunInstanceCount(runInstanceCount); } } }
private static void setRunInstanceCount(JobConfig jobConfig) { String runInstanceCount = null; if (jsonReader.hasJsonObject("run_instance_count")) { runInstanceCount = jsonReader.getString("run_instance_count"); } if ("all".equalsIgnoreCase(runInstanceCount)) { jobConfig.setRunOnAllAgents(true); } else if (!"null".equalsIgnoreCase(runInstanceCount)) { jobConfig.setRunInstanceCount(runInstanceCount); } } }
public static JobConfig jobWithNoResourceRequirement() { JobConfig jobConfig = jobConfig(); jobConfig.setName(UUID.randomUUID().toString()); jobConfig.setRunInstanceCount((String)null); jobConfig.resourceConfigs().clear(); return jobConfig; } }
@Test public void shouldSupportRunMultipleInstance() throws Exception { CruiseConfig cruiseConfig = loadJobWithRunMultipleInstance("10"); JobConfig job = cruiseConfig.findJob("pipeline1", "mingle", "do-something"); JobConfig jobConfig = new JobConfig("do-something"); jobConfig.setRunInstanceCount(10); assertThat(job, is(jobConfig)); }
@Before public void setup() { jobConfig = new JobConfig(new CaseInsensitiveString("job")); jobConfig.setRunInstanceCount(10); }
@Test public void shouldReturnRunTypeCorrectly() { JobConfig job = new JobConfig("job"); assertThat(job.getRunType(), is(JobConfig.RUN_SINGLE_INSTANCE)); job.setRunOnAllAgents(true); assertThat(job.getRunType(), is(JobConfig.RUN_ON_ALL_AGENTS)); job.setRunOnAllAgents(false); job.setRunInstanceCount(10); assertThat(job.getRunType(), is(JobConfig.RUN_MULTIPLE_INSTANCE)); }
@Test public void shouldNotRerun_WhenJobConfigIsChangedToRunMultipleInstance_ForSingleJobInstance() { Date old = new DateTime().minusDays(2).toDate(); StageConfig stageConfig = StageConfigMother.custom("dev", "rails", "java"); JobConfig railsConfig = stageConfig.getJobs().getJob(new CaseInsensitiveString("rails")); DefaultSchedulingContext schedulingContext = new DefaultSchedulingContext("loser", new Agents()); JobInstances jobs = instanceFactory.createJobInstance(new CaseInsensitiveString("dev"), railsConfig, schedulingContext, new TimeProvider(), null); Stage stage = createStageInstance(old, jobs); Stage newStage = null; railsConfig.setRunInstanceCount(10); CannotRerunJobException exception = null; try { newStage = instanceFactory.createStageForRerunOfJobs(stage, a("rails"), schedulingContext, stageConfig, new TimeProvider(), "md5"); fail("should not schedule since job config changed to run multiple instance"); } catch (CannotRerunJobException e) { exception = e; } assertThat(exception.getJobName(), is("rails")); assertThat(exception.getInformation(), is("Run configuration for job has been changed to 'run multiple instance'.")); assertThat(newStage, is(nullValue())); }
@Test public void shouldValidateAgainstSettingRunOnAllAgentsAndRunInstanceCountSetTogether() { JobConfig jobConfig = new JobConfig(new CaseInsensitiveString("test")); jobConfig.setRunOnAllAgents(true); jobConfig.setRunInstanceCount(10); jobConfig.validate(ConfigSaveValidationContext.forChain(new BasicCruiseConfig())); ConfigErrors configErrors = jobConfig.errors(); assertThat(configErrors.isEmpty(), is(false)); assertThat(configErrors.on(JobConfig.RUN_TYPE), is("Job cannot be 'run on all agents' type and 'run multiple instance' type together.")); }
railsConfig.setRunInstanceCount(3); railsConfig.setRunInstanceCount(0);
@Test public void shouldNotRerun_WhenJobConfigDoesNotExistAnymore_ForRunMultipleInstance() { Date old = new DateTime().minusDays(2).toDate(); StageConfig stageConfig = StageConfigMother.custom("dev", "rails", "java"); JobConfig railsConfig = stageConfig.getJobs().getJob(new CaseInsensitiveString("rails")); railsConfig.setRunInstanceCount(3); DefaultSchedulingContext schedulingContext = new DefaultSchedulingContext("loser", new Agents()); RunMultipleInstance.CounterBasedJobNameGenerator jobNameGenerator = new RunMultipleInstance.CounterBasedJobNameGenerator(CaseInsensitiveString.str(railsConfig.name())); JobInstances jobs = instanceFactory.createJobInstance(new CaseInsensitiveString("dev"), railsConfig, schedulingContext, new TimeProvider(), jobNameGenerator); Stage stage = createStageInstance(old, jobs); Stage newStage = null; CannotRerunJobException exception = null; try { newStage = instanceFactory.createStageForRerunOfJobs(stage, a("rails-runInstance-1"), schedulingContext, StageConfigMother.custom("dev", "java"), new TimeProvider(), "md5"); fail("should not schedule when job config does not exist anymore"); } catch (CannotRerunJobException e) { exception = e; } assertThat(exception.getJobName(), is("rails")); assertThat(exception.getInformation(), is("Configuration for job doesn't exist.")); assertThat(newStage, is(nullValue())); }
@Test public void shouldValidateAgainstSettingRunInstanceCountToIncorrectValue() { JobConfig jobConfig1 = new JobConfig(new CaseInsensitiveString("test")); jobConfig1.setRunInstanceCount(-1); jobConfig1.validate(ConfigSaveValidationContext.forChain(new BasicCruiseConfig())); ConfigErrors configErrors1 = jobConfig1.errors(); assertThat(configErrors1.isEmpty(), is(false)); assertThat(configErrors1.on(JobConfig.RUN_TYPE), is("'Run Instance Count' cannot be a negative number as it represents number of instances Go needs to spawn during runtime.")); JobConfig jobConfig2 = new JobConfig(new CaseInsensitiveString("test")); ReflectionUtil.setField(jobConfig2, "runInstanceCount", "abcd"); jobConfig2.validate(ConfigSaveValidationContext.forChain(new BasicCruiseConfig())); ConfigErrors configErrors2 = jobConfig2.errors(); assertThat(configErrors2.isEmpty(), is(false)); assertThat(configErrors2.on(JobConfig.RUN_TYPE), is("'Run Instance Count' should be a valid positive integer as it represents number of instances Go needs to spawn during runtime.")); }
@Test public void shouldCreateJobInstancesCorrectly_RunMultipleInstance() { Date old = new DateTime().minusDays(2).toDate(); StageConfig stageConfig = StageConfigMother.custom("dev", "rails", "java"); JobConfig railsConfig = stageConfig.getJobs().getJob(new CaseInsensitiveString("rails")); railsConfig.setRunInstanceCount(3); DefaultSchedulingContext schedulingContext = new DefaultSchedulingContext("loser", new Agents()); RunMultipleInstance.CounterBasedJobNameGenerator jobNameGenerator = new RunMultipleInstance.CounterBasedJobNameGenerator(CaseInsensitiveString.str(railsConfig.name())); JobInstances jobs = instanceFactory.createJobInstance(new CaseInsensitiveString("dev"), railsConfig, schedulingContext, new TimeProvider(), jobNameGenerator); assertThat(jobs.get(0).getName(), is("rails-runInstance-1")); assertEnvironmentVariable(jobs.get(0), 0, "GO_JOB_RUN_INDEX", "1"); assertEnvironmentVariable(jobs.get(0), 1, "GO_JOB_RUN_COUNT", "3"); assertThat(jobs.get(1).getName(), is("rails-runInstance-2")); assertEnvironmentVariable(jobs.get(1), 0, "GO_JOB_RUN_INDEX", "2"); assertEnvironmentVariable(jobs.get(1), 1, "GO_JOB_RUN_COUNT", "3"); assertThat(jobs.get(2).getName(), is("rails-runInstance-3")); assertEnvironmentVariable(jobs.get(2), 0, "GO_JOB_RUN_INDEX", "3"); assertEnvironmentVariable(jobs.get(2), 1, "GO_JOB_RUN_COUNT", "3"); Stage stage = createStageInstance(old, jobs); JobInstances jobInstances = stage.getJobInstances(); assertThat(jobInstances.size(), is(4)); assertRunMultipleJobInstance(jobInstances.get(0), "rails-runInstance-1"); assertRunMultipleJobInstance(jobInstances.get(1), "rails-runInstance-2"); assertRunMultipleJobInstance(jobInstances.get(2), "rails-runInstance-3"); assertThat(jobInstances.get(3).getName(), is("java")); }
public static JobConfig jobConfig() { JobConfig job = createJobConfigWithResourceAndArtifactPlans(); addTask(job); job.setTimeout("100"); job.setRunInstanceCount(3); job.artifactConfigs().clear(); job.artifactConfigs().add(new BuildArtifactConfig("target/dist.jar", "pkg")); job.artifactConfigs().add(new TestArtifactConfig("target/reports/**/*Test.xml", "reports")); job.addTab("coverage", "Jcoverage/index.html"); job.addTab("something", "something/path.html"); job.getProperties().add(new ArtifactPropertyConfig("coverage.class", "target/emma/coverage.xml", "substring-before(//report/data/all/coverage[starts-with(@type,'class')]/@value, '%')")); return job; }
@Test public void shouldNotRerun_WhenJobConfigIsChangedToRunMultipleInstance_ForRunOnAllAgentsJobInstance() { Date old = new DateTime().minusDays(2).toDate(); StageConfig stageConfig = StageConfigMother.custom("dev", "rails", "java"); JobConfig railsConfig = stageConfig.getJobs().getJob(new CaseInsensitiveString("rails")); railsConfig.setRunOnAllAgents(true); railsConfig.addResourceConfig("foobar"); AgentConfig agent1 = new AgentConfig("abcd1234", "host", "127.0.0.2", new ResourceConfigs(new ResourceConfig("foobar"))); AgentConfig agent2 = new AgentConfig("1234abcd", "ghost", "192.168.1.2", new ResourceConfigs(new ResourceConfig("baz"), new ResourceConfig("foobar"))); AgentConfig agent3 = new AgentConfig("7890abdc", "lost", "10.4.3.55", new ResourceConfigs(new ResourceConfig("crapyagent"))); DefaultSchedulingContext schedulingContext = new DefaultSchedulingContext("loser", new Agents(agent1, agent2, agent3)); RunOnAllAgents.CounterBasedJobNameGenerator jobNameGenerator = new RunOnAllAgents.CounterBasedJobNameGenerator(CaseInsensitiveString.str(railsConfig.name())); JobInstances jobs = instanceFactory.createJobInstance(new CaseInsensitiveString("dev"), railsConfig, schedulingContext, new TimeProvider(), jobNameGenerator); Stage stage = createStageInstance(old, jobs); Stage newStage = null; railsConfig.setRunOnAllAgents(false); railsConfig.setRunInstanceCount(10); CannotRerunJobException exception = null; try { newStage = instanceFactory.createStageForRerunOfJobs(stage, a("rails-runOnAll-1"), schedulingContext, stageConfig, new TimeProvider(), "md5"); fail("should not schedule since job config changed to run multiple instance"); } catch (CannotRerunJobException e) { exception = e; } assertThat(exception.getJobName(), is("rails")); assertThat(exception.getInformation(), is("Run configuration for job has been changed to 'run multiple instance'.")); assertThat(newStage, is(nullValue())); }
railsConfig.setRunInstanceCount(3);
Integer count = crJob.getRunInstanceCount(); if (count != null) jobConfig.setRunInstanceCount(count);
@Test public void shouldUseRightNameGenerator() { StageConfig stageConfig = StageConfigMother.custom("dev", "rails", "java", "html"); JobConfig railsConfig = stageConfig.getJobs().getJob(new CaseInsensitiveString("rails")); railsConfig.setRunOnAllAgents(true); railsConfig.addResourceConfig("foobar"); JobConfig javaConfig = stageConfig.getJobs().getJob(new CaseInsensitiveString("java")); javaConfig.setRunInstanceCount(2); AgentConfig agent1 = new AgentConfig("abcd1234", "host", "127.0.0.2", new ResourceConfigs(new ResourceConfig("foobar"))); AgentConfig agent2 = new AgentConfig("1234abcd", "ghost", "192.168.1.2", new ResourceConfigs(new ResourceConfig("baz"), new ResourceConfig("foobar"))); AgentConfig agent3 = new AgentConfig("7890abdc", "lost", "10.4.3.55", new ResourceConfigs(new ResourceConfig("crapyagent"))); DefaultSchedulingContext schedulingContext = new DefaultSchedulingContext("loser", new Agents(agent1, agent2, agent3)); Stage stageInstance = instanceFactory.createStageInstance(stageConfig, schedulingContext, "md5", clock); JobInstances jobInstances = stageInstance.getJobInstances(); assertThat(jobInstances.size(), is(5)); assertRunOnAllAgentsJobInstance(jobInstances.get(0), "rails-runOnAll-1"); assertRunOnAllAgentsJobInstance(jobInstances.get(1), "rails-runOnAll-2"); assertRunMultipleJobInstance(jobInstances.get(2), "java-runInstance-1"); assertRunMultipleJobInstance(jobInstances.get(3), "java-runInstance-2"); assertSimpleJobInstance(jobInstances.get(4), "html"); }