<?php
|
/*
|
*
|
* Copyright 2015 gRPC authors.
|
*
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
* you may not use this file except in compliance with the License.
|
* You may obtain a copy of the License at
|
*
|
* http://www.apache.org/licenses/LICENSE-2.0
|
*
|
* Unless required by applicable law or agreed to in writing, software
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* See the License for the specific language governing permissions and
|
* limitations under the License.
|
*
|
*/
|
require_once realpath(dirname(__FILE__).'/../../vendor/autoload.php');
|
|
// The following includes are needed when using protobuf 3.1.0
|
// and will suppress warnings when using protobuf 3.2.0+
|
@include_once dirname(__FILE__).'/math.pb.php';
|
@include_once dirname(__FILE__).'/math_grpc_pb.php';
|
|
abstract class AbstractGeneratedCodeTest extends PHPUnit_Framework_TestCase
|
{
|
/**
|
* These tests require that a server exporting the math service must be
|
* running on $GRPC_TEST_HOST.
|
*/
|
protected static $client;
|
|
public function testWaitForNotReady()
|
{
|
$this->assertFalse(self::$client->waitForReady(1));
|
}
|
|
public function testWaitForReady()
|
{
|
$this->assertTrue(self::$client->waitForReady(250000));
|
}
|
|
public function testAlreadyReady()
|
{
|
$this->assertTrue(self::$client->waitForReady(250000));
|
$this->assertTrue(self::$client->waitForReady(100));
|
}
|
|
public function testGetTarget()
|
{
|
$this->assertTrue(is_string(self::$client->getTarget()));
|
}
|
|
/**
|
* @expectedException InvalidArgumentException
|
*/
|
public function testClose()
|
{
|
self::$client->close();
|
$div_arg = new Math\DivArgs();
|
$call = self::$client->Div($div_arg);
|
}
|
|
/**
|
* @expectedException InvalidArgumentException
|
*/
|
public function testInvalidMetadata()
|
{
|
$div_arg = new Math\DivArgs();
|
$call = self::$client->Div($div_arg, [' ' => 'abc123']);
|
}
|
|
public function testGetCallMetadata()
|
{
|
$div_arg = new Math\DivArgs();
|
$call = self::$client->Div($div_arg);
|
$this->assertTrue(is_array($call->getMetadata()));
|
}
|
|
public function testTimeout()
|
{
|
$div_arg = new Math\DivArgs();
|
$call = self::$client->Div($div_arg, [], ['timeout' => 1]);
|
list($response, $status) = $call->wait();
|
$this->assertSame(\Grpc\STATUS_DEADLINE_EXCEEDED, $status->code);
|
}
|
|
public function testCancel()
|
{
|
$div_arg = new Math\DivArgs();
|
$call = self::$client->Div($div_arg);
|
$call->cancel();
|
list($response, $status) = $call->wait();
|
$this->assertSame(\Grpc\STATUS_CANCELLED, $status->code);
|
}
|
|
public function testCallCredentialsCallback()
|
{
|
$div_arg = new Math\DivArgs();
|
$call = self::$client->Div($div_arg, array(), array(
|
'call_credentials_callback' => function ($context) {
|
return array();
|
},
|
));
|
$call->cancel();
|
list($response, $status) = $call->wait();
|
$this->assertSame(\Grpc\STATUS_CANCELLED, $status->code);
|
}
|
|
public function testCallCredentialsCallback2()
|
{
|
$div_arg = new Math\DivArgs();
|
$call = self::$client->Div($div_arg);
|
$call_credentials = Grpc\CallCredentials::createFromPlugin(
|
function ($context) {
|
return array();
|
}
|
);
|
$call->setCallCredentials($call_credentials);
|
$call->cancel();
|
list($response, $status) = $call->wait();
|
$this->assertSame(\Grpc\STATUS_CANCELLED, $status->code);
|
}
|
|
/**
|
* @expectedException InvalidArgumentException
|
*/
|
public function testInvalidMethodName()
|
{
|
$invalid_client = new DummyInvalidClient('host', [
|
'credentials' => Grpc\ChannelCredentials::createInsecure(),
|
]);
|
$div_arg = new Math\DivArgs();
|
$invalid_client->InvalidUnaryCall($div_arg);
|
}
|
|
/**
|
* @expectedException Exception
|
*/
|
public function testMissingCredentials()
|
{
|
$invalid_client = new DummyInvalidClient('host', [
|
]);
|
}
|
|
public function testPrimaryUserAgentString()
|
{
|
$invalid_client = new DummyInvalidClient('host', [
|
'credentials' => Grpc\ChannelCredentials::createInsecure(),
|
'grpc.primary_user_agent' => 'testUserAgent',
|
]);
|
}
|
|
public function testWriteFlags()
|
{
|
$div_arg = new Math\DivArgs();
|
$div_arg->setDividend(7);
|
$div_arg->setDivisor(4);
|
$call = self::$client->Div($div_arg, [],
|
['flags' => Grpc\WRITE_NO_COMPRESS]);
|
$this->assertTrue(is_string($call->getPeer()));
|
list($response, $status) = $call->wait();
|
$this->assertSame(1, $response->getQuotient());
|
$this->assertSame(3, $response->getRemainder());
|
$this->assertSame(\Grpc\STATUS_OK, $status->code);
|
}
|
|
public function testWriteFlagsServerStreaming()
|
{
|
$fib_arg = new Math\FibArgs();
|
$fib_arg->setLimit(7);
|
$call = self::$client->Fib($fib_arg, [],
|
['flags' => Grpc\WRITE_NO_COMPRESS]);
|
$result_array = iterator_to_array($call->responses());
|
$status = $call->getStatus();
|
$this->assertSame(\Grpc\STATUS_OK, $status->code);
|
}
|
|
public function testWriteFlagsClientStreaming()
|
{
|
$call = self::$client->Sum();
|
$num = new Math\Num();
|
$num->setNum(1);
|
$call->write($num, ['flags' => Grpc\WRITE_NO_COMPRESS]);
|
list($response, $status) = $call->wait();
|
$this->assertSame(\Grpc\STATUS_OK, $status->code);
|
}
|
|
public function testWriteFlagsBidiStreaming()
|
{
|
$call = self::$client->DivMany();
|
$div_arg = new Math\DivArgs();
|
$div_arg->setDividend(7);
|
$div_arg->setDivisor(4);
|
$call->write($div_arg, ['flags' => Grpc\WRITE_NO_COMPRESS]);
|
$response = $call->read();
|
$call->writesDone();
|
$status = $call->getStatus();
|
$this->assertSame(\Grpc\STATUS_OK, $status->code);
|
}
|
|
public function testSimpleRequest()
|
{
|
$div_arg = new Math\DivArgs();
|
$div_arg->setDividend(7);
|
$div_arg->setDivisor(4);
|
$call = self::$client->Div($div_arg);
|
$this->assertTrue(is_string($call->getPeer()));
|
list($response, $status) = $call->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);
|
$this->assertTrue(is_string($call->getPeer()));
|
$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()
|
{
|
$call = self::$client->Sum();
|
$this->assertTrue(is_string($call->getPeer()));
|
for ($i = 0; $i < 7; ++$i) {
|
$num = new Math\Num();
|
$num->setNum($i);
|
$call->write($num);
|
}
|
list($response, $status) = $call->wait();
|
$this->assertSame(21, $response->getNum());
|
$this->assertSame(\Grpc\STATUS_OK, $status->code);
|
}
|
|
public function testBidiStreaming()
|
{
|
$call = self::$client->DivMany();
|
$this->assertTrue(is_string($call->getPeer()));
|
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);
|
}
|
}
|
|
class DummyInvalidClient extends \Grpc\BaseStub
|
{
|
public function InvalidUnaryCall(\Math\DivArgs $argument,
|
$metadata = [],
|
$options = [])
|
{
|
return $this->_simpleRequest('invalidMethodName',
|
$argument,
|
function () {},
|
$metadata,
|
$options);
|
}
|
}
|