blob: 71a399ff3f17b48c2e88f301bffdb29df0813125 [file] [log] [blame]
package test.thread;
import org.testng.Assert;
import org.testng.TestNG;
import org.testng.annotations.Test;
import org.testng.collections.Lists;
import org.testng.collections.Maps;
import test.SimpleBaseTest;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* Test that classes with dependent methods are still run in different threads
* and in the correct order.
*/
public class MultiThreadedDependentTest extends SimpleBaseTest {
/**
* Make sure that the topological order is preserved and that if
* the TestNG runner is configured to run n threads, the dependent
* methods are using these n threads.
*/
private void assertOrder(List<String> methods) {
List<String> expectedMethods = Arrays.asList(new String[] {
"a1", "a2", "a3", "b1", "b2", "b3", "b4", "b5", "c1", "d", "x", "y", "z", "t"
});
int size = expectedMethods.size();
Assert.assertEquals(methods.size(), size);
for (String em : expectedMethods) {
Assert.assertTrue(methods.contains(em));
}
Map<String, Boolean> map = Maps.newHashMap();
for (String m : methods) {
map.put(m, Boolean.TRUE);
if ("b1".equals(m) || "b2".equals(m) || "b3".equals(m) || "b4".equals(m) || "b5".equals(m)) {
Assert.assertTrue(map.get("a1"));
Assert.assertTrue(map.get("a2"));
Assert.assertTrue(map.get("a3"));
}
if ("d".equals(m)) {
Assert.assertTrue(map.get("a1"));
Assert.assertTrue(map.get("a2"));
}
if ("c1".equals(m)) {
Assert.assertTrue(map.get("b1"));
Assert.assertTrue(map.get("b2"));
}
}
Assert.assertEquals(map.size(), size);
for (String m : map.keySet()) {
Assert.assertTrue(map.get(m));
}
}
@Test
public void test2Threads() {
test(2);
}
@Test
public void test3Threads() {
test(3);
}
private void test(int threadCount) {
Helper.reset();
MultiThreadedDependentSampleTest.m_methods = Lists.newArrayList();
TestNG tng = create(MultiThreadedDependentSampleTest.class);
tng.setThreadCount(threadCount);
tng.setParallel("methods");
Map<Long, Long> map = Helper.getMap(MultiThreadedDependentSampleTest.class.getName());
synchronized(map) {
tng.run();
Assert.assertTrue(map.size() > 1, "Map size:" + map.size() + " expected more than 1");
assertOrder(MultiThreadedDependentSampleTest.m_methods);
}
}
}