Files
php-react-protocol/tests/Binary/BinaryProtocolTest.php

92 lines
2.5 KiB
PHP
Raw Normal View History

2026-04-02 22:29:35 +02:00
<?php
namespace NoccyLabs\React\Protocol\Binary;
use NoccyLabs\React\Protocol\ProtocolException;
use PHPUnit\Framework\Attributes\CoversClass;
#[CoversClass(BinaryProtocol::class)]
class BinaryProtocolTest extends \PHPUnit\Framework\TestCase
{
public function testPackingFrames()
{
$proto = new BinaryProtocol(
frameSeparator: "\0"
);
$res1 = $proto->packFrame([ 'payload' => 'foobar' ]);
$this->assertEquals("foobar\0", $res1);
$proto = new BinaryProtocol(
frameSeparator: "",
prependSizeBytes: 2,
);
$res1 = $proto->packFrame([ 'payload' => 'foobar' ]);
$this->assertEquals("\x06\x00foobar", $res1);
}
public function testUnpackingFrames()
{
$proto = new BinaryProtocol(
frameSeparator: "\0"
);
$res1 = $proto->unpackFrame("foobar\0");
$this->assertEquals([ 'payload' => 'foobar' ], $res1);
$proto = new BinaryProtocol(
frameSeparator: "",
prependSizeBytes: 2,
);
$res1 = $proto->unpackFrame("\x06\x00foobar");
$this->assertEquals([ 'payload' => 'foobar' ], $res1);
}
public function testUnpackingIncompleteFrames()
{
$proto = new BinaryProtocol(
frameSeparator: "\0"
);
$res1 = $proto->unpackFrame("foobar\0");
$this->assertEquals([ 'payload' => 'foobar' ], $res1);
$proto = new BinaryProtocol(
frameSeparator: "",
prependSizeBytes: 2,
);
$this->expectException(ProtocolException::class);
$res0 = $proto->unpackFrame("\x06");
$this->expectException(ProtocolException::class);
$res1 = $proto->unpackFrame("\x00foo");
$res2 = $proto->unpackFrame("bar");
$this->assertNull($res1);
$this->assertEquals([ 'payload' => 'foobar' ], $res2);
}
public function testConsumingFrames()
{
$proto = new BinaryProtocol(
frameSeparator: "\0"
);
$res1 = $proto->unpackFrame("foobar\0");
$this->assertEquals([ 'payload' => 'foobar' ], $res1);
$proto = new BinaryProtocol(
frameSeparator: "",
prependSizeBytes: 2,
);
$buffer = "\x06\x00foobar\x06\x00foobaz";
$res1 = $proto->consumeFrame($buffer);
$res2 = $proto->consumeFrame($buffer);
$this->assertEquals([ 'payload' => 'foobar' ], $res1);
$this->assertEquals([ 'payload' => 'foobaz' ], $res2);
}
}