/**
  * Test connecting an output and several input pipes to a merging tee. 
  */
 public function testConnectingIOPipes()
 {
     // create input pipe
     $output1 = new Pipe();
     // create input pipes 1, 2, 3 and 4
     $pipe1 = new Pipe();
     $pipe2 = new Pipe();
     $pipe3 = new Pipe();
     $pipe4 = new Pipe();
     // create splitting tee (args are first two input fittings of tee)
     $teeMerge = new TeeMerge($pipe1, $pipe2);
     // connect 2 extra inputs for a total of 4
     $connectedExtra1 = $teeMerge->connectInput($pipe3);
     $connectedExtra2 = $teeMerge->connectInput($pipe4);
     // connect the single output
     $connected = $output1->connect($teeMerge);
     // test assertions
     $this->assertTrue($output1 instanceof Pipe, "Expecting \$output1 instanceof Pipe");
     $this->assertTrue($pipe1 instanceof Pipe, "Expecting \$pipe1 instanceof Pipe");
     $this->assertTrue($pipe2 instanceof Pipe, "Expecting \$pipe2 instanceof Pipe");
     $this->assertTrue($pipe3 instanceof Pipe, "Expecting \$pipe2 instanceof Pipe");
     $this->assertTrue($pipe4 instanceof Pipe, "Expecting \$pipe2 instanceof Pipe");
     $this->assertTrue($teeMerge instanceof TeeMerge, "Expecting \$teeMerge instanceof TeeMerge");
     $this->assertTrue($connectedExtra1, "Expecting connected extra input 1");
     $this->assertTrue($connectedExtra2, "Expecting connected extra input 2");
 }
예제 #2
0
 /**
  * Test attempting to connect a pipe to a pipe with an output already connected. 
  */
 public function testConnectingToAConnectedPipe()
 {
     // create two pipes
     $pipe1 = new Pipe();
     $pipe2 = new Pipe();
     $pipe3 = new Pipe();
     // connect them
     $success = $pipe1->connect($pipe2);
     // test assertions
     $this->assertTrue($success, "Expecting connected pipe1 to pipe2");
     $this->assertTrue($pipe1->connect($pipe3) == false, "Expecting can't connect pipe3 to pipe1");
 }
 /**
  * Test connecting input and output pipes to a queue. 
  */
 public function testConnectingIOPipes()
 {
     // create output pipes 1
     $pipe1 = new Pipe();
     $pipe2 = new Pipe();
     // create queue
     $queue = new Queue();
     // connect input fitting
     $connectedInput = $pipe1->connect($queue);
     // connect output fitting
     $connectedOutput = $queue->connect($pipe2);
     // test assertions
     $this->assertTrue($pipe1 instanceof Pipe, "Expecting \$pipe1 instanceof Pipe");
     $this->assertTrue($pipe2 instanceof Pipe, "Expecting \$pipe2 instanceof Pipe");
     $this->assertTrue($queue instanceof Queue, "Expecting \$queue instanceof Queue");
     $this->assertTrue($connectedInput, "Expecting connected input");
     $this->assertTrue($connectedOutput, "Expecting connected output");
 }
 /**
  * Test receiving a message from a pipe using a PipeListener.
  */
 public function testReceiveMessageViaPipeListener()
 {
     // create a message with complete constructor args
     $messageToSend = new Message(Message::NORMAL, (object) array('testProp' => 'testval'), simplexml_load_string('<testMessage testAtt="Hello" testAtt2="world"/>'), Message::PRIORITY_HIGH);
     // create pipe and listener
     $pipe = new Pipe();
     $listener = new PipeListener($this, 'callBackMethod');
     // connect the listener to the pipe and write the message
     $connected = $pipe->connect($listener);
     $written = $pipe->write($messageToSend);
     // test assertions
     $this->assertTrue($pipe instanceof Pipe, "Expecting pipe is Pipe");
     $this->assertTrue($connected, "Expecting successfully connected listener to pipe");
     $this->assertTrue($written, "Expecting wrote message to pipe");
     $this->assertTrue($this->messagesReceived instanceof Message, "Expecting \$this->messagesReceived instance of Message");
     $this->assertTrue($this->messagesReceived->getType() == Message::NORMAL, "Expecting \$this->messagesReceived->getType() == Message::NORMAL");
     $this->assertTrue($this->messagesReceived->getHeader()->testProp == 'testval', "Expecting \$this->messagesReceived->getHeader()->testProp == 'testval'");
     $this->assertTrue($this->messagesReceived->getBody()->attributes()->testAtt == 'Hello', "Expecting \$this->messagesReceived->getBody()->attributes()->testAtt == 'Hello'");
     $this->assertTrue($this->messagesReceived->getPriority() == Message::PRIORITY_HIGH, "Expecting \$this->messagesReceived->getPriority() == Message::PRIORITY_HIGH");
 }
 /**
  * Test connecting input and output pipes to a filter as well as disconnecting the output.
  */
 public function testConnectingAndDisconnectingIOPipes()
 {
     // create output pipes 1
     $pipe1 = new Pipe();
     $pipe2 = new Pipe();
     // create filter
     $filter = new Filter('TestFilter');
     // connect input fitting
     $connectedInput = $pipe1->connect($filter);
     // connect output fitting
     $connectedOutput = $filter->connect($pipe2);
     // test assertions
     $this->assertTrue($pipe1 instanceof Pipe, "Expecting pipe1 instanceof Pipe");
     $this->assertTrue($pipe2 instanceof Pipe, "Expecting pipe2 instanceof Pipe");
     $this->assertTrue($filter instanceof Filter, "Expecting filter instanceof Filter");
     $this->assertTrue($connectedInput, "Expecting connected input");
     $this->assertTrue($connectedOutput, "Expecting connected output");
     // disconnect pipe 2 from filter
     $disconnectedPipe = $filter->disconnect();
     $this->assertTrue($disconnectedPipe === $pipe2, "Expecting disconnected pipe2 from filter");
 }
 /**
  * Test receiving messages from two pipes using a TeeMerge.
  */
 public function testReceiveMessagesFromTwoTeeSplitOutputs()
 {
     $this->messagesReceived = array();
     // create a message to send on pipe 1
     $message = new Message(Message::NORMAL, array('testProp' => 1));
     // create output pipes 1 and 2
     $pipe1 = new Pipe();
     $pipe2 = new Pipe();
     // create and connect anonymous listeners
     $connected1 = $pipe1->connect(new PipeListener($this, 'callBackMethod'));
     $connected2 = $pipe2->connect(new PipeListener($this, 'callBackMethod'));
     // create splitting tee (args are first two output fittings of tee)
     $teeSplit = new TeeSplit($pipe1, $pipe2);
     // write messages to their respective pipes
     $written = $teeSplit->write($message);
     // test $this->assertions
     $this->assertTrue($message instanceof IPipeMessage, "Expecting \$message instanceof IPipeMessage");
     $this->assertTrue($pipe1 instanceof Pipe, "Expecting \$pipe1 instanceof Pipe");
     $this->assertTrue($pipe2 instanceof Pipe, "Expecting \$pipe2 instanceof Pipe");
     $this->assertTrue($teeSplit instanceof TeeSplit, "Expecting \$teeSplit instanceof TeeSplit");
     $this->assertTrue($connected1, "Expecting connected anonymous listener to pipe 1");
     $this->assertTrue($connected2, "Expecting connected anonymous listener to pipe 2");
     $this->assertTrue($written, "Expecting wrote single message to tee");
     // test that both messages were received, then test
     // FIFO order by inspecting the messages themselves
     $this->assertTrue(count($this->messagesReceived) == 2, "Expecting received 2 messages");
     // test message 1 $this->assertions
     $message1 = array_shift($this->messagesReceived);
     $this->assertTrue($message1 instanceof IPipeMessage, "Expecting \$message1 instanceof IPipeMessage");
     $this->assertTrue($message1 === $message, "Expecting \$message1 === \$pipe1Message");
     // object equality
     // test message 2 $this->assertions
     $message2 = array_shift($this->messagesReceived);
     $this->assertTrue($message2 instanceof IPipeMessage, "Expecting \$message1 instanceof IPipeMessage");
     $this->assertTrue($message2 === $message, "Expecting \$message1 === \$pipe1Message");
     // object equality
 }
 /**
  * Test using sendMessage on an OUTPUT pipe.
  * <P>
  * Creates a Pipe, Junction and Message. 
  * Adds the PipeListener to the Pipe.
  * Adds the Pipe to the Junction as an OUTPUT pipe.
  * uses the Junction's sendMessage method to send
  * the Message, then checks that it was received.</P>
  */
 public function testSendMessageOnAnOutputPipe()
 {
     // create pipe
     $pipe = new Pipe();
     // add a PipeListener manually
     $listenerAdded = $pipe->connect(new PipeListener($this, 'callBackMethod'));
     // create junction
     $junction = new Junction();
     // create test message
     $message = new Message(Message::NORMAL, array('testVal' => 1));
     // register the pipe with the junction, giving it a name and direction
     $registered = $junction->registerPipe('testOutputPipe', Junction::OUTPUT, $pipe);
     // send the message using the Junction's method
     // it should show up in messageReceived property via the pipeListener
     $sent = $junction->sendMessage('testOutputPipe', $message);
     // test assertions
     $this->assertTrue($pipe instanceof Pipe, "Expecting \$pipe instanceof Pipe");
     $this->assertTrue($junction instanceof Junction, "Expecting \$junction instanceof Junction");
     $this->assertTrue($registered, "Expecting regsitered pipe");
     $this->assertTrue($listenerAdded, "Expecting added pipeListener");
     $this->assertTrue($sent, "Expecting successful write to pipe");
     $this->assertTrue(count($this->messagesReceived) == 1, "Expecting received 1 messages");
     $this->assertTrue(array_pop($this->messagesReceived) === $message, "Expecting received message was same instance sent");
     //object equality
 }