1
2
3
4
5
6
7
8
9
10
11 package org.mule.work;
12
13 import org.mule.DefaultMuleMessage;
14 import org.mule.OptimizedRequestContext;
15 import org.mule.RequestContext;
16 import org.mule.api.MuleEvent;
17 import org.mule.api.ThreadSafeAccess;
18 import org.mule.tck.junit4.AbstractMuleContextTestCase;
19 import org.mule.util.concurrent.Latch;
20
21 import java.util.concurrent.TimeUnit;
22 import org.junit.Test;
23
24 import static org.junit.Assert.assertNotNull;
25 import static org.junit.Assert.assertNotSame;
26 import static org.junit.Assert.assertSame;
27 import static org.junit.Assert.assertTrue;
28 import static org.junit.Assert.fail;
29
30
31
32
33 public class MuleEventWorkTestCase extends AbstractMuleContextTestCase
34 {
35
36 protected MuleEvent originalEvent;
37 protected Latch latch = new Latch();
38
39 @Override
40 protected void doSetUp() throws Exception
41 {
42 super.doSetUp();
43
44 originalEvent = getTestEvent("test");
45 originalEvent.getMessage().setOutboundProperty("test", "val");
46 originalEvent.getMessage().setOutboundProperty("test2", "val2");
47 OptimizedRequestContext.unsafeSetEvent(originalEvent);
48 }
49
50 @Test
51 public void testScheduleMuleEventWork() throws Exception
52 {
53 muleContext.getWorkManager().scheduleWork(new TestMuleEventWork(originalEvent));
54
55 assertTrue("Timed out waiting for latch", latch.await(2000, TimeUnit.MILLISECONDS));
56
57 assertSame(originalEvent, RequestContext.getEvent());
58
59 try
60 {
61
62
63
64 ((DefaultMuleMessage) originalEvent.getMessage()).assertAccess(ThreadSafeAccess.WRITE);
65 }
66 catch (Exception e)
67 {
68 fail(e.getMessage());
69 }
70 }
71
72 @Test
73 public void testRunMuleEventWork() throws Exception
74 {
75 new TestMuleEventWork(originalEvent).run();
76
77
78
79
80
81
82
83 assertNotSame(originalEvent, RequestContext.getEvent());
84
85 try
86 {
87
88
89
90 ((DefaultMuleMessage) originalEvent.getMessage()).assertAccess(ThreadSafeAccess.WRITE);
91 }
92 catch (Exception e)
93 {
94 fail(e.getMessage());
95 }
96
97 }
98
99 private class TestMuleEventWork extends AbstractMuleEventWork
100 {
101
102 public TestMuleEventWork(MuleEvent event)
103 {
104 super(event);
105 }
106
107 @Override
108 protected void doRun()
109 {
110 assertNotSame("MuleEvent", event, originalEvent);
111 assertNotNull("RequestContext.getEvent() is null", RequestContext.getEvent());
112
113 try
114 {
115
116
117 ((DefaultMuleMessage) event.getMessage()).assertAccess(ThreadSafeAccess.WRITE);
118 }
119 catch (Exception e)
120 {
121 fail(e.getMessage());
122 }
123 latch.countDown();
124 }
125 }
126
127 }