1
2
3
4
5
6
7
8
9
10
11 package org.mule.test.integration.transport.file;
12
13 import org.mule.api.context.notification.EndpointMessageNotificationListener;
14 import org.mule.context.notification.EndpointMessageNotification;
15 import org.mule.module.client.MuleClient;
16 import org.mule.tck.AbstractServiceAndFlowTestCase;
17 import org.mule.tck.probe.PollingProber;
18 import org.mule.tck.probe.Probe;
19 import org.mule.tck.probe.Prober;
20 import org.mule.util.FileUtils;
21
22 import java.io.File;
23 import java.util.Arrays;
24 import java.util.Collection;
25 import java.util.concurrent.CountDownLatch;
26 import java.util.concurrent.TimeUnit;
27
28 import junit.framework.AssertionFailedError;
29
30 import org.junit.Test;
31 import org.junit.runners.Parameterized.Parameters;
32
33 import static org.junit.Assert.assertFalse;
34 import static org.junit.Assert.assertTrue;
35
36 public class OutputPatternFromEndpointTestCase extends AbstractServiceAndFlowTestCase
37 implements EndpointMessageNotificationListener<EndpointMessageNotification>
38 {
39 protected CountDownLatch fileReceiveLatch;
40
41 @Parameters
42 public static Collection<Object[]> parameters()
43 {
44 return Arrays.asList(new Object[][]{
45 {ConfigVariant.SERVICE,
46 "org/mule/test/integration/providers/file/mule-file-output-pattern-from-endpoint-service.xml"},
47 {ConfigVariant.FLOW,
48 "org/mule/test/integration/providers/file/mule-file-output-pattern-from-endpoint-flow.xml"}});
49 }
50
51 public OutputPatternFromEndpointTestCase(ConfigVariant variant, String configResources)
52 {
53 super(variant, configResources);
54 }
55
56 @Override
57 protected void doSetUp() throws Exception
58 {
59 super.doSetUp();
60 muleContext.registerListener(this);
61 fileReceiveLatch = new CountDownLatch(2);
62 }
63
64 @Test
65 public void testBasic() throws Exception
66 {
67 String myFirstDirName = "FirstWrite";
68 String mySecondDirName = "SecondWrite";
69 final String myFileName1 = "export.txt";
70 final String myFileName2 = "export.txt.OK";
71
72
73 final File myDir = FileUtils.newFile(myFirstDirName);
74 if (myDir.isDirectory())
75 {
76
77 File[] files = myDir.listFiles();
78 for (int i = 0; i < files.length; i++)
79 {
80 assertTrue(files[i].delete());
81 }
82
83 assertTrue(myDir.delete());
84 }
85
86 final File myDir2 = FileUtils.newFile(mySecondDirName);
87 if (myDir2.isDirectory())
88 {
89
90 File[] files = myDir2.listFiles();
91 for (int i = 0; i < files.length; i++)
92 {
93 assertTrue(files[i].delete());
94 }
95
96 assertTrue(myDir2.delete());
97 }
98
99 try
100 {
101 assertFalse(FileUtils.newFile(myDir, myFileName1).exists());
102 assertFalse(FileUtils.newFile(myDir2, myFileName2).exists());
103
104 MuleClient client = new MuleClient(muleContext);
105 client.send("vm://filesend", "Hello", null);
106
107 assertTrue(fileReceiveLatch.await(30, TimeUnit.SECONDS));
108
109
110
111 Prober prober = new PollingProber(2000, 50);
112
113 prober.check(new Probe()
114 {
115 @Override
116 public boolean isSatisfied()
117 {
118 return FileUtils.newFile(myDir, myFileName1).exists() && FileUtils.newFile(myDir2, myFileName2).exists();
119 }
120
121 @Override
122 public String describeFailure()
123 {
124 return "Failed to create the expected files";
125 }
126 });
127 }
128 catch (AssertionFailedError e1)
129 {
130
131
132 e1.printStackTrace();
133 }
134 finally
135 {
136 FileUtils.newFile(myDir, myFileName1).delete();
137 FileUtils.newFile(myDir2, myFileName2).delete();
138 myDir.delete();
139 myDir2.delete();
140 }
141 }
142
143 @Override
144 public void onNotification(EndpointMessageNotification notification)
145 {
146 if (notification.getEndpoint().contains("SecondWrite"))
147 {
148 fileReceiveLatch.countDown();
149 }
150 else if (notification.getEndpoint().contains("FirstWrite"))
151 {
152 fileReceiveLatch.countDown();
153 }
154 }
155 }