| 
<?php
require_once MIO_PATH . 'Stream.php';
 require_once MIO_PATH . 'Exception.php';
 
 class MioStreamTest extends UnitTestCase
 {
 private
 $server,
 $stream;
 
 public function setUp()
 {
 $this->server = stream_socket_server( '127.0.0.1:8888', $errno=null, $errstr=null );
 if( !$this->server ) {
 throw new Exception("Could not start test server [$errno:$errstr]");
 }
 $this->stream = new MioStream( fsockopen( '127.0.0.1', 8888, $errno=null, $errstr=null ), '127.0.0.1:8888' );
 }
 
 public function tearDown()
 {
 if( is_resource( $this->server ) ) {
 fclose( $this->server );
 }
 $this->stream->close();
 unset( $this->server, $this->stream );
 }
 
 public function accept()
 {
 return stream_socket_accept( $this->server );
 }
 
 public function testCreateWithBadStream()
 {
 try {
 new MioStream( null, 'fail me' );
 $this->fail();
 } catch( MioException $e ) {
 $this->pass();
 }
 }
 
 public function testBlocking()
 {
 $this->assertFalse(
 $this->stream->isBlocking(),
 'Stream should start off in non-blocking mode'
 );
 $this->stream->setBlocking( 1 );
 $this->assertTrue(
 $this->stream->isBlocking()
 );
 }
 
 public function testBadBlocking()
 {
 try {
 $this->stream->setBlocking( 2 );
 $this->fail();
 } catch( MioBlockingException $e ) {
 $this->pass();
 }
 }
 
 public function testOpen()
 {
 $this->assertTrue(
 $this->stream->isOpen(),
 'Stream should start off open'
 );
 }
 
 public function testClose()
 {
 $this->stream->close();
 $this->assertFalse(
 $this->stream->isOpen(),
 'Stream should be marked as closed when it is closed'
 );
 }
 
 public function testRead()
 {
 $con = $this->accept();
 fwrite( $con, "hello" );
 $this->assertEqual(
 $this->stream->read( 1024 ),
 'hello'
 );
 }
 
 public function testReadClosed()
 {
 $con = $this->accept();
 fwrite( $con, "hello" );
 $this->stream->close();
 try {
 $this->stream->read( 1024 );
 $this->fail();
 } catch( MioClosedException $e ) {
 $this->pass();
 }
 }
 
 public function testWrite()
 {
 $con = $this->accept();
 $string = "hello";
 $written = $this->stream->write( $string );
 $this->assertEqual(
 fread( $con, 1024 ),
 $string
 );
 $this->assertEqual(
 $written,
 strlen( $string )
 );
 }
 
 public function testWriteClosed()
 {
 $this->stream->close();
 try {
 $this->stream->write( 'hello' );
 $this->fail();
 } catch( MioClosedException $e ) {
 $this->pass();
 }
 }
 
 public function testWriteExceedStreamBuffer()
 {
 $string = 'hello';
 $string = str_repeat( $string, 1000000 );
 $string_len = strlen( $string );
 
 $con = $this->accept();
 try {
 $this->stream->write( $string );
 $this->fail();
 } catch( MioException $e ) {
 $this->pass();
 }
 }
 
 public function testAccept()
 {
 $stream = new MioStream( $this->server, '127.0.0.1:8888' );
 $this->assertTrue(
 $stream->accept() instanceof MioStream
 );
 }
 
 }
 
 
 
 |