1 package org.apache.onami.lifecycle.core;
2
3 import java.util.concurrent.atomic.AtomicBoolean;
4
5 import org.junit.Assert;
6 import org.junit.Test;
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 public class DefaultStagerTestCase
28 {
29
30 @Test
31 public void stagerShouldStageObjectsRegisteredWhileStaging()
32 {
33 final Stager<TestAnnotationA> stager =
34 new DefaultStager<TestAnnotationA>( TestAnnotationA.class );
35 final AtomicBoolean staged = new AtomicBoolean();
36 stager.register( new Stageable()
37 {
38 @Override
39 public void stage( StageHandler stageHandler )
40 {
41 stager.register( new Stageable()
42 {
43 @Override
44 public void stage( StageHandler stageHandler )
45 {
46 staged.set( true );
47 }
48 } );
49 }
50 } );
51
52 stager.stage();
53
54 Assert.assertTrue( staged.get() );
55 }
56
57
58
59
60
61
62
63 @Test
64 public void stagerShouldNotDeadlockWhileStagingObjectChains()
65 {
66 final AtomicBoolean staged = new AtomicBoolean();
67 final Stager<TestAnnotationA> stager =
68 new DefaultStager<TestAnnotationA>( TestAnnotationA.class );
69 stager.register( new Stageable()
70 {
71 @Override
72 public void stage( StageHandler stageHandler )
73 {
74 Thread thread = new Thread( new Runnable()
75 {
76 @Override
77 public void run()
78 {
79 stager.register( new Stageable()
80 {
81 @Override
82 public void stage( StageHandler stageHandler )
83 {
84 staged.set( true );
85 }
86 } );
87 }
88 } );
89 thread.start();
90 try
91 {
92 thread.join();
93 }
94 catch ( InterruptedException e )
95 {
96 Thread.currentThread().interrupt();
97 }
98 }
99 } );
100
101 stager.stage();
102
103 Assert.assertTrue( staged.get() );
104 }
105 }