PHP Classes

File: tests/Unit/Protocol/MessageSerializationTest.php

Recommend this page to a friend!
  Packages of Gianfrancesco Aurecchia   OPC UA Client   tests/Unit/Protocol/MessageSerializationTest.php   Download  
File: tests/Unit/Protocol/MessageSerializationTest.php
Role: Example script
Content type: text/plain
Description: Example script
Class: OPC UA Client
Control devices that support the OPC UA protocol
Author: By
Last change:
Date: 17 days ago
Size: 2,970 bytes
 

Contents

Class file image Download
<?php

declare(strict_types=1);

use
PhpOpcua\Client\Encoding\BinaryDecoder;
use
PhpOpcua\Client\Encoding\BinaryEncoder;
use
PhpOpcua\Client\Protocol\AcknowledgeMessage;
use
PhpOpcua\Client\Protocol\HelloMessage;
use
PhpOpcua\Client\Protocol\MessageHeader;

describe('Message serialization', function () {

   
it('serializes and deserializes HelloMessage', function () {
       
$hello = new HelloMessage(
           
protocolVersion: 0,
           
receiveBufferSize: 65535,
           
sendBufferSize: 65535,
           
maxMessageSize: 0,
           
maxChunkCount: 0,
           
endpointUrl: 'opc.tcp://localhost:4840',
        );

       
$encoded = $hello->encode();
       
$decoder = new BinaryDecoder($encoded);

       
$header = MessageHeader::decode($decoder);
       
expect($header->getMessageType())->toBe('HEL');
       
expect($header->getChunkType())->toBe('F');
       
expect($header->getMessageSize())->toBe(strlen($encoded));

       
$decoded = HelloMessage::decode($decoder);
       
expect($decoded->getEndpointUrl())->toBe('opc.tcp://localhost:4840');
       
expect($decoded->getReceiveBufferSize())->toBe(65535);
       
expect($decoded->getSendBufferSize())->toBe(65535);
    });

   
it('serializes MessageHeader correctly', function () {
       
$encoder = new BinaryEncoder();
       
$header = new MessageHeader('MSG', 'F', 100);
       
$header->encode($encoder);

       
$buffer = $encoder->getBuffer();
       
expect(strlen($buffer))->toBe(8);
       
expect(substr($buffer, 0, 3))->toBe('MSG');
       
expect(substr($buffer, 3, 1))->toBe('F');

       
$decoder = new BinaryDecoder($buffer);
       
$decoded = MessageHeader::decode($decoder);
       
expect($decoded->getMessageType())->toBe('MSG');
       
expect($decoded->getChunkType())->toBe('F');
       
expect($decoded->getMessageSize())->toBe(100);
    });

   
it('decodes AcknowledgeMessage', function () {
       
$encoder = new BinaryEncoder();
       
$encoder->writeUInt32(0); // ProtocolVersion
       
$encoder->writeUInt32(65535); // ReceiveBufferSize
       
$encoder->writeUInt32(65535); // SendBufferSize
       
$encoder->writeUInt32(0); // MaxMessageSize
       
$encoder->writeUInt32(0); // MaxChunkCount

       
$decoder = new BinaryDecoder($encoder->getBuffer());
       
$ack = AcknowledgeMessage::decode($decoder);

       
expect($ack->getProtocolVersion())->toBe(0);
       
expect($ack->getReceiveBufferSize())->toBe(65535);
       
expect($ack->getSendBufferSize())->toBe(65535);
       
expect($ack->getMaxMessageSize())->toBe(0);
       
expect($ack->getMaxChunkCount())->toBe(0);
    });

   
it('HelloMessage has correct binary size', function () {
       
$hello = new HelloMessage(
           
endpointUrl: 'opc.tcp://localhost:4840',
        );

       
$encoded = $hello->encode();
       
// Header (8) + 5*UInt32 (20) + String length Int32 (4) + URL bytes (24) = 56
       
expect(strlen($encoded))->toBe(56);
    });
});