1<?php 2/* 3 * 4 * Copyright 2015 gRPC authors. 5 * 6 * Licensed under the Apache License, Version 2.0 (the "License"); 7 * you may not use this file except in compliance with the License. 8 * You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 * 18 */ 19 20class CallCredentialsTest extends PHPUnit_Framework_TestCase 21{ 22 public function setUp() 23 { 24 $this->credentials = Grpc\ChannelCredentials::createSsl( 25 file_get_contents(dirname(__FILE__).'/../data/ca.pem')); 26 $this->call_credentials = Grpc\CallCredentials::createFromPlugin( 27 [$this, 'callbackFunc']); 28 $this->credentials = Grpc\ChannelCredentials::createComposite( 29 $this->credentials, 30 $this->call_credentials 31 ); 32 $server_credentials = Grpc\ServerCredentials::createSsl( 33 null, 34 file_get_contents(dirname(__FILE__).'/../data/server1.key'), 35 file_get_contents(dirname(__FILE__).'/../data/server1.pem')); 36 $this->server = new Grpc\Server(); 37 $this->port = $this->server->addSecureHttp2Port('0.0.0.0:0', 38 $server_credentials); 39 $this->server->start(); 40 $this->host_override = 'foo.test.google.fr'; 41 $this->channel = new Grpc\Channel( 42 'localhost:'.$this->port, 43 [ 44 'force_new' => true, 45 'grpc.ssl_target_name_override' => $this->host_override, 46 'grpc.default_authority' => $this->host_override, 47 'credentials' => $this->credentials, 48 ] 49 ); 50 } 51 52 public function tearDown() 53 { 54 unset($this->channel); 55 unset($this->server); 56 } 57 58 public function callbackFunc($context) 59 { 60 $this->assertTrue(is_string($context->service_url)); 61 $this->assertTrue(is_string($context->method_name)); 62 63 return ['k1' => ['v1'], 'k2' => ['v2']]; 64 } 65 66 public function testCreateFromPlugin() 67 { 68 $deadline = Grpc\Timeval::infFuture(); 69 $status_text = 'xyz'; 70 $call = new Grpc\Call($this->channel, 71 '/abc/dummy_method', 72 $deadline, 73 $this->host_override); 74 75 $event = $call->startBatch([ 76 Grpc\OP_SEND_INITIAL_METADATA => [], 77 Grpc\OP_SEND_CLOSE_FROM_CLIENT => true, 78 ]); 79 80 $this->assertTrue($event->send_metadata); 81 $this->assertTrue($event->send_close); 82 83 $event = $this->server->requestCall(); 84 85 $this->assertTrue(is_array($event->metadata)); 86 $metadata = $event->metadata; 87 $this->assertTrue(array_key_exists('k1', $metadata)); 88 $this->assertTrue(array_key_exists('k2', $metadata)); 89 $this->assertSame($metadata['k1'], ['v1']); 90 $this->assertSame($metadata['k2'], ['v2']); 91 92 $this->assertSame('/abc/dummy_method', $event->method); 93 $server_call = $event->call; 94 95 $event = $server_call->startBatch([ 96 Grpc\OP_SEND_INITIAL_METADATA => [], 97 Grpc\OP_SEND_STATUS_FROM_SERVER => [ 98 'metadata' => [], 99 'code' => Grpc\STATUS_OK, 100 'details' => $status_text, 101 ], 102 Grpc\OP_RECV_CLOSE_ON_SERVER => true, 103 ]); 104 105 $this->assertTrue($event->send_metadata); 106 $this->assertTrue($event->send_status); 107 $this->assertFalse($event->cancelled); 108 109 $event = $call->startBatch([ 110 Grpc\OP_RECV_INITIAL_METADATA => true, 111 Grpc\OP_RECV_STATUS_ON_CLIENT => true, 112 ]); 113 114 $this->assertSame([], $event->metadata); 115 $status = $event->status; 116 $this->assertSame([], $status->metadata); 117 $this->assertSame(Grpc\STATUS_OK, $status->code); 118 $this->assertSame($status_text, $status->details); 119 120 unset($call); 121 unset($server_call); 122 } 123 124 public function callbackFunc2($context) 125 { 126 return []; 127 } 128 129 public function testCreateComposite() 130 { 131 $call_credentials2 = Grpc\CallCredentials::createFromPlugin( 132 [$this, 'callbackFunc2']); 133 $call_credentials3 = Grpc\CallCredentials::createComposite( 134 $this->call_credentials, 135 $call_credentials2 136 ); 137 $this->assertSame('Grpc\CallCredentials', 138 get_class($call_credentials3)); 139 } 140 141 /** 142 * @expectedException InvalidArgumentException 143 */ 144 public function testCreateFromPluginInvalidParam() 145 { 146 $call_credentials = Grpc\CallCredentials::createFromPlugin( 147 'callbackFunc' 148 ); 149 } 150 151 /** 152 * @expectedException InvalidArgumentException 153 */ 154 public function testCreateCompositeInvalidParam() 155 { 156 $call_credentials3 = Grpc\CallCredentials::createComposite( 157 $this->call_credentials, 158 $this->credentials 159 ); 160 } 161} 162