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  }