The C based gRPC (C++, Python, Ruby, Objective-C, PHP, C#)
https://grpc.io/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.2 KiB
68 lines
2.2 KiB
<?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->assertSame(1, $response->getQuotient()); |
|
$this->assertSame(3, $response->getRemainder()); |
|
$this->assertSame(\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->assertSame([1, 1, 2, 3, 5, 8, 13], $values); |
|
$status = $call->getStatus(); |
|
$this->assertSame(\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->assertSame(21, $response->getNum()); |
|
$this->assertSame(\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->assertSame($i, $response->getQuotient()); |
|
$this->assertSame(1, $response->getRemainder()); |
|
} |
|
$call->writesDone(); |
|
$status = $call->getStatus(); |
|
$this->assertSame(\Grpc\STATUS_OK, $status->code); |
|
} |
|
} |