Location: PHPKode > scripts > PHP Multiplexed I/O > tests/StreamTest.php
<?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
        );
    }

}


Return current item: PHP Multiplexed I/O