<?php require_once realpath(dirname(__FILE__) . '/../../lib/autoload.php'); require 'DrSlump/Protobuf.php'; \DrSlump\Protobuf::autoload(); require 'math.php'; class GeneratedCodeTest extends PHPUnit_Framework_TestCase { /* These tests require that a server exporting the math service must be * running on $GRPC_TEST_HOST */ protected static $client; protected static $timeout; public static function setUpBeforeClass() { self::$client = new math\MathClient(getenv('GRPC_TEST_HOST')); } public function testSimpleRequest() { $div_arg = new math\DivArgs(); $div_arg->setDividend(7); $div_arg->setDivisor(4); list($response, $status) = self::$client->Div($div_arg)->wait(); $this->assertEquals(1, $response->getQuotient()); $this->assertEquals(3, $response->getRemainder()); $this->assertEquals(\Grpc\STATUS_OK, $status->code); } public function testServerStreaming() { $fib_arg = new math\FibArgs(); $fib_arg->setLimit(7); $call = self::$client->Fib($fib_arg); $result_array = iterator_to_array($call->responses()); $extract_num = function($num){ return $num->getNum(); }; $values = array_map($extract_num, $result_array); $this->assertEquals([1, 1, 2, 3, 5, 8, 13], $values); $status = $call->getStatus(); $this->assertEquals(\Grpc\STATUS_OK, $status->code); } public function testClientStreaming() { $num_iter = function() { for ($i = 0; $i < 7; $i++) { $num = new math\Num(); $num->setNum($i); yield $num; } }; $call = self::$client->Sum($num_iter()); list($response, $status) = $call->wait(); $this->assertEquals(21, $response->getNum()); $this->assertEquals(\Grpc\STATUS_OK, $status->code); } public function testBidiStreaming() { $call = self::$client->DivMany(); for ($i = 0; $i < 7; $i++) { $div_arg = new math\DivArgs(); $div_arg->setDividend(2 * $i + 1); $div_arg->setDivisor(2); $call->write($div_arg); $response = $call->read(); $this->assertEquals($i, $response->getQuotient()); $this->assertEquals(1, $response->getRemainder()); } $call->writesDone(); $status = $call->getStatus(); $this->assertEquals(\Grpc\STATUS_OK, $status->code); } }