PipelineStageWriter psw = new PipelineStageWriter();
psw.init(conf);
System.out.println("pipeline established; now pushing a chunk");
ArrayList<Chunk> l = new ArrayList<Chunk>();
l.add(new ChunkImpl("dt", "name", 1, new byte[] {'a'}, null));
psw.add(l);
//push a chunk through. It should get written, but the socket tee shouldn't do anything.
assertEquals(1, CaptureWriter.outputs.size());
//now connect and set up a filter.
System.out.println("connecting to localhost");
Socket s = new Socket("localhost", SocketTeeWriter.DEFAULT_PORT);
// s.setSoTimeout(2000);
DataOutputStream dos = new DataOutputStream (s.getOutputStream());
dos.write((SocketTeeWriter.WRITABLE + " datatype=dt3\n").getBytes());
DataInputStream dis = new DataInputStream(s.getInputStream());
System.out.println("command send");
dis.readFully(new byte[3]);
//push a chunk not matching filter -- nothing should happen.
l = new ArrayList<Chunk>();
l.add(new ChunkImpl("dt2", "name", 1, new byte[] {'b'}, null));
psw.add(l);
assertEquals(2, CaptureWriter.outputs.size());
System.out.println("sent nonmatching chunk");
//and now one that does match -- data should be available to read off the socket
l = new ArrayList<Chunk>();
l.add(new ChunkImpl("dt3", "name", 1, new byte[] {'c'}, null));
psw.add(l);
assertEquals(3, CaptureWriter.outputs.size());
System.out.println("sent matching chunk");
System.out.println("reading...");
ChunkImpl chunk = ChunkImpl.read(dis);
assertTrue(chunk.getDataType().equals("dt3"));
System.out.println(chunk);
dis.close();
dos.close();
s.close();
Socket s2 = new Socket("localhost", SocketTeeWriter.DEFAULT_PORT);
s2.getOutputStream().write((SocketTeeWriter.RAW+" content=.*d.*\n").getBytes());
dis = new DataInputStream(s2.getInputStream());
dis.readFully(new byte[3]); //read "OK\n"
l = new ArrayList<Chunk>();
l.add(new ChunkImpl("dt3", "name", 1, new byte[] {'d'}, null));
psw.add(l);
assertEquals(4, CaptureWriter.outputs.size());
int len = dis.readInt();
assertTrue(len == 1);
byte[] data = new byte[100];
int read = dis.read(data);
assertTrue(read == 1);
assertTrue(data[0] == 'd');
s2.close();
dis.close();
l = new ArrayList<Chunk>();
l.add(new ChunkImpl("dt3", "name", 3, new byte[] {'c', 'a', 'd'}, null));
psw.add(l);
assertEquals(5, CaptureWriter.outputs.size());
// Thread.sleep(1000);