From de78c8c6ed67381406337b4082e2f835cddc8f29 Mon Sep 17 00:00:00 2001 From: Vladislav Rassokhin Date: Sun, 16 Nov 2014 02:53:42 +0100 Subject: [PATCH 1/2] Add test for #565 (cherry picked from commit fddb95d) --- src/test/java/test/issue565/Issue565Test.java | 44 +++++++++++++++++++ .../test/issue565/deadlock/ClassInGroupB.java | 16 +++++++ .../deadlock/GeneratedClassFactory.java | 25 +++++++++++ .../deadlock/GeneratedClassInGroupA.java | 42 ++++++++++++++++++ src/test/resources/testng.xml | 2 + 5 files changed, 129 insertions(+) create mode 100644 src/test/java/test/issue565/Issue565Test.java create mode 100644 src/test/java/test/issue565/deadlock/ClassInGroupB.java create mode 100644 src/test/java/test/issue565/deadlock/GeneratedClassFactory.java create mode 100644 src/test/java/test/issue565/deadlock/GeneratedClassInGroupA.java diff --git a/src/test/java/test/issue565/Issue565Test.java b/src/test/java/test/issue565/Issue565Test.java new file mode 100644 index 0000000000..a0e199c832 --- /dev/null +++ b/src/test/java/test/issue565/Issue565Test.java @@ -0,0 +1,44 @@ +package test.issue565; + +import java.util.Arrays; + +import org.testng.Assert; +import org.testng.TestListenerAdapter; +import org.testng.TestNG; +import org.testng.annotations.Test; +import org.testng.xml.XmlPackage; +import org.testng.xml.XmlSuite; +import org.testng.xml.XmlTest; +import test.SimpleBaseTest; +import test.issue565.deadlock.ClassInGroupB; +import test.issue565.deadlock.GeneratedClassFactory; + +/** + * @author Vladislav.Rassokhin + */ +public class Issue565Test extends SimpleBaseTest { + @Test + public void ThereShouldNotBeDeadlockWhenGroupByInstanceAndGroupDependencyUsed() throws Exception { + final XmlSuite suite = createXmlSuite("Deadlock-Suite"); + suite.setParallel("classes"); + suite.setThreadCount(5); + suite.setVerbose(10); + suite.setGroupByInstances(true); + final XmlTest test = createXmlTest(suite, "Deadlock-Test"); + test.setPackages(Arrays.asList(new XmlPackage(ClassInGroupB.class.getPackage().getName()))); + // Prevent real deadlock + suite.setTimeOut("1000"); + test.setTimeOut(1000); + + final TestNG tng = create(); + tng.setXmlSuites(Arrays.asList(suite)); + final TestListenerAdapter tla = new TestListenerAdapter(); + tng.addListener(tla); + tng.run(); + + Assert.assertEquals(tla.getFailedTests().size(), 0); + Assert.assertEquals(tla.getSkippedTests().size(), 0); + Assert.assertEquals(tla.getPassedTests().size(), 2 + 4 * GeneratedClassFactory.SIZE); + + } +} diff --git a/src/test/java/test/issue565/deadlock/ClassInGroupB.java b/src/test/java/test/issue565/deadlock/ClassInGroupB.java new file mode 100644 index 0000000000..51492c3a4f --- /dev/null +++ b/src/test/java/test/issue565/deadlock/ClassInGroupB.java @@ -0,0 +1,16 @@ +package test.issue565.deadlock; + +import org.testng.annotations.Test; + +@Test(groups = "B", dependsOnGroups = "A") +public class ClassInGroupB { + @Test + public void groupB_1() { + System.out.println("ClassInGroupB.groupB_1"); + } + + @Test(dependsOnMethods = "groupB_1") + public void groupB_2() { + System.out.println("ClassInGroupB.groupB_2"); + } +} diff --git a/src/test/java/test/issue565/deadlock/GeneratedClassFactory.java b/src/test/java/test/issue565/deadlock/GeneratedClassFactory.java new file mode 100644 index 0000000000..5d43ca05f7 --- /dev/null +++ b/src/test/java/test/issue565/deadlock/GeneratedClassFactory.java @@ -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 Integer[][] ids() { + final 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) + }; + } +} diff --git a/src/test/java/test/issue565/deadlock/GeneratedClassInGroupA.java b/src/test/java/test/issue565/deadlock/GeneratedClassInGroupA.java new file mode 100644 index 0000000000..af1d57109d --- /dev/null +++ b/src/test/java/test/issue565/deadlock/GeneratedClassInGroupA.java @@ -0,0 +1,42 @@ +package test.issue565.deadlock; + +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +public class GeneratedClassInGroupA { + private int id; + + public GeneratedClassInGroupA(int id) { + this.id = id; + } + + @BeforeClass(groups = "A") + public void init() { + System.out.println("GeneratedClassInGroupA.init " + id); + } + + @Test(groups = "A") + public void test1() { + System.out.println("GeneratedClassInGroupA.test1"); + } + + @Test(groups = "A", dependsOnMethods = "test4") + public void test2() { + System.out.println("GeneratedClassInGroupA.test2"); + } + + @Test(groups = "A") + public void test3() { + System.out.println("GeneratedClassInGroupA.test3"); + } + + @Test(groups = "A", dependsOnMethods = "test3") + public void test4() { + System.out.println("GeneratedClassInGroupA.test4"); + } + + @Override + public String toString() { + return "GeneratedClassInGroupA{" + id + '}'; + } +} diff --git a/src/test/resources/testng.xml b/src/test/resources/testng.xml index 4644b2f749..39d6f17130 100644 --- a/src/test/resources/testng.xml +++ b/src/test/resources/testng.xml @@ -159,6 +159,7 @@ + @@ -830,5 +831,6 @@ + From 0c42dd3ba44b0452cd82ef9c44a787dc33147fda Mon Sep 17 00:00:00 2001 From: Julien Herr Date: Sun, 16 Jul 2017 11:08:29 +0200 Subject: [PATCH 2/2] Rework test. --- src/test/java/test/SimpleBaseTest.java | 16 +++++++++- src/test/java/test/issue565/Issue565Test.java | 29 +++++++++---------- .../test/issue565/deadlock/ClassInGroupB.java | 9 ++---- .../deadlock/GeneratedClassFactory.java | 4 +-- .../deadlock/GeneratedClassInGroupA.java | 23 +++++---------- 5 files changed, 40 insertions(+), 41 deletions(-) diff --git a/src/test/java/test/SimpleBaseTest.java b/src/test/java/test/SimpleBaseTest.java index 2168202f30..8fe7096b8d 100644 --- a/src/test/java/test/SimpleBaseTest.java +++ b/src/test/java/test/SimpleBaseTest.java @@ -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 xmlPackages = Lists.newArrayList(); @@ -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 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); diff --git a/src/test/java/test/issue565/Issue565Test.java b/src/test/java/test/issue565/Issue565Test.java index a0e199c832..bedabf9b2c 100644 --- a/src/test/java/test/issue565/Issue565Test.java +++ b/src/test/java/test/issue565/Issue565Test.java @@ -1,44 +1,41 @@ package test.issue565; -import java.util.Arrays; - 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.XmlPackage; 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; -/** - * @author Vladislav.Rassokhin - */ public class Issue565Test extends SimpleBaseTest { + @Test public void ThereShouldNotBeDeadlockWhenGroupByInstanceAndGroupDependencyUsed() throws Exception { - final XmlSuite suite = createXmlSuite("Deadlock-Suite"); - suite.setParallel("classes"); + + XmlSuite suite = createXmlSuite("Deadlock-Suite"); + suite.setParallel(ParallelMode.CLASSES); suite.setThreadCount(5); suite.setVerbose(10); suite.setGroupByInstances(true); - final XmlTest test = createXmlTest(suite, "Deadlock-Test"); - test.setPackages(Arrays.asList(new XmlPackage(ClassInGroupB.class.getPackage().getName()))); + + XmlTest test = createXmlTestWithPackages(suite, "Deadlock-Test", ClassInGroupB.class); + // Prevent real deadlock suite.setTimeOut("1000"); - test.setTimeOut(1000); + test.setTimeOut(1_000); - final TestNG tng = create(); - tng.setXmlSuites(Arrays.asList(suite)); - final TestListenerAdapter tla = new TestListenerAdapter(); - tng.addListener(tla); + 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); - } } diff --git a/src/test/java/test/issue565/deadlock/ClassInGroupB.java b/src/test/java/test/issue565/deadlock/ClassInGroupB.java index 51492c3a4f..ef65348a9f 100644 --- a/src/test/java/test/issue565/deadlock/ClassInGroupB.java +++ b/src/test/java/test/issue565/deadlock/ClassInGroupB.java @@ -4,13 +4,10 @@ @Test(groups = "B", dependsOnGroups = "A") public class ClassInGroupB { + @Test - public void groupB_1() { - System.out.println("ClassInGroupB.groupB_1"); - } + public void groupB_1() { } @Test(dependsOnMethods = "groupB_1") - public void groupB_2() { - System.out.println("ClassInGroupB.groupB_2"); - } + public void groupB_2() { } } diff --git a/src/test/java/test/issue565/deadlock/GeneratedClassFactory.java b/src/test/java/test/issue565/deadlock/GeneratedClassFactory.java index 5d43ca05f7..e1ad32f4f0 100644 --- a/src/test/java/test/issue565/deadlock/GeneratedClassFactory.java +++ b/src/test/java/test/issue565/deadlock/GeneratedClassFactory.java @@ -8,8 +8,8 @@ public class GeneratedClassFactory { public static final int SIZE = 20; @DataProvider(name = "ids", parallel = true) - public Integer[][] ids() { - final Integer[][] params = new Integer[SIZE][1]; + public Object[][] ids() { + Integer[][] params = new Integer[SIZE][1]; for (int id = 0; id < params.length; id++) { params[id] = new Integer[]{id}; } diff --git a/src/test/java/test/issue565/deadlock/GeneratedClassInGroupA.java b/src/test/java/test/issue565/deadlock/GeneratedClassInGroupA.java index af1d57109d..4ae77a3f30 100644 --- a/src/test/java/test/issue565/deadlock/GeneratedClassInGroupA.java +++ b/src/test/java/test/issue565/deadlock/GeneratedClassInGroupA.java @@ -4,36 +4,27 @@ import org.testng.annotations.Test; public class GeneratedClassInGroupA { - private int id; + + private final int id; public GeneratedClassInGroupA(int id) { this.id = id; } @BeforeClass(groups = "A") - public void init() { - System.out.println("GeneratedClassInGroupA.init " + id); - } + public void init() { } @Test(groups = "A") - public void test1() { - System.out.println("GeneratedClassInGroupA.test1"); - } + public void test1() { } @Test(groups = "A", dependsOnMethods = "test4") - public void test2() { - System.out.println("GeneratedClassInGroupA.test2"); - } + public void test2() { } @Test(groups = "A") - public void test3() { - System.out.println("GeneratedClassInGroupA.test3"); - } + public void test3() { } @Test(groups = "A", dependsOnMethods = "test3") - public void test4() { - System.out.println("GeneratedClassInGroupA.test4"); - } + public void test4() { } @Override public String toString() {