• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package test.retryAnalyzer;
2 
3 import static org.testng.Assert.assertEquals;
4 import static org.testng.Assert.fail;
5 
6 import java.util.concurrent.atomic.AtomicInteger;
7 
8 import org.testng.IRetryAnalyzer;
9 import org.testng.ITestResult;
10 import org.testng.TestNG;
11 import org.testng.annotations.DataProvider;
12 import org.testng.annotations.Test;
13 
14 import com.google.common.collect.ConcurrentHashMultiset;
15 import com.google.common.collect.Multiset;
16 
17 /**
18  * retryAnalyzer parameter unit tests.
19  * @author tocman@gmail.com (Jeremie Lenfant-Engelmann)
20  *
21  */
22 public final class InvocationCountTest implements IRetryAnalyzer {
23   static final Multiset<String> invocations = ConcurrentHashMultiset.create();
24   private static final AtomicInteger retriesRemaining = new AtomicInteger(100);
25 
26   private int r1 = 0;
27   private int r2 = 0;
28   private int r3 = 0;
29   private int r7 = 0;
30   private static int value = 42;
31 
32   @Test(retryAnalyzer = InvocationCountTest.class)
testAnnotationWithNoRetries()33   public void testAnnotationWithNoRetries() {
34   }
35 
36   @Test(retryAnalyzer = InvocationCountTest.class)
testAnnotationWithOneRetry()37   public void testAnnotationWithOneRetry() {
38     if (r1++ < 1) {
39       fail();
40     }
41   }
42 
43   @Test(retryAnalyzer = InvocationCountTest.class)
testAnnotationWithSevenRetries()44   public void testAnnotationWithSevenRetries() {
45     if (r7++ < 7) {
46       fail();
47     }
48   }
49 
50   @Test(retryAnalyzer = ThreeRetries.class, successPercentage = 0)
failAfterThreeRetries()51   public void failAfterThreeRetries() {
52     fail();
53   }
54 
55   @Test(dependsOnMethods = {
56       "testAnnotationWithNoRetries",
57       "testAnnotationWithOneRetry",
58       "testAnnotationWithSevenRetries",
59       "failAfterThreeRetries"
60   }, alwaysRun = true)
checkInvocationCounts()61   public void checkInvocationCounts() {
62     assertEquals(invocations.count("testAnnotationWithNoRetries"), 0);
63     assertEquals(invocations.count("testAnnotationWithOneRetry"), 1);
64     assertEquals(invocations.count("testAnnotationWithSevenRetries"), 7);
65     assertEquals(invocations.count("failAfterThreeRetries"), 4);
66   }
67 
68   @DataProvider(name="dataProvider")
dataProvider()69   private Object[][] dataProvider() {
70     return new Object[][] { { 1, false }, { 0, true }, { 0, true },
71         { 1, false } };
72   }
73 
74   @DataProvider(name="dataProvider2")
dataProvider2()75   private Object[][] dataProvider2() {
76     value = 42;
77 
78     return new Object[][] { { true }, { true } };
79   }
80 
81   @Test(retryAnalyzer = InvocationCountTest.class, dataProvider = "dataProvider")
testAnnotationWithDataProvider(int paf, boolean test)82   public void testAnnotationWithDataProvider(int paf, boolean test) {
83     if (paf == 1 && test == false) {
84       if (r2 >= 1) {
85         r2--;
86         fail();
87       }
88     }
89   }
90 
91   @Test(retryAnalyzer = InvocationCountTest.class, dataProvider = "dataProvider2")
testAnnotationWithDataProviderAndRecreateParameters(boolean dummy)92   public void testAnnotationWithDataProviderAndRecreateParameters(boolean dummy) {
93     if (r3 == 1) {
94       this.value = 0;
95       r3--;
96       fail();
97     } else if (r3 == 0) {
98       assertEquals(this.value, 42);
99     }
100   }
101 
102   @Test
withFactory()103   public void withFactory() {
104     TestNG tng = new TestNG();
105     tng.setVerbose(0);
106     tng.setTestClasses(new Class[] { MyFactory.class});
107     FactoryTest.m_count = 0;
108 
109     tng.run();
110 
111     assertEquals(FactoryTest.m_count, 4);
112   }
113 
114   @Override
retry(ITestResult result)115   public boolean retry(ITestResult result) {
116     invocations.add(result.getName());
117     return retriesRemaining.getAndDecrement() >= 0;
118   }
119 
120   public static class ThreeRetries implements IRetryAnalyzer {
121     private final AtomicInteger remainingRetries = new AtomicInteger(3);
122 
123     @Override
retry(ITestResult result)124     public boolean retry(ITestResult result) {
125       invocations.add(result.getName());
126       return remainingRetries.getAndDecrement() > 0;
127     }
128   }
129 }
130