[THRIFT-5757] Unit tests for php lib
Client: php
Patch: Volodymyr Panivko

This closes #2951
diff --git a/test/php/TestServer.php b/test/php/TestServer.php
new file mode 100644
index 0000000..3b01752
--- /dev/null
+++ b/test/php/TestServer.php
@@ -0,0 +1,87 @@
+<?php
+
+error_reporting(E_ALL);
+
+require_once __DIR__ . '/../../vendor/autoload.php';
+
+$opts = getopt(
+    'h::',
+    [
+        'port::',
+        'domain-socket::',
+        'pipe::',
+        'server-type::',
+        'transport::',
+        'protocol::',
+        'multiplex::',
+        'abstract-namespace::',
+        'ssl::',
+        'zlib::',
+        'processor-events::',
+        'workers::',
+    ]
+);
+if (isset($opts['h'])) {
+    echo <<<HELP
+      -h | --help                  produce help message
+      --port=arg (9090)            Port number to listen
+      --domain-socket=arg          Unix Domain Socket (e.g. /tmp/ThriftTest.thrift)
+      --pipe=arg                   Windows Named Pipe (e.g. MyThriftPipe)
+      --server-type=arg (simple)   type of server, "simple", "thread-pool",
+                                   "threaded", or "nonblocking"
+      --transport=arg (buffered)   transport: buffered, framed, http, anonpipe, zlib
+      --protocol=arg (binary)      protocol: binary, compact, header, json
+      --multiplex                  Add TMultiplexedProtocol service name "ThriftTest"
+      --abstract-namespace         Create the domain socket in the Abstract Namespace
+                                   (no connection with filesystem pathnames)
+      --ssl                        Encrypted Transport using SSL
+      --zlib                       Wrapped Transport using Zlib
+      --processor-events           processor-events
+      -n=arg | --workers=arg (=4)  Number of thread pools workers. Only valid for
+                                   thread-pool server type
+HELP;
+    exit(0);
+}
+
+$port = $opts['port'] ?? 9090;
+$transport = $opts['transport'] ?? 'buffered';
+
+
+$loader = new Thrift\ClassLoader\ThriftClassLoader();
+$loader->registerDefinition('ThriftTest', __DIR__ . '/../../lib/php/test/Resources/packages/phpcm');
+$loader->register();
+
+$sslOptions = \stream_context_create(
+    [
+        'ssl' => [
+            'verify_peer' => false,
+            'verify_peer_name' => false,
+        ],
+    ]
+);
+
+require_once __DIR__ . '/Handler.php';
+
+switch ($transport) {
+    case 'framed':
+        $serverTransportFactory = new \Thrift\Factory\TFramedTransportFactory();
+        break;
+    default:
+        $serverTransportFactory = new \Thrift\Factory\TTransportFactory();
+}
+
+$serverTransport = new \Thrift\Server\TServerSocket('localhost', $port);
+$handler = new Handler();
+$processor = new ThriftTest\ThriftTestProcessor($handler);
+
+$server = new \Thrift\Server\TSimpleServer(
+    $processor,
+    $serverTransport,
+    $serverTransportFactory,
+    $serverTransportFactory,
+    new \Thrift\Factory\TBinaryProtocolFactory(),
+    new \Thrift\Factory\TBinaryProtocolFactory()
+);
+
+echo "Starting the Test server...\n";
+$server->serve();