1 package net.sourceforge.quexec.proc;
2
3
4 import static org.junit.Assert.assertEquals;
5
6 import java.io.IOException;
7 import java.io.PipedReader;
8 import java.io.PipedWriter;
9 import java.util.concurrent.TimeoutException;
10
11 import javax.annotation.Resource;
12
13 import net.sourceforge.quexec.packet.chars.producer.AbstractReaderCharPacketProducer;
14
15 import org.apache.commons.lang.StringUtils;
16 import org.apache.commons.logging.Log;
17 import org.apache.commons.logging.LogFactory;
18 import org.junit.Test;
19 import org.junit.runner.RunWith;
20 import org.springframework.test.context.ContextConfiguration;
21 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
22
23 @RunWith(SpringJUnit4ClassRunner.class)
24 @ContextConfiguration(locations={
25 "/net/sourceforge/quexec/proc/LocalProcessController-context.xml",
26 "/spring/beanPostProcess-context.xml"})
27 public class ProcessCharPacketStreamsToJavaIOLinkTest {
28
29 private static final Log log =
30 LogFactory.getLog(ProcessCharPacketStreamsToJavaIOLinkTest.class);
31
32 @Resource(name="quexec:localProcessController")
33 LocalProcessController procCtrl;
34
35 @Test(timeout=3000)
36 public void linkProcessIOToStringStreams()
37 throws IOException, InterruptedException, TimeoutException {
38 PipedWriter procInWriter = new PipedWriter();
39 PipedReader procInReader = new PipedReader(procInWriter);
40
41 PipedReader procOutReader = new PipedReader();
42 PipedWriter procOutWriter = new PipedWriter(procOutReader);
43
44 ProcessExecutor pexec = procCtrl.getProcessExecutor();
45
46 ProcessCharPacketStreamsToJavaIOLink ioLink =
47 new ProcessCharPacketStreamsToJavaIOLink(procCtrl,
48 procInReader, procOutWriter,
49 AbstractReaderCharPacketProducer.ReadMode.BLOCKING);
50
51 pexec.execJava(CatMain.class.getName());
52
53 ioLink.link();
54
55 final String[] msg = {"foo", "bar", "baz and something else"};
56 for (String s : msg) {
57 procInWriter.write(s + "\n");
58 }
59 procInWriter.close();
60
61 pexec.waitFor();
62
63 StringBuilder result = new StringBuilder();
64 int ch;
65 while ((ch = procOutReader.read()) != -1) {
66 result.append((char) ch);
67 log.debug("char read. buffer content: " + result.toString());
68 }
69 assertEquals(StringUtils.join(msg, '\n') + "\n", result.toString());
70
71 ioLink.awaitEndOfOutputProducer();
72 ioLink.shutdown();
73 }
74
75 }