/*************************GO-LICENSE-START********************************* * Copyright 2014 ThoughtWorks, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *************************GO-LICENSE-END***********************************/ package com.thoughtworks.go.domain.testinfo; import java.util.List; import java.util.Arrays; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertThat; import org.junit.Test; import com.thoughtworks.go.domain.JobIdentifier; public class StageTestRunsTest { @Test public void shouldReturnAllPipelineCounters() throws Exception { StageTestRuns stageTestRuns = new StageTestRuns(999, 0, 0); JobIdentifier jobIdentifier = new JobIdentifier(null, 1, null, null, null, "job1"); stageTestRuns.add(18, "1.8", "testSuite1", "testName1", TestStatus.Failure, jobIdentifier); stageTestRuns.add(17, "1.7", "testSuite1", "testName1", TestStatus.Failure, jobIdentifier); stageTestRuns.add(16, "1.6", "testSuite1", "testName1", TestStatus.Failure, jobIdentifier); stageTestRuns.removeDuplicateTestEntries(); assertThat(stageTestRuns.failingCounters(), is(Arrays.asList(16, 17, 18))); } @Test public void removeDuplicateTestEntriesEliminatesSusequentDuplicateFailures() throws Exception { StageTestRuns stageTestRuns = new StageTestRuns(999, 0, 0); JobIdentifier jobIdentifier = new JobIdentifier(null, 1, null, null, null, "job1"); stageTestRuns.add(18, "1.8", "testSuite1", "testName1", TestStatus.Failure, jobIdentifier); stageTestRuns.add(17, "1.7", "testSuite1", "testName1", TestStatus.Failure, jobIdentifier); stageTestRuns.add(16, "1.6", "testSuite1", "testName1", TestStatus.Failure, jobIdentifier); stageTestRuns.removeDuplicateTestEntries(); assertThat(stageTestRuns.failingTestsInPipelines().size(), is(3)); FailingTestsInPipeline pipeline8 = stageTestRuns.failingTestsInPipelines().get(0); FailingTestsInPipeline pipeline7 = stageTestRuns.failingTestsInPipelines().get(1); FailingTestsInPipeline pipeline6 = stageTestRuns.failingTestsInPipelines().get(2); assertThat(pipeline8.failingSuites().size(), is(0)); assertThat(pipeline7.failingSuites().size(), is(0)); assertThat(pipeline6.failingSuites().size(), is(1)); } @Test public void removeDuplicateTestEntriesDoesNotEliminatesSusequentDuplicateFailuresWhenJobsAreNotIdentical() throws Exception { StageTestRuns stageTestRuns = new StageTestRuns(999, 0, 0); JobIdentifier job1 = new JobIdentifier(null, 1, null, null, null, "job1"); JobIdentifier job2 = new JobIdentifier(null, 1, null, null, null, "job2"); stageTestRuns.add(18, "1.8", "testSuite1", "testName1", TestStatus.Failure, job1); stageTestRuns.add(18, "1.8", "testSuite1", "testName1", TestStatus.Failure, job2); stageTestRuns.add(17, "1.7", "testSuite1", "testName1", TestStatus.Failure, job2); stageTestRuns.add(16, "1.6", "testSuite1", "testName1", TestStatus.Failure, job1); stageTestRuns.removeDuplicateTestEntries(); FailingTestsInPipeline pipeline8 = stageTestRuns.failingTestsInPipelines().get(0); FailingTestsInPipeline pipeline7 = stageTestRuns.failingTestsInPipelines().get(1); FailingTestsInPipeline pipeline6 = stageTestRuns.failingTestsInPipelines().get(2); assertThat(pipeline8.failingSuites().size(), is(1)); assertThat(pipeline8.failingSuites().get(0).tests().get(0).getJobNames().size(), is(2)); assertThat(pipeline8.failingSuites().get(0).tests().get(0).getJobNames().get(0), is("job1")); assertThat(pipeline8.failingSuites().get(0).tests().get(0).getJobNames().get(1), is("job2")); assertThat(pipeline7.failingSuites().size(), is(1)); assertThat(pipeline7.failingSuites().get(0).tests().get(0).getJobNames().size(), is(1)); assertThat(pipeline7.failingSuites().get(0).tests().get(0).getJobNames().get(0), is("job2")); assertThat(pipeline6.failingSuites().size(), is(1)); assertThat(pipeline6.failingSuites().get(0).tests().get(0).getJobNames().size(), is(1)); assertThat(pipeline6.failingSuites().get(0).tests().get(0).getJobNames().get(0), is("job1")); } @Test public void removeDuplicateTestEntriesFromNonAdjacentRuns() throws Exception { StageTestRuns stageTestRuns = new StageTestRuns(999, 0, 0); JobIdentifier jobIdentifier = new JobIdentifier(null, 1, null, null, null, "job1"); stageTestRuns.add(10, "1.0", "suite1", "test1-2", TestStatus.Failure, jobIdentifier); stageTestRuns.add(10, "1.0", "suite1", "test1-1", TestStatus.Error, jobIdentifier); stageTestRuns.add(11, "1.1", "suite1", "test1-1", TestStatus.Error, jobIdentifier); stageTestRuns.add(9, "0.9", "suite1", "test1-2", TestStatus.Failure, jobIdentifier); stageTestRuns.removeDuplicateTestEntries(); FailingTestsInPipeline pipeline10 = stageTestRuns.failingTestsInPipelines().get(0); FailingTestsInPipeline pipeline11 = stageTestRuns.failingTestsInPipelines().get(1); FailingTestsInPipeline pipeline09 = stageTestRuns.failingTestsInPipelines().get(2); assertThat(pipeline10.failingSuites().size(), is(1)); assertThat(pipeline10.failingSuites().get(0).tests().size(), is(1)); assertThat(pipeline11.failingSuites().size(), is(1)); assertThat(pipeline11.failingSuites().get(0).tests().size(), is(1)); assertThat(pipeline09.failingSuites().size(), is(0)); } @Test public void removeDuplicateTestEntriesShouldRemoveFailuresThatHaveBeenFixedInSubsequentPipelines() throws Exception { StageTestRuns stageTestRuns = new StageTestRuns(999, 0, 0); JobIdentifier jobIdentifier = new JobIdentifier(null, 1, null, null, null, "job1"); stageTestRuns.add(18, "1.8", "testSuite1", "testName0", TestStatus.Failure, jobIdentifier); stageTestRuns.add(17, "1.7", "testSuite1", "testName0", TestStatus.Failure, jobIdentifier); stageTestRuns.add(17, "1.7", "testSuite1", "testName1", TestStatus.Failure, jobIdentifier); stageTestRuns.removeDuplicateTestEntries(); assertThat(stageTestRuns.failingTestsInPipelines().size(), is(2)); FailingTestsInPipeline pipeline8 = stageTestRuns.failingTestsInPipelines().get(0); FailingTestsInPipeline pipeline7 = stageTestRuns.failingTestsInPipelines().get(1); assertThat(pipeline8.failingSuites().size(), is(0)); assertThat(pipeline7.failingSuites().size(), is(1)); assertThat(pipeline7.failingSuites().get(0).tests().size(), is(1)); assertThat(pipeline7.failingSuites().get(0).tests().get(0).getName(), is("testName0")); } @Test public void shouldReturnTheTotalNumberOfErrorsAndFailuresRollingUpFailuresInMultipleJobsToSingleFailure() throws Exception { StageTestRuns stageTestRuns = new StageTestRuns(999, 3, 2); JobIdentifier jobIdentifier1 = new JobIdentifier(null, 1, null, null, null, "job1"); JobIdentifier jobIdentifier2 = new JobIdentifier(null, 1, null, null, null, "job2"); stageTestRuns.add(18, "lbl", "testSuite1", "testName1", TestStatus.Failure, jobIdentifier1); stageTestRuns.add(18, "lbl", "testSuite1", "testName1", TestStatus.Failure, jobIdentifier2); stageTestRuns.add(18, "lbl", "testSuite1", "testName2", TestStatus.Error, jobIdentifier1); stageTestRuns.add(18, "lbl", "testSuite1", "testName3", TestStatus.Failure, jobIdentifier1); stageTestRuns.add(18, "lbl", "testSuite1", "testName4", TestStatus.Error, jobIdentifier1); stageTestRuns.add(18, "lbl", "testSuite1", "testName5", TestStatus.Failure, jobIdentifier1); stageTestRuns.add(17, "lbl", "testSuite1", "testName4", TestStatus.Error, jobIdentifier1); stageTestRuns.add(17, "lbl", "testSuite1", "testName5", TestStatus.Failure, jobIdentifier1); stageTestRuns.add(16, "lbl", "testSuite1", "testName6", TestStatus.Failure, jobIdentifier1); stageTestRuns.removeDuplicateTestEntries(); assertThat(stageTestRuns.count(TestStatus.Error), is(2)); assertThat(stageTestRuns.count(TestStatus.Failure), is(3)); } @Test public void shouldBeAbletoAddUserToANonExistentPipelineInstance() { StageTestRuns stageTestRuns = new StageTestRuns(999, 0, 0); stageTestRuns.addUser(3, "3", "jj"); List<FailingTestsInPipeline> pipelines = stageTestRuns.failingTestsInPipelines(); assertThat(pipelines.size(), is(1)); assertThat(pipelines.get(0).getLabel(), is("3")); assertThat(pipelines.get(0).users().get(0), is("jj")); } }