/** * @test */ public function it_should_change_message_type() { $messageType = new MessageType(MessageType::PONG); $socketMessage = $this->socketMessage->changeMessageType($messageType); \PHPUnit_Framework_Assert::assertNotSame($this->socketMessage, $socketMessage); $this->assertEquals($socketMessage->getMessageType(), $messageType); $this->assertSame($socketMessage->getCredentials(), $this->credentials); $this->assertEquals($socketMessage->getCorrelationID(), 'correlation'); $this->assertSame($socketMessage->getData(), $this->protobufMessage); }
/** * @test * @expectedException \RuntimeException */ public function it_should_compose_empty_message_without_auth() { $this->socketMessage = $this->socketMessage->reveal(); $binaryMessage = $this->messageComposer->compose($this->socketMessage); $buffer = new Buffer($binaryMessage); \PHPUnit_Framework_Assert::assertEquals(18, $buffer->readInt32LE(0)); \PHPUnit_Framework_TestCase::assertEquals(MessageType::HEARTBEAT_REQUEST, $buffer->readInt8(4)); \PHPUnit_Framework_TestCase::assertEquals(MessageConfiguration::FLAGS_NONE, $buffer->readInt8(5)); \PHPUnit_Framework_TestCase::assertEquals('12350000000000000000000000000000', bin2hex($buffer->read(6, 16))); //should throw exception out of range $buffer->read(22, 1); }
/** * @test */ public function it_should_send_message() { $this->socketMessage = $this->socketMessage->reveal(); $this->messageComposer->compose($this->socketMessage)->willReturn('binary'); $this->stream->write('binary')->shouldBeCalledTimes(1); $this->streamHandler->sendMessage($this->socketMessage); }
/** * Composes message to binary data to send it via stream * * @param SocketMessage $socketMessage * * @return string * */ public function compose(SocketMessage $socketMessage) { //Correlation + flag length + command length $messageLength = MessageConfiguration::HEADER_LENGTH; $doAuthorization = $socketMessage->getCredentials() ? true : false; $authorizationLength = 0; if ($doAuthorization) { $authorizationLength = 1 + strlen($socketMessage->getCredentials()->getUsername()) + 1 + strlen($socketMessage->getCredentials()->getPassword()); } $dataToSend = $socketMessage->getData(); if ($dataToSend) { $dataToSend = $dataToSend->serializeToString(); $messageLength += strlen($dataToSend); } $wholeMessageLength = $messageLength + $authorizationLength + MessageConfiguration::INT_32_LENGTH; $buffer = new Buffer($wholeMessageLength); $buffer->writeInt32LE($messageLength + $authorizationLength, 0); $buffer->writeInt8($socketMessage->getMessageType()->getType(), MessageConfiguration::MESSAGE_TYPE_OFFSET); $buffer->writeInt8($doAuthorization ? MessageConfiguration::FLAG_AUTHORIZATION : MessageConfiguration::FLAGS_NONE, MessageConfiguration::FLAG_OFFSET); $buffer->write(hex2bin($this->createCorrelationID($socketMessage->getCorrelationID())), MessageConfiguration::CORRELATION_ID_OFFSET); if ($doAuthorization) { $usernameLength = strlen($socketMessage->getCredentials()->getUsername()); $passwordLength = strlen($socketMessage->getCredentials()->getPassword()); $buffer->writeInt8($usernameLength, MessageConfiguration::DATA_OFFSET); $buffer->write($socketMessage->getCredentials()->getUsername(), MessageConfiguration::DATA_OFFSET + 1); $buffer->writeInt8($passwordLength, MessageConfiguration::DATA_OFFSET + 1 + $usernameLength); $buffer->write($socketMessage->getCredentials()->getPassword(), MessageConfiguration::DATA_OFFSET + 1 + $usernameLength + 1); } if ($dataToSend) { $buffer->write($dataToSend, MessageConfiguration::DATA_OFFSET + $authorizationLength); } return (string) $buffer; }