1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package fr.paris.lutece.portal.service.daemon;
35
36 import java.util.concurrent.BrokenBarrierException;
37 import java.util.concurrent.CyclicBarrier;
38 import java.util.concurrent.TimeUnit;
39 import java.util.concurrent.TimeoutException;
40 import java.util.concurrent.atomic.AtomicInteger;
41
42 public final class TestDaemon extends Daemon
43 {
44 CyclicBarrier startBarrier = new CyclicBarrier( 2 );
45 CyclicBarrier completionBarrier = new CyclicBarrier( 2 );
46 boolean hasRun;
47 boolean shouldThrowInRun;
48 boolean shouldThrowInStop;
49 private AtomicInteger stopCallNumber = new AtomicInteger( 0 );
50
51 public void setRunThrows( boolean shouldThrowInRun )
52 {
53 this.shouldThrowInRun = shouldThrowInRun;
54 }
55
56 public void setStopThrows( boolean shouldThrowInStop )
57 {
58 this.shouldThrowInStop = shouldThrowInStop;
59 }
60
61 @Override
62 public void run( )
63 {
64 try
65 {
66 hasRun = false;
67 startBarrier.await( 10, TimeUnit.SECONDS );
68 hasRun = true;
69 completionBarrier.await( 10, TimeUnit.SECONDS );
70 }
71 catch( InterruptedException | BrokenBarrierException | TimeoutException e )
72 {
73 e.printStackTrace( );
74 }
75 if ( shouldThrowInRun )
76 {
77 throw new RuntimeException( "I'm a bad running daemon" );
78 }
79 }
80
81 public boolean hasRun( )
82 {
83 return hasRun;
84 }
85
86 public void resetGo( )
87 {
88 startBarrier.reset( );
89 }
90
91 public void resetCompletion( )
92 {
93 completionBarrier.reset( );
94 }
95
96 public void go( ) throws InterruptedException, BrokenBarrierException, TimeoutException
97 {
98 this.go( 10, TimeUnit.SECONDS );
99 }
100
101 public void go( long timeout, TimeUnit unit ) throws InterruptedException, BrokenBarrierException, TimeoutException
102 {
103 startBarrier.await( timeout, unit );
104 }
105
106 public void waitForCompletion( ) throws InterruptedException, BrokenBarrierException, TimeoutException
107 {
108 this.waitForCompletion( 10, TimeUnit.SECONDS );
109 }
110
111 public void waitForCompletion( long timeout, TimeUnit unit ) throws InterruptedException, BrokenBarrierException, TimeoutException
112 {
113 completionBarrier.await( timeout, unit );
114 }
115
116 @Override
117 protected void stop( )
118 {
119 stopCallNumber.incrementAndGet( );
120 super.stop( );
121 if ( shouldThrowInStop )
122 {
123 throw new RuntimeException( "I'm a bad stopping daemon" );
124 }
125 }
126
127 public int getStopCallNumber( )
128 {
129 return stopCallNumber.get( );
130 }
131
132 }