| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- <?php
- use Symfony\Component\Process\PhpProcess;
- $serverCode = <<<PHP
- <?php
- use Workerman\Connection\TcpConnection;
- use Workerman\Protocols\Http\Request;
- use Workerman\Worker;
- require_once __DIR__ . '/vendor/autoload.php';
- if (!defined('STDIN')) define('STDIN', fopen('php://stdin', 'r'));
- if (!defined('STDOUT')) define('STDOUT', fopen('php://stdout', 'w'));
- if (!defined('STDERR')) define('STDERR', fopen('php://stderr', 'w'));
- \$worker = new Worker("websocket://127.0.0.1:8081");
- %s
- Worker::\$pidFile = __DIR__ . '/WebsocketServer.pid';
- Worker::\$command = 'start';
- Worker::runAll();
- PHP;
- $clientCode = <<<PHP
- <?php
- use Workerman\Connection\AsyncTcpConnection;
- use Workerman\Worker;
- require_once __DIR__ . '/vendor/autoload.php';
- if (!defined('STDIN')) define('STDIN', fopen('php://stdin', 'r'));
- if (!defined('STDOUT')) define('STDOUT', fopen('php://stdout', 'w'));
- if (!defined('STDERR')) define('STDERR', fopen('php://stderr', 'w'));
- \$worker = new Worker();
- \$worker->onWorkerStart = function(\$worker){
- \$con = new AsyncTcpConnection('ws://127.0.0.1:8081');
- %s
- \$con->connect();
- };
- Worker::\$pidFile = __DIR__ . '/WebsocketClient.pid';
- Worker::\$command = 'start';
- Worker::runAll();
- PHP;
- it('tests websocket connection', function () use ($serverCode, $clientCode) {
- $serverProcess = new PhpProcess(sprintf($serverCode, <<<PHP
- \$worker->onWebSocketConnect = function () {
- echo "connected";
- };
- \$worker->onMessage = function () {};
- PHP
- ));
- $serverProcess->start();
- sleep(1);
- $clientProcess = new PhpProcess(sprintf($clientCode, <<<PHP
- \$con->onWebSocketConnect = function(AsyncTcpConnection \$con) {
- \$con->send('connect');
- };
- PHP
- ));
- $clientProcess->start();
- sleep(1);
- expect(getNonFrameOutput($serverProcess->getOutput()))->toBe('connected')
- ->and(getNonFrameOutput($clientProcess->getOutput()))->toBe('');
- $serverProcess->stop();
- $clientProcess->stop();
- });
- it('tests server and client sending and receiving messages', function () use ($serverCode, $clientCode) {
- $serverProcess = new PhpProcess(sprintf($serverCode, <<<PHP
- \$worker->onMessage = function (TcpConnection \$connection, \$data) {
- echo \$data;
- \$connection->send('Hi');
- };
- PHP
- ));
- $serverProcess->start();
- sleep(1);
- $clientProcess = new PhpProcess(sprintf($clientCode, <<<PHP
- \$con->onWebSocketConnect = function(AsyncTcpConnection \$con) {
- \$con->send('Hello Chance');
- };
- \$con->onMessage = function(\$con, \$data) {
- echo \$data;
- };
- PHP
- ));
- $clientProcess->start();
- sleep(1);
- expect(getNonFrameOutput($serverProcess->getOutput()))->toBe('Hello Chance')
- ->and(getNonFrameOutput($clientProcess->getOutput()))->toBe('Hi');
- $serverProcess->stop();
- $clientProcess->stop();
- });
- it('tests server close connection', function () use ($serverCode, $clientCode) {
- $serverProcess = new PhpProcess(sprintf($serverCode, <<<PHP
- \$worker->onWebSocketConnect = function (TcpConnection \$connection) {
- echo 'close connection';
- \$connection->close();
- };
- \$worker->onMessage = function () {};
- PHP
- ));
- $serverProcess->start();
- sleep(1);
- $clientProcess = new PhpProcess(sprintf($clientCode, <<<PHP
- \$con->onWebSocketConnect = function(AsyncTcpConnection \$con) {
- \$con->send('connect');
- };
- \$con->onClose = function () {
- echo 'closed';
- };
- PHP
- ));
- $clientProcess->start();
- sleep(1);
- expect(getNonFrameOutput($serverProcess->getOutput()))->toBe('close connection')
- ->and(getNonFrameOutput($clientProcess->getOutput()))->toBe('closed');
- $serverProcess->stop();
- $clientProcess->stop();
- });
- it('tests client close connection', function () use ($serverCode, $clientCode) {
- $serverProcess = new PhpProcess(sprintf($serverCode, <<<PHP
- \$worker->onMessage = function () {};
- \$worker->onClose = function () {
- echo 'closed';
- };
- PHP
- ));
- $serverProcess->start();
- sleep(1);
- $clientProcess = new PhpProcess(sprintf($clientCode, <<<PHP
- \$con->onWebSocketConnect = function(AsyncTcpConnection \$con) {
- \$con->send('connect');
- echo 'close connection';
- \$con->close();
- };
- PHP
- ));
- $clientProcess->start();
- sleep(1);
- expect(getNonFrameOutput($serverProcess->getOutput()))->toBe('closed')
- ->and(getNonFrameOutput($clientProcess->getOutput()))->toBe('close connection');
- $serverProcess->stop();
- $clientProcess->stop();
- });
|