Skip to content

Commit

Permalink
[JENKINS-29894] Add unit test
Browse files Browse the repository at this point in the history
  • Loading branch information
Vlatombe committed Aug 17, 2015
1 parent 7ab1d17 commit 60b7ee4
Show file tree
Hide file tree
Showing 12 changed files with 349 additions and 0 deletions.
5 changes: 5 additions & 0 deletions pom.xml
Expand Up @@ -27,6 +27,11 @@
<artifactId>junit</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.9.5</version>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins.workflow</groupId>
<artifactId>workflow-step-api</artifactId>
Expand Down
@@ -0,0 +1,114 @@
package org.jenkinsci.plugins.parallel_test_executor;

import hudson.model.Result;
import hudson.model.Run;
import hudson.model.TaskListener;
import hudson.tasks.junit.TestResult;
import hudson.tasks.test.AbstractTestResultAction;
import org.apache.tools.ant.DirectoryScanner;
import org.hamcrest.Matchers;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestName;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;

import java.io.File;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assume.assumeThat;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.when;

@RunWith(MockitoJUnitRunner.class)
public class ParallelTestExecutorUnitTest {

ParallelTestExecutor instance;

@Mock Run<?, ?> build;

@Mock Run<?, ?> previousBuild;

@Mock TaskListener listener;

@Mock AbstractTestResultAction action;

@Rule public TestName name = new TestName();

File projectRootDir;

DirectoryScanner scanner;


@Before
public void setUp() throws Exception {
when(build.getPreviousBuild()).thenReturn((Run)previousBuild);
when(previousBuild.getResult()).thenReturn(Result.SUCCESS);
when(listener.getLogger()).thenReturn(System.err);
when(previousBuild.getAction(eq(AbstractTestResultAction.class))).thenReturn(action);
}

@Before
public void findProjectRoot() throws Exception {
URL url = getClass().getResource(getClass().getSimpleName() + "/" + this.name.getMethodName());
assumeThat("The test resource for " + this.name.getMethodName() + " exist", url, Matchers.notNullValue());
try {
projectRootDir = new File(url.toURI());
} catch (URISyntaxException e) {
projectRootDir = new File(url.getPath());
}
scanner = new DirectoryScanner();
scanner.setBasedir(projectRootDir);
scanner.scan();
}

@Test
public void findTestSplits() throws Exception {
TestResult testResult = new TestResult(0L, scanner, false);
testResult.tally();
when(action.getResult()).thenReturn(testResult);

CountDrivenParallelism parallelism = new CountDrivenParallelism(5);
List<InclusionExclusionPattern> splits = ParallelTestExecutor.findTestSplits(parallelism, build, listener, false);
assertEquals(5, splits.size());
for (InclusionExclusionPattern split : splits) {
assertFalse(split.isIncludes());
}
}

@Test
public void findTestSplitsInclusions() throws Exception {
TestResult testResult = new TestResult(0L, scanner, false);
testResult.tally();
when(action.getResult()).thenReturn(testResult);

CountDrivenParallelism parallelism = new CountDrivenParallelism(5);
List<InclusionExclusionPattern> splits = ParallelTestExecutor.findTestSplits(parallelism, build, listener, true);
assertEquals(5, splits.size());
List<String> exclusions = new ArrayList<String>(splits.get(0).getList());
List<String> inclusions = new ArrayList<String>();
for (int i = 0; i < splits.size(); i++) {
InclusionExclusionPattern split = splits.get(i);
assertEquals(i != 0, split.isIncludes());
if (split.isIncludes()) {
inclusions.addAll(split.getList());
}
}
Collections.sort(exclusions);
Collections.sort(inclusions);
assertEquals("exclusions set should contain all elements included by inclusions set", inclusions, exclusions);
}
}
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuite name="org.jenkinsci.plugins.parallel_test_executor.Test1" time="110.00" tests="20" errors="0" skipped="0" failures="0">
<testcase name="test1Case1" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="1.00"/>
<testcase name="test1Case2" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="2.00"/>
<testcase name="test1Case3" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="3.00"/>
<testcase name="test1Case4" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="4.00"/>
<testcase name="test1Case5" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="5.00"/>
<testcase name="test1Case6" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="6.00"/>
<testcase name="test1Case7" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="7.00"/>
<testcase name="test1Case8" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="8.00"/>
<testcase name="test1Case9" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="9.00"/>
<testcase name="test1Case10" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="10.00"/>
<testcase name="test1Case11" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="1.00"/>
<testcase name="test1Case12" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="2.00"/>
<testcase name="test1Case13" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="3.00"/>
<testcase name="test1Case14" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="4.00"/>
<testcase name="test1Case15" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="5.00"/>
<testcase name="test1Case16" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="6.00"/>
<testcase name="test1Case17" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="7.00"/>
<testcase name="test1Case18" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="8.00"/>
<testcase name="test1Case19" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="9.00"/>
<testcase name="test1Case20" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="10.22"/>
</testsuite>
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuite name="org.jenkinsci.plugins.parallel_test_executor.Test2" time="110.00" tests="20" errors="0" skipped="0" failures="0">
<testcase name="test2Case1" classname="org.jenkinsci.plugins.parallel_test_executor.Test2" time="1.00"/>
<testcase name="test2Case2" classname="org.jenkinsci.plugins.parallel_test_executor.Test2" time="2.00"/>
<testcase name="test2Case3" classname="org.jenkinsci.plugins.parallel_test_executor.Test2" time="3.00"/>
<testcase name="test2Case4" classname="org.jenkinsci.plugins.parallel_test_executor.Test2" time="4.00"/>
<testcase name="test2Case5" classname="org.jenkinsci.plugins.parallel_test_executor.Test2" time="5.00"/>
<testcase name="test2Case6" classname="org.jenkinsci.plugins.parallel_test_executor.Test2" time="6.00"/>
<testcase name="test2Case7" classname="org.jenkinsci.plugins.parallel_test_executor.Test2" time="7.00"/>
<testcase name="test2Case8" classname="org.jenkinsci.plugins.parallel_test_executor.Test2" time="8.00"/>
<testcase name="test2Case9" classname="org.jenkinsci.plugins.parallel_test_executor.Test2" time="9.00"/>
<testcase name="test2Case10" classname="org.jenkinsci.plugins.parallel_test_executor.Test2" time="10.00"/>
<testcase name="test2Case11" classname="org.jenkinsci.plugins.parallel_test_executor.Test2" time="1.00"/>
<testcase name="test2Case12" classname="org.jenkinsci.plugins.parallel_test_executor.Test2" time="2.00"/>
<testcase name="test2Case13" classname="org.jenkinsci.plugins.parallel_test_executor.Test2" time="3.00"/>
<testcase name="test2Case14" classname="org.jenkinsci.plugins.parallel_test_executor.Test2" time="4.00"/>
<testcase name="test2Case15" classname="org.jenkinsci.plugins.parallel_test_executor.Test2" time="5.00"/>
<testcase name="test2Case16" classname="org.jenkinsci.plugins.parallel_test_executor.Test2" time="6.00"/>
<testcase name="test2Case17" classname="org.jenkinsci.plugins.parallel_test_executor.Test2" time="7.00"/>
<testcase name="test2Case18" classname="org.jenkinsci.plugins.parallel_test_executor.Test2" time="8.00"/>
<testcase name="test2Case19" classname="org.jenkinsci.plugins.parallel_test_executor.Test2" time="9.00"/>
<testcase name="test2Case20" classname="org.jenkinsci.plugins.parallel_test_executor.Test2" time="10.22"/>
</testsuite>
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuite name="org.jenkinsci.plugins.parallel_test_executor.Test3" time="110.00" tests="20" errors="0" skipped="0" failures="0">
<testcase name="test3Case1" classname="org.jenkinsci.plugins.parallel_test_executor.Test3" time="1.00"/>
<testcase name="test3Case2" classname="org.jenkinsci.plugins.parallel_test_executor.Test3" time="2.00"/>
<testcase name="test3Case3" classname="org.jenkinsci.plugins.parallel_test_executor.Test3" time="3.00"/>
<testcase name="test3Case4" classname="org.jenkinsci.plugins.parallel_test_executor.Test3" time="4.00"/>
<testcase name="test3Case5" classname="org.jenkinsci.plugins.parallel_test_executor.Test3" time="5.00"/>
<testcase name="test3Case6" classname="org.jenkinsci.plugins.parallel_test_executor.Test3" time="6.00"/>
<testcase name="test3Case7" classname="org.jenkinsci.plugins.parallel_test_executor.Test3" time="7.00"/>
<testcase name="test3Case8" classname="org.jenkinsci.plugins.parallel_test_executor.Test3" time="8.00"/>
<testcase name="test3Case9" classname="org.jenkinsci.plugins.parallel_test_executor.Test3" time="9.00"/>
<testcase name="test3Case10" classname="org.jenkinsci.plugins.parallel_test_executor.Test3" time="10.00"/>
<testcase name="test3Case11" classname="org.jenkinsci.plugins.parallel_test_executor.Test3" time="1.00"/>
<testcase name="test3Case12" classname="org.jenkinsci.plugins.parallel_test_executor.Test3" time="2.00"/>
<testcase name="test3Case13" classname="org.jenkinsci.plugins.parallel_test_executor.Test3" time="3.00"/>
<testcase name="test3Case14" classname="org.jenkinsci.plugins.parallel_test_executor.Test3" time="4.00"/>
<testcase name="test3Case15" classname="org.jenkinsci.plugins.parallel_test_executor.Test3" time="5.00"/>
<testcase name="test3Case16" classname="org.jenkinsci.plugins.parallel_test_executor.Test3" time="6.00"/>
<testcase name="test3Case17" classname="org.jenkinsci.plugins.parallel_test_executor.Test3" time="7.00"/>
<testcase name="test3Case18" classname="org.jenkinsci.plugins.parallel_test_executor.Test3" time="8.00"/>
<testcase name="test3Case19" classname="org.jenkinsci.plugins.parallel_test_executor.Test3" time="9.00"/>
<testcase name="test3Case20" classname="org.jenkinsci.plugins.parallel_test_executor.Test3" time="10.22"/>
</testsuite>
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuite name="org.jenkinsci.plugins.parallel_test_executor.Test4" time="110.00" tests="20" errors="0" skipped="0" failures="0">
<testcase name="test4Case1" classname="org.jenkinsci.plugins.parallel_test_executor.Test4" time="1.00"/>
<testcase name="test4Case2" classname="org.jenkinsci.plugins.parallel_test_executor.Test4" time="2.00"/>
<testcase name="test4Case3" classname="org.jenkinsci.plugins.parallel_test_executor.Test4" time="3.00"/>
<testcase name="test4Case4" classname="org.jenkinsci.plugins.parallel_test_executor.Test4" time="4.00"/>
<testcase name="test4Case5" classname="org.jenkinsci.plugins.parallel_test_executor.Test4" time="5.00"/>
<testcase name="test4Case6" classname="org.jenkinsci.plugins.parallel_test_executor.Test4" time="6.00"/>
<testcase name="test4Case7" classname="org.jenkinsci.plugins.parallel_test_executor.Test4" time="7.00"/>
<testcase name="test4Case8" classname="org.jenkinsci.plugins.parallel_test_executor.Test4" time="8.00"/>
<testcase name="test4Case9" classname="org.jenkinsci.plugins.parallel_test_executor.Test4" time="9.00"/>
<testcase name="test4Case10" classname="org.jenkinsci.plugins.parallel_test_executor.Test4" time="10.00"/>
<testcase name="test4Case11" classname="org.jenkinsci.plugins.parallel_test_executor.Test4" time="1.00"/>
<testcase name="test4Case12" classname="org.jenkinsci.plugins.parallel_test_executor.Test4" time="2.00"/>
<testcase name="test4Case13" classname="org.jenkinsci.plugins.parallel_test_executor.Test4" time="3.00"/>
<testcase name="test4Case14" classname="org.jenkinsci.plugins.parallel_test_executor.Test4" time="4.00"/>
<testcase name="test4Case15" classname="org.jenkinsci.plugins.parallel_test_executor.Test4" time="5.00"/>
<testcase name="test4Case16" classname="org.jenkinsci.plugins.parallel_test_executor.Test4" time="6.00"/>
<testcase name="test4Case17" classname="org.jenkinsci.plugins.parallel_test_executor.Test4" time="7.00"/>
<testcase name="test4Case18" classname="org.jenkinsci.plugins.parallel_test_executor.Test4" time="8.00"/>
<testcase name="test4Case19" classname="org.jenkinsci.plugins.parallel_test_executor.Test4" time="9.00"/>
<testcase name="test4Case20" classname="org.jenkinsci.plugins.parallel_test_executor.Test4" time="10.22"/>
</testsuite>
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuite name="org.jenkinsci.plugins.parallel_test_executor.Test5" time="110.00" tests="20" errors="0" skipped="0" failures="0">
<testcase name="test5Case1" classname="org.jenkinsci.plugins.parallel_test_executor.Test5" time="1.00"/>
<testcase name="test5Case2" classname="org.jenkinsci.plugins.parallel_test_executor.Test5" time="2.00"/>
<testcase name="test5Case3" classname="org.jenkinsci.plugins.parallel_test_executor.Test5" time="3.00"/>
<testcase name="test5Case4" classname="org.jenkinsci.plugins.parallel_test_executor.Test5" time="4.00"/>
<testcase name="test5Case5" classname="org.jenkinsci.plugins.parallel_test_executor.Test5" time="5.00"/>
<testcase name="test5Case6" classname="org.jenkinsci.plugins.parallel_test_executor.Test5" time="6.00"/>
<testcase name="test5Case7" classname="org.jenkinsci.plugins.parallel_test_executor.Test5" time="7.00"/>
<testcase name="test5Case8" classname="org.jenkinsci.plugins.parallel_test_executor.Test5" time="8.00"/>
<testcase name="test5Case9" classname="org.jenkinsci.plugins.parallel_test_executor.Test5" time="9.00"/>
<testcase name="test5Case10" classname="org.jenkinsci.plugins.parallel_test_executor.Test5" time="10.00"/>
<testcase name="test5Case11" classname="org.jenkinsci.plugins.parallel_test_executor.Test5" time="1.00"/>
<testcase name="test5Case12" classname="org.jenkinsci.plugins.parallel_test_executor.Test5" time="2.00"/>
<testcase name="test5Case13" classname="org.jenkinsci.plugins.parallel_test_executor.Test5" time="3.00"/>
<testcase name="test5Case14" classname="org.jenkinsci.plugins.parallel_test_executor.Test5" time="4.00"/>
<testcase name="test5Case15" classname="org.jenkinsci.plugins.parallel_test_executor.Test5" time="5.00"/>
<testcase name="test5Case16" classname="org.jenkinsci.plugins.parallel_test_executor.Test5" time="6.00"/>
<testcase name="test5Case17" classname="org.jenkinsci.plugins.parallel_test_executor.Test5" time="7.00"/>
<testcase name="test5Case18" classname="org.jenkinsci.plugins.parallel_test_executor.Test5" time="8.00"/>
<testcase name="test5Case19" classname="org.jenkinsci.plugins.parallel_test_executor.Test5" time="9.00"/>
<testcase name="test5Case20" classname="org.jenkinsci.plugins.parallel_test_executor.Test5" time="10.22"/>
</testsuite>
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuite name="org.jenkinsci.plugins.parallel_test_executor.Test1" time="110.00" tests="20" errors="0" skipped="0" failures="0">
<testcase name="test1Case1" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="1.00"/>
<testcase name="test1Case2" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="2.00"/>
<testcase name="test1Case3" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="3.00"/>
<testcase name="test1Case4" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="4.00"/>
<testcase name="test1Case5" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="5.00"/>
<testcase name="test1Case6" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="6.00"/>
<testcase name="test1Case7" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="7.00"/>
<testcase name="test1Case8" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="8.00"/>
<testcase name="test1Case9" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="9.00"/>
<testcase name="test1Case10" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="10.00"/>
<testcase name="test1Case11" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="1.00"/>
<testcase name="test1Case12" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="2.00"/>
<testcase name="test1Case13" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="3.00"/>
<testcase name="test1Case14" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="4.00"/>
<testcase name="test1Case15" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="5.00"/>
<testcase name="test1Case16" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="6.00"/>
<testcase name="test1Case17" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="7.00"/>
<testcase name="test1Case18" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="8.00"/>
<testcase name="test1Case19" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="9.00"/>
<testcase name="test1Case20" classname="org.jenkinsci.plugins.parallel_test_executor.Test1" time="10.22"/>
</testsuite>

0 comments on commit 60b7ee4

Please sign in to comment.