Updated final tests to pass

pull/1014/head
murgatroid99 10 years ago
parent f2fe1a8002
commit 1b027f5598
  1. 6
      src/php/ext/grpc/server.c
  2. 197
      src/php/tests/unit_tests/SecureEndToEndTest.php

@ -107,8 +107,8 @@ PHP_METHOD(Server, __construct) {
(wrapped_grpc_server *)zend_object_store_get_object(getThis() TSRMLS_CC); (wrapped_grpc_server *)zend_object_store_get_object(getThis() TSRMLS_CC);
zval *args_array = NULL; zval *args_array = NULL;
grpc_channel_args args; grpc_channel_args args;
/* "a" == 1 optional array */ /* "|a" == 1 optional array */
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", &args_array) == if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|a", &args_array) ==
FAILURE) { FAILURE) {
zend_throw_exception(spl_ce_InvalidArgumentException, zend_throw_exception(spl_ce_InvalidArgumentException,
"Server expects an array", "Server expects an array",
@ -198,7 +198,7 @@ PHP_METHOD(Server, add_secure_http2_port) {
int addr_len; int addr_len;
zval *creds_obj; zval *creds_obj;
/* "sO" == 1 string, 1 object */ /* "sO" == 1 string, 1 object */
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &addr, &addr_len, if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sO", &addr, &addr_len,
&creds_obj, grpc_ce_server_credentials) == &creds_obj, grpc_ce_server_credentials) ==
FAILURE) { FAILURE) {
zend_throw_exception( zend_throw_exception(

@ -33,17 +33,16 @@
*/ */
class SecureEndToEndTest extends PHPUnit_Framework_TestCase{ class SecureEndToEndTest extends PHPUnit_Framework_TestCase{
public function setUp() { public function setUp() {
$this->client_queue = new Grpc\CompletionQueue();
$this->server_queue = new Grpc\CompletionQueue();
$credentials = Grpc\Credentials::createSsl( $credentials = Grpc\Credentials::createSsl(
file_get_contents(dirname(__FILE__) . '/../data/ca.pem')); file_get_contents(dirname(__FILE__) . '/../data/ca.pem'));
$server_credentials = Grpc\ServerCredentials::createSsl( $server_credentials = Grpc\ServerCredentials::createSsl(
null, null,
file_get_contents(dirname(__FILE__) . '/../data/server1.key'), file_get_contents(dirname(__FILE__) . '/../data/server1.key'),
file_get_contents(dirname(__FILE__) . '/../data/server1.pem')); file_get_contents(dirname(__FILE__) . '/../data/server1.pem'));
$this->server = new Grpc\Server($this->server_queue); $this->server = new Grpc\Server();
$port = $this->server->add_secure_http2_port('0.0.0.0:0', $port = $this->server->add_secure_http2_port('0.0.0.0:0',
$server_credentials); $server_credentials);
$this->server->start();
$this->channel = new Grpc\Channel( $this->channel = new Grpc\Channel(
'localhost:' . $port, 'localhost:' . $port,
[ [
@ -55,70 +54,58 @@ class SecureEndToEndTest extends PHPUnit_Framework_TestCase{
public function tearDown() { public function tearDown() {
unset($this->channel); unset($this->channel);
unset($this->server); unset($this->server);
unset($this->client_queue);
unset($this->server_queue);
} }
public function testSimpleRequestBody() { public function testSimpleRequestBody() {
$this->server->start();
$deadline = Grpc\Timeval::inf_future(); $deadline = Grpc\Timeval::inf_future();
$status_text = 'xyz'; $status_text = 'xyz';
$call = new Grpc\Call($this->channel, $call = new Grpc\Call($this->channel,
'dummy_method', 'dummy_method',
$deadline); $deadline);
$tag = 1;
$call->invoke($this->client_queue, $tag, $tag); $event = $call->start_batch([
$server_tag = 2; Grpc\OP_SEND_INITIAL_METADATA => [],
Grpc\OP_SEND_CLOSE_FROM_CLIENT => true
$call->writes_done($tag); ]);
$event = $this->client_queue->next($deadline);
$this->assertNotNull($event); $this->assertTrue($event->send_metadata);
$this->assertSame(Grpc\FINISH_ACCEPTED, $event->type); $this->assertTrue($event->send_close);
$this->assertSame(Grpc\OP_OK, $event->data);
$event = $this->server->request_call();
// check that a server rpc new was received $this->assertSame('dummy_method', $event->method);
$this->server->request_call($server_tag); $this->assertSame([], $event->metadata);
$event = $this->server_queue->next($deadline);
$this->assertNotNull($event);
$this->assertSame(Grpc\SERVER_RPC_NEW, $event->type);
$server_call = $event->call; $server_call = $event->call;
$this->assertNotNull($server_call);
$server_call->server_accept($this->server_queue, $server_tag); $event = $server_call->start_batch([
Grpc\OP_SEND_INITIAL_METADATA => [],
$server_call->server_end_initial_metadata(); Grpc\OP_SEND_STATUS_FROM_SERVER => [
'metadata' => [],
// the server sends the status 'code' => Grpc\STATUS_OK,
$server_call->start_write_status(Grpc\STATUS_OK, $status_text, $server_tag); 'details' => $status_text
$event = $this->server_queue->next($deadline); ],
$this->assertNotNull($event); Grpc\OP_RECV_CLOSE_ON_SERVER => true
$this->assertSame(Grpc\FINISH_ACCEPTED, $event->type); ]);
$this->assertSame(Grpc\OP_OK, $event->data);
$this->assertTrue($event->send_metadata);
// the client gets CLIENT_METADATA_READ $this->assertTrue($event->send_status);
$event = $this->client_queue->next($deadline); $this->assertFalse($event->cancelled);
$this->assertNotNull($event);
$this->assertSame(Grpc\CLIENT_METADATA_READ, $event->type); $event = $call->start_batch([
Grpc\OP_RECV_INITIAL_METADATA => true,
// the client gets FINISHED Grpc\OP_RECV_STATUS_ON_CLIENT => true
$event = $this->client_queue->next($deadline); ]);
$this->assertNotNull($event);
$this->assertSame(Grpc\FINISHED, $event->type); $this->assertSame([], $event->metadata);
$status = $event->data; $status = $event->status;
$this->assertSame([], $status->metadata);
$this->assertSame(Grpc\STATUS_OK, $status->code); $this->assertSame(Grpc\STATUS_OK, $status->code);
$this->assertSame($status_text, $status->details); $this->assertSame($status_text, $status->details);
// and the server gets FINISHED
$event = $this->server_queue->next($deadline);
$this->assertNotNull($event);
$this->assertSame(Grpc\FINISHED, $event->type);
$status = $event->data;
unset($call); unset($call);
unset($server_call); unset($server_call);
} }
public function testClientServerFullRequestResponse() { public function testClientServerFullRequestResponse() {
$this->server->start();
$deadline = Grpc\Timeval::inf_future(); $deadline = Grpc\Timeval::inf_future();
$req_text = 'client_server_full_request_response'; $req_text = 'client_server_full_request_response';
$reply_text = 'reply:client_server_full_request_response'; $reply_text = 'reply:client_server_full_request_response';
@ -127,78 +114,52 @@ class SecureEndToEndTest extends PHPUnit_Framework_TestCase{
$call = new Grpc\Call($this->channel, $call = new Grpc\Call($this->channel,
'dummy_method', 'dummy_method',
$deadline); $deadline);
$tag = 1;
$call->invoke($this->client_queue, $tag, $tag); $event = $call->start_batch([
Grpc\OP_SEND_INITIAL_METADATA => [],
$server_tag = 2; Grpc\OP_SEND_CLOSE_FROM_CLIENT => true,
Grpc\OP_SEND_MESSAGE => $req_text
// the client writes ]);
$call->start_write($req_text, $tag);
$event = $this->client_queue->next($deadline); $this->assertTrue($event->send_metadata);
$this->assertNotNull($event); $this->assertTrue($event->send_close);
$this->assertSame(Grpc\WRITE_ACCEPTED, $event->type); $this->assertTrue($event->send_message);
// check that a server rpc new was received $event = $this->server->request_call();
$this->server->request_call($server_tag); $this->assertSame('dummy_method', $event->method);
$event = $this->server_queue->next($deadline);
$this->assertNotNull($event);
$this->assertSame(Grpc\SERVER_RPC_NEW, $event->type);
$server_call = $event->call; $server_call = $event->call;
$this->assertNotNull($server_call);
$server_call->server_accept($this->server_queue, $server_tag); $event = $server_call->start_batch([
Grpc\OP_SEND_INITIAL_METADATA => [],
$server_call->server_end_initial_metadata(); Grpc\OP_SEND_MESSAGE => $reply_text,
Grpc\OP_SEND_STATUS_FROM_SERVER => [
// start the server read 'metadata' => [],
$server_call->start_read($server_tag); 'code' => Grpc\STATUS_OK,
$event = $this->server_queue->next($deadline); 'details' => $status_text
$this->assertNotNull($event); ],
$this->assertSame(Grpc\READ, $event->type); Grpc\OP_RECV_MESSAGE => true,
$this->assertSame($req_text, $event->data); Grpc\OP_RECV_CLOSE_ON_SERVER => true,
]);
// the server replies
$server_call->start_write($reply_text, $server_tag); $this->assertTrue($event->send_metadata);
$event = $this->server_queue->next($deadline); $this->assertTrue($event->send_status);
$this->assertNotNull($event); $this->assertTrue($event->send_message);
$this->assertSame(Grpc\WRITE_ACCEPTED, $event->type); $this->assertFalse($event->cancelled);
$this->assertSame($req_text, $event->message);
// the client reads the metadata
$event = $this->client_queue->next($deadline); $event = $call->start_batch([
$this->assertNotNull($event); Grpc\OP_RECV_INITIAL_METADATA => true,
$this->assertSame(Grpc\CLIENT_METADATA_READ, $event->type); Grpc\OP_RECV_MESSAGE => true,
Grpc\OP_RECV_STATUS_ON_CLIENT => true,
// the client reads the reply ]);
$call->start_read($tag);
$event = $this->client_queue->next($deadline); $this->assertSame([], $event->metadata);
$this->assertNotNull($event); $this->assertSame($reply_text, $event->message);
$this->assertSame(Grpc\READ, $event->type); $status = $event->status;
$this->assertSame($reply_text, $event->data); $this->assertSame([], $status->metadata);
// the client sends writes done
$call->writes_done($tag);
$event = $this->client_queue->next($deadline);
$this->assertSame(Grpc\FINISH_ACCEPTED, $event->type);
$this->assertSame(Grpc\OP_OK, $event->data);
// the server sends the status
$server_call->start_write_status(GRPC\STATUS_OK, $status_text, $server_tag);
$event = $this->server_queue->next($deadline);
$this->assertSame(Grpc\FINISH_ACCEPTED, $event->type);
$this->assertSame(Grpc\OP_OK, $event->data);
// the client gets FINISHED
$event = $this->client_queue->next($deadline);
$this->assertNotNull($event);
$this->assertSame(Grpc\FINISHED, $event->type);
$status = $event->data;
$this->assertSame(Grpc\STATUS_OK, $status->code); $this->assertSame(Grpc\STATUS_OK, $status->code);
$this->assertSame($status_text, $status->details); $this->assertSame($status_text, $status->details);
// and the server gets FINISHED
$event = $this->server_queue->next($deadline);
$this->assertNotNull($event);
$this->assertSame(Grpc\FINISHED, $event->type);
unset($call); unset($call);
unset($server_call); unset($server_call);
} }

Loading…
Cancel
Save