UdpConnectionTest.php 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. <?php
  2. use Workerman\Connection\UdpConnection;
  3. use Symfony\Component\Process\PhpProcess;
  4. $remoteAddress = '[::1]:12345';
  5. $process = new PhpProcess(<<<PHP
  6. <?php
  7. \$socketServer = stream_socket_server("udp://$remoteAddress", \$errno, \$errstr, STREAM_SERVER_BIND);
  8. do{
  9. \$data = stream_socket_recvfrom(\$socketServer, 3);
  10. }while(\$data !== false && \$data !== 'bye');
  11. PHP
  12. );
  13. $process->start();
  14. it('tests ' . UdpConnection::class, function () use ($remoteAddress) {
  15. $socketClient = stream_socket_client("udp://$remoteAddress");
  16. $udpConnection = new UdpConnection($socketClient, $remoteAddress);
  17. $udpConnection->protocol = \Workerman\Protocols\Text::class;
  18. expect($udpConnection->send('foo'))->toBeTrue();
  19. expect($udpConnection->getRemoteIp())->toBe('::1');
  20. expect($udpConnection->getRemotePort())->toBe(12345);
  21. expect($udpConnection->getRemoteAddress())->toBe($remoteAddress);
  22. expect($udpConnection->getLocalIp())->toBeIn(['::1', '[::1]', '127.0.0.1']);
  23. expect($udpConnection->getLocalPort())->toBeInt();
  24. expect(json_encode($udpConnection))->toBeJson()
  25. ->toContain('transport')
  26. ->toContain('getRemoteIp')
  27. ->toContain('remotePort')
  28. ->toContain('getRemoteAddress')
  29. ->toContain('getLocalIp')
  30. ->toContain('getLocalPort')
  31. ->toContain('isIpV4')
  32. ->toContain('isIpV6');
  33. $udpConnection->close('bye');
  34. if (is_resource($socketClient)) {
  35. fclose($socketClient);
  36. }
  37. });