Skip to content

Commit

Permalink
Merge pull request #1477 from juherr/issue-#565
Browse files Browse the repository at this point in the history
Issue #565
  • Loading branch information
cbeust committed Jul 16, 2017
2 parents 4c446b4 + 0c42dd3 commit 3a0b101
Show file tree
Hide file tree
Showing 6 changed files with 129 additions and 1 deletion.
16 changes: 15 additions & 1 deletion src/test/java/test/SimpleBaseTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ protected static XmlSuite createXmlSuite(String suiteName, String testName, Clas
return suite;
}

protected static XmlTest createXmlTestWithPackages(XmlSuite suite, String name, String ...packageName) {
protected static XmlTest createXmlTestWithPackages(XmlSuite suite, String name, String... packageName) {
XmlTest result = createXmlTest(suite, name);
List<XmlPackage> xmlPackages = Lists.newArrayList();

Expand All @@ -140,6 +140,20 @@ protected static XmlTest createXmlTestWithPackages(XmlSuite suite, String name,
return result;
}

protected static XmlTest createXmlTestWithPackages(XmlSuite suite, String name, Class<?>... packageName) {
XmlTest result = createXmlTest(suite, name);
List<XmlPackage> xmlPackages = Lists.newArrayList();

for (Class<?> each : packageName) {
XmlPackage xmlPackage = new XmlPackage();
xmlPackage.setName(each.getPackage().getName());
xmlPackages.add(xmlPackage);
}
result.setPackages(xmlPackages);

return result;
}

protected static XmlTest createXmlTest(XmlSuite suite, String name) {
XmlTest result = new XmlTest(suite);
result.setName(name);
Expand Down
41 changes: 41 additions & 0 deletions src/test/java/test/issue565/Issue565Test.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package test.issue565;

import org.testng.Assert;
import org.testng.ITestNGListener;
import org.testng.TestListenerAdapter;
import org.testng.TestNG;
import org.testng.annotations.Test;
import org.testng.xml.XmlSuite;
import org.testng.xml.XmlSuite.ParallelMode;
import org.testng.xml.XmlTest;
import test.SimpleBaseTest;
import test.issue565.deadlock.ClassInGroupB;
import test.issue565.deadlock.GeneratedClassFactory;

public class Issue565Test extends SimpleBaseTest {

@Test
public void ThereShouldNotBeDeadlockWhenGroupByInstanceAndGroupDependencyUsed() throws Exception {

XmlSuite suite = createXmlSuite("Deadlock-Suite");
suite.setParallel(ParallelMode.CLASSES);
suite.setThreadCount(5);
suite.setVerbose(10);
suite.setGroupByInstances(true);

XmlTest test = createXmlTestWithPackages(suite, "Deadlock-Test", ClassInGroupB.class);

// Prevent real deadlock
suite.setTimeOut("1000");
test.setTimeOut(1_000);

TestNG tng = create(suite);
TestListenerAdapter tla = new TestListenerAdapter();
tng.addListener((ITestNGListener) tla);
tng.run();

Assert.assertEquals(tla.getFailedTests().size(), 0);
Assert.assertEquals(tla.getSkippedTests().size(), 0);
Assert.assertEquals(tla.getPassedTests().size(), 2 + 4 * GeneratedClassFactory.SIZE);
}
}
13 changes: 13 additions & 0 deletions src/test/java/test/issue565/deadlock/ClassInGroupB.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package test.issue565.deadlock;

import org.testng.annotations.Test;

@Test(groups = "B", dependsOnGroups = "A")
public class ClassInGroupB {

@Test
public void groupB_1() { }

@Test(dependsOnMethods = "groupB_1")
public void groupB_2() { }
}
25 changes: 25 additions & 0 deletions src/test/java/test/issue565/deadlock/GeneratedClassFactory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package test.issue565.deadlock;

import org.testng.annotations.DataProvider;
import org.testng.annotations.Factory;

public class GeneratedClassFactory {

public static final int SIZE = 20;

@DataProvider(name = "ids", parallel = true)
public Object[][] ids() {
Integer[][] params = new Integer[SIZE][1];
for (int id = 0; id < params.length; id++) {
params[id] = new Integer[]{id};
}
return params;
}

@Factory(dataProvider = "ids")
public Object[] generate(int id) {
return new Object[]{
new GeneratedClassInGroupA(id)
};
}
}
33 changes: 33 additions & 0 deletions src/test/java/test/issue565/deadlock/GeneratedClassInGroupA.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package test.issue565.deadlock;

import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

public class GeneratedClassInGroupA {

private final int id;

public GeneratedClassInGroupA(int id) {
this.id = id;
}

@BeforeClass(groups = "A")
public void init() { }

@Test(groups = "A")
public void test1() { }

@Test(groups = "A", dependsOnMethods = "test4")
public void test2() { }

@Test(groups = "A")
public void test3() { }

@Test(groups = "A", dependsOnMethods = "test3")
public void test4() { }

@Override
public String toString() {
return "GeneratedClassInGroupA{" + id + '}';
}
}
2 changes: 2 additions & 0 deletions src/test/resources/testng.xml
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,7 @@
<class name="test.testng1396.ParallelByInstancesInterceptorTest"/>
<class name="test.github1417.TestParamsInjectionInBeforeClass"/>
<class name="test.order.OrderTest" />
<class name="test.issue565.Issue565Test"/>
</classes>
</test>

Expand Down Expand Up @@ -830,5 +831,6 @@
<class name="test.github799.EnsureInstancesAreOrderedViaFactories"/>
</classes>
</test>

</suite>

0 comments on commit 3a0b101

Please sign in to comment.