1 package net.sourceforge.quexec.proc;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertFalse;
5
6 import java.io.IOException;
7 import java.util.concurrent.TimeoutException;
8
9 import net.sourceforge.quexec.packet.chars.stream.CharPacketInputStream;
10 import net.sourceforge.quexec.testutil.JmsTestUtils;
11 import net.sourceforge.quexec.util.SpringUtils;
12
13 import org.junit.AfterClass;
14 import org.junit.BeforeClass;
15 import org.junit.Test;
16 import org.springframework.context.ConfigurableApplicationContext;
17 import org.springframework.context.support.ClassPathXmlApplicationContext;
18
19 public class RemoteProcessControllerTest {
20
21 @BeforeClass
22 public static void runBeforeClass() throws Exception {
23 JmsTestUtils.setUpEmbeddedJMSService();
24 }
25
26 @AfterClass
27 public static void runAfterClass() throws Exception {
28 JmsTestUtils.tearDownEmbeddedJMSService();
29 }
30
31 @Test(timeout=10000)
32 public void runCommandViaRemoteController()
33 throws IOException, InterruptedException, TimeoutException {
34 ConfigurableApplicationContext controlCtx =
35 new ClassPathXmlApplicationContext(new String[] {
36 SpringUtils.contextDefaultLocationFor(RemoteProcessController.class),
37 "/spring/jmsBase-context.xml",
38 "/spring/beanPostProcess-context.xml"});
39
40 RemoteProcessController procCtrl =
41 (RemoteProcessController) controlCtx.getBean("quexec:remoteProcessController");
42
43 ProcessExecutor pexec = procCtrl.getProcessExecutor();
44
45 pexec.execJava(CatMain.class.getName());
46
47 ConfigurableApplicationContext stubCtx =
48 new ClassPathXmlApplicationContext(new String[] {
49 SpringUtils.contextDefaultLocationFor(RemoteProcessStub.class),
50 "/spring/jmsBase-context.xml",
51 "/spring/beanPostProcess-context.xml"});
52
53 ProcessCharPacketStreams stub =
54 (ProcessCharPacketStreams) stubCtx.getBean("quexec:remoteProcessStub");
55
56 final String[] msg = {"foo", "bar", "baz and something else"};
57 for (String s : msg) {
58 stub.getProcessInput().sendPacket(s + "\n");
59 }
60 stub.getProcessInput().finish();
61
62 pexec.waitFor();
63
64 CharPacketInputStream processOutput = stub.getProcessOutput();
65 for (String s : msg) {
66 assertFalse(processOutput.isFinished());
67 assertEquals(s + "\n", processOutput.readPacket());
68 }
69 while (!processOutput.isFinished());
70 }
71
72 }