|  | @@ -88,2213 +88,3 @@ unset($now);
 | 
	
		
			
				|  |  |  unset($deadline);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  $channel->close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test InvalidConstructorWithNull
 | 
	
		
			
				|  |  | -try {
 | 
	
		
			
				|  |  | -  $channel = new Grpc\Channel();
 | 
	
		
			
				|  |  | -  assert($channel == NULL);
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -catch (\Exception $e) {
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test InvalidConstructorWith
 | 
	
		
			
				|  |  | -try {
 | 
	
		
			
				|  |  | -  $channel = new Grpc\Channel('localhost:0', 'invalid');
 | 
	
		
			
				|  |  | -  assert($channel == NULL);
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -catch (\Exception $e) {
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test InvalideCredentials
 | 
	
		
			
				|  |  | -try {
 | 
	
		
			
				|  |  | -  $channel = new Grpc\Channel('localhost:0', ['credentials' => new Grpc\Timeval(100)]);
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -catch (\Exception $e) {
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test InvalidOptionsArrray
 | 
	
		
			
				|  |  | -try {
 | 
	
		
			
				|  |  | -  $channel = new Grpc\Channel('localhost:0', ['abc' => []]);
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -catch (\Exception $e) {
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test InvalidGetConnectivityStateWithArray
 | 
	
		
			
				|  |  | -$channel = new Grpc\Channel('localhost:0', ['credentials' => Grpc\ChannelCredentials::createInsecure()]);
 | 
	
		
			
				|  |  | -try {
 | 
	
		
			
				|  |  | -  $channel->getConnectivityState([]);
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -catch (\Exception $e) {
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test InvalidWatchConnectivityState
 | 
	
		
			
				|  |  | -try {
 | 
	
		
			
				|  |  | -  $channel->watchConnectivityState([]);
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -catch (\Exception $e) {
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test InvalidWatchConnectivityState2
 | 
	
		
			
				|  |  | -try {
 | 
	
		
			
				|  |  | -  $channel->watchConnectivityState(1, 'hi');
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -catch (\Exception $e) {
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel->close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test PersistentChannelSameHost
 | 
	
		
			
				|  |  | -$channel1 = new Grpc\Channel('localhost:1', []);
 | 
	
		
			
				|  |  | -$channel2 = new Grpc\Channel('localhost:1', []);
 | 
	
		
			
				|  |  | -$state = $channel1->getConnectivityState();
 | 
	
		
			
				|  |  | -assert(GRPC\CHANNEL_IDLE == $state);
 | 
	
		
			
				|  |  | -$state = $channel2->getConnectivityState();
 | 
	
		
			
				|  |  | -assert(GRPC\CHANNEL_IDLE == $state);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$state = $channel1->getConnectivityState(true);
 | 
	
		
			
				|  |  | -waitUntilNotIdle($channel1);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$state = $channel1->getConnectivityState();
 | 
	
		
			
				|  |  | -assertConnecting($state);
 | 
	
		
			
				|  |  | -$state = $channel2->getConnectivityState();
 | 
	
		
			
				|  |  | -assertConnecting($state);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel1->close();
 | 
	
		
			
				|  |  | -$channel2->close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test PersistentChannelDifferentHost
 | 
	
		
			
				|  |  | -$channel1 = new Grpc\Channel('localhost:1', ["grpc_target_persist_bound" => 3,]);
 | 
	
		
			
				|  |  | -$channel2 = new Grpc\Channel('localhost:2', []);
 | 
	
		
			
				|  |  | -$state = $channel1->getConnectivityState();
 | 
	
		
			
				|  |  | -assert(GRPC\CHANNEL_IDLE == $state);
 | 
	
		
			
				|  |  | -$state = $channel2->getConnectivityState();
 | 
	
		
			
				|  |  | -assert(GRPC\CHANNEL_IDLE == $state);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$state = $channel1->getConnectivityState(true);
 | 
	
		
			
				|  |  | -waitUntilNotIdle($channel1);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$state = $channel1->getConnectivityState();
 | 
	
		
			
				|  |  | -assertConnecting($state);
 | 
	
		
			
				|  |  | -$state = $channel2->getConnectivityState();
 | 
	
		
			
				|  |  | -assert(GRPC\CHANNEL_IDLE == $state);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel1->close();
 | 
	
		
			
				|  |  | -$channel2->close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test PersistentChannelSameArgs
 | 
	
		
			
				|  |  | -$channel1 = new Grpc\Channel('localhost:1', [
 | 
	
		
			
				|  |  | -  "grpc_target_persist_bound" => 3,
 | 
	
		
			
				|  |  | -  "abc" => "def",
 | 
	
		
			
				|  |  | -  ]);
 | 
	
		
			
				|  |  | -$channel2 = new Grpc\Channel('localhost:1', ["abc" => "def"]);
 | 
	
		
			
				|  |  | -$state = $channel1->getConnectivityState(true);
 | 
	
		
			
				|  |  | -waitUntilNotIdle($channel1);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$state = $channel1->getConnectivityState();
 | 
	
		
			
				|  |  | -assertConnecting($state);
 | 
	
		
			
				|  |  | -$state = $channel2->getConnectivityState();
 | 
	
		
			
				|  |  | -assertConnecting($state);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel1->close();
 | 
	
		
			
				|  |  | -$channel2->close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test PersistentChannelDifferentArgs
 | 
	
		
			
				|  |  | -$channel1 = new Grpc\Channel('localhost:1', []);
 | 
	
		
			
				|  |  | -$channel2 = new Grpc\Channel('localhost:1', ["abc" => "def"]);
 | 
	
		
			
				|  |  | -$state = $channel1->getConnectivityState(true);
 | 
	
		
			
				|  |  | -waitUntilNotIdle($channel1);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$state = $channel1->getConnectivityState();
 | 
	
		
			
				|  |  | -assertConnecting($state);
 | 
	
		
			
				|  |  | -$state = $channel2->getConnectivityState();
 | 
	
		
			
				|  |  | -assert(GRPC\CHANNEL_IDLE == $state);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel1->close();
 | 
	
		
			
				|  |  | -$channel2->close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test PersistentChannelSameChannelCredentials
 | 
	
		
			
				|  |  | -$creds1 = Grpc\ChannelCredentials::createSsl();
 | 
	
		
			
				|  |  | -$creds2 = Grpc\ChannelCredentials::createSsl();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel1 = new Grpc\Channel('localhost:1',
 | 
	
		
			
				|  |  | -                                   ["credentials" => $creds1,
 | 
	
		
			
				|  |  | -                                     "grpc_target_persist_bound" => 3,
 | 
	
		
			
				|  |  | -                                     ]);
 | 
	
		
			
				|  |  | -$channel2 = new Grpc\Channel('localhost:1',
 | 
	
		
			
				|  |  | -                                   ["credentials" => $creds2]);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$state = $channel1->getConnectivityState(true);
 | 
	
		
			
				|  |  | -print "state: ".$state."......................";
 | 
	
		
			
				|  |  | -waitUntilNotIdle($channel1);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$state = $channel1->getConnectivityState();
 | 
	
		
			
				|  |  | -assertConnecting($state);
 | 
	
		
			
				|  |  | -$state = $channel2->getConnectivityState();
 | 
	
		
			
				|  |  | -assertConnecting($state);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel1->close();
 | 
	
		
			
				|  |  | -$channel2->close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test PersistentChannelDifferentChannelCredentials
 | 
	
		
			
				|  |  | -$creds1 = Grpc\ChannelCredentials::createSsl();
 | 
	
		
			
				|  |  | -$creds2 = Grpc\ChannelCredentials::createSsl(
 | 
	
		
			
				|  |  | -    file_get_contents(dirname(__FILE__).'/../data/ca.pem'));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel1 = new Grpc\Channel('localhost:1',
 | 
	
		
			
				|  |  | -                                   ["credentials" => $creds1,
 | 
	
		
			
				|  |  | -                                     "grpc_target_persist_bound" => 3,
 | 
	
		
			
				|  |  | -                                     ]);
 | 
	
		
			
				|  |  | -$channel2 = new Grpc\Channel('localhost:1',
 | 
	
		
			
				|  |  | -                                   ["credentials" => $creds2]);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$state = $channel1->getConnectivityState(true);
 | 
	
		
			
				|  |  | -waitUntilNotIdle($channel1);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$state = $channel1->getConnectivityState();
 | 
	
		
			
				|  |  | -assertConnecting($state);
 | 
	
		
			
				|  |  | -$state = $channel2->getConnectivityState();
 | 
	
		
			
				|  |  | -assert(GRPC\CHANNEL_IDLE == $state);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel1->close();
 | 
	
		
			
				|  |  | -$channel2->close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test PersistentChannelSameChannelCredentialsRootCerts
 | 
	
		
			
				|  |  | -$creds1 = Grpc\ChannelCredentials::createSsl(
 | 
	
		
			
				|  |  | -    file_get_contents(dirname(__FILE__).'/../data/ca.pem'));
 | 
	
		
			
				|  |  | -$creds2 = Grpc\ChannelCredentials::createSsl(
 | 
	
		
			
				|  |  | -    file_get_contents(dirname(__FILE__).'/../data/ca.pem'));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel1 = new Grpc\Channel('localhost:1',
 | 
	
		
			
				|  |  | -                                   ["credentials" => $creds1,
 | 
	
		
			
				|  |  | -                                     "grpc_target_persist_bound" => 3,
 | 
	
		
			
				|  |  | -                                     ]);
 | 
	
		
			
				|  |  | -$channel2 = new Grpc\Channel('localhost:1',
 | 
	
		
			
				|  |  | -                                   ["credentials" => $creds2]);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$state = $channel1->getConnectivityState(true);
 | 
	
		
			
				|  |  | -waitUntilNotIdle($channel1);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$state = $channel1->getConnectivityState();
 | 
	
		
			
				|  |  | -assertConnecting($state);
 | 
	
		
			
				|  |  | -$state = $channel2->getConnectivityState();
 | 
	
		
			
				|  |  | -assertConnecting($state);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel1->close();
 | 
	
		
			
				|  |  | -$channel2->close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test PersistentChannelDifferentSecureChannelCredentials
 | 
	
		
			
				|  |  | -$creds1 = Grpc\ChannelCredentials::createSsl();
 | 
	
		
			
				|  |  | -$creds2 = Grpc\ChannelCredentials::createInsecure();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel1 = new Grpc\Channel('localhost:1',
 | 
	
		
			
				|  |  | -                                   ["credentials" => $creds1,
 | 
	
		
			
				|  |  | -                                     "grpc_target_persist_bound" => 3,
 | 
	
		
			
				|  |  | -                                     ]);
 | 
	
		
			
				|  |  | -$channel2 = new Grpc\Channel('localhost:1',
 | 
	
		
			
				|  |  | -                                   ["credentials" => $creds2]);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$state = $channel1->getConnectivityState(true);
 | 
	
		
			
				|  |  | -waitUntilNotIdle($channel1);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$state = $channel1->getConnectivityState();
 | 
	
		
			
				|  |  | -assertConnecting($state);
 | 
	
		
			
				|  |  | -$state = $channel2->getConnectivityState();
 | 
	
		
			
				|  |  | -assert(GRPC\CHANNEL_IDLE == $state);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel1->close();
 | 
	
		
			
				|  |  | -$channel2->close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test PersistentChannelSharedChannelClose1
 | 
	
		
			
				|  |  | -$channel1 = new Grpc\Channel('localhost:1', [
 | 
	
		
			
				|  |  | -    "grpc_target_persist_bound" => 3,
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -$channel2 = new Grpc\Channel('localhost:1', []);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel1->close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$state = $channel2->getConnectivityState();
 | 
	
		
			
				|  |  | -assert(GRPC\CHANNEL_IDLE == $state);
 | 
	
		
			
				|  |  | -$channel2->close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test PersistentChannelSharedChannelClose2
 | 
	
		
			
				|  |  | -$channel1 = new Grpc\Channel('localhost:1', [
 | 
	
		
			
				|  |  | -    "grpc_target_persist_bound" => 3,
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -$channel2 = new Grpc\Channel('localhost:1', []);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel1->close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$state = $channel2->getConnectivityState();
 | 
	
		
			
				|  |  | -assert(GRPC\CHANNEL_IDLE == $state);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -try{
 | 
	
		
			
				|  |  | -  $state = $channel1->getConnectivityState();
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -catch(\Exception $e){
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel2->close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -//Test PersistentChannelCreateAfterClose
 | 
	
		
			
				|  |  | -$channel1 = new Grpc\Channel('localhost:1', [
 | 
	
		
			
				|  |  | -    "grpc_target_persist_bound" => 3,
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel1->close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel2 = new Grpc\Channel('localhost:1', []);
 | 
	
		
			
				|  |  | -$state = $channel2->getConnectivityState();
 | 
	
		
			
				|  |  | -assert(GRPC\CHANNEL_IDLE == $state);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel2->close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -//Test PersistentChannelSharedMoreThanTwo
 | 
	
		
			
				|  |  | -$channel1 = new Grpc\Channel('localhost:1', [
 | 
	
		
			
				|  |  | -    "grpc_target_persist_bound" => 3,
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -$channel2 = new Grpc\Channel('localhost:1', []);
 | 
	
		
			
				|  |  | -$channel3 = new Grpc\Channel('localhost:1', []);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$state = $channel1->getConnectivityState(true);
 | 
	
		
			
				|  |  | -waitUntilNotIdle($channel1);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$state = $channel1->getConnectivityState();
 | 
	
		
			
				|  |  | -assertConnecting($state);
 | 
	
		
			
				|  |  | -$state = $channel2->getConnectivityState();
 | 
	
		
			
				|  |  | -assertConnecting($state);
 | 
	
		
			
				|  |  | -$state = $channel3->getConnectivityState();
 | 
	
		
			
				|  |  | -assertConnecting($state);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel1->close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -//Test PersistentChannelWithCallCredentials
 | 
	
		
			
				|  |  | -$creds = Grpc\ChannelCredentials::createSsl();
 | 
	
		
			
				|  |  | -$callCreds = Grpc\CallCredentials::createFromPlugin(
 | 
	
		
			
				|  |  | -    'callbackFunc');
 | 
	
		
			
				|  |  | -$credsWithCallCreds = Grpc\ChannelCredentials::createComposite(
 | 
	
		
			
				|  |  | -    $creds, $callCreds);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel1 = new Grpc\Channel('localhost:1',
 | 
	
		
			
				|  |  | -                                   ["credentials" =>
 | 
	
		
			
				|  |  | -                                    $credsWithCallCreds,
 | 
	
		
			
				|  |  | -                                    "grpc_target_persist_bound" => 3,
 | 
	
		
			
				|  |  | -                                    ]);
 | 
	
		
			
				|  |  | -$channel2 = new Grpc\Channel('localhost:1',
 | 
	
		
			
				|  |  | -                                   ["credentials" =>
 | 
	
		
			
				|  |  | -                                    $credsWithCallCreds]);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$state = $channel1->getConnectivityState(true);
 | 
	
		
			
				|  |  | -waitUntilNotIdle($channel1);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$state = $channel1->getConnectivityState();
 | 
	
		
			
				|  |  | -assertConnecting($state);
 | 
	
		
			
				|  |  | -$state = $channel2->getConnectivityState();
 | 
	
		
			
				|  |  | -assert(GRPC\CHANNEL_IDLE == $state);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel1->close();
 | 
	
		
			
				|  |  | -$channel2->close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test PersistentChannelWithDifferentCallCredentials
 | 
	
		
			
				|  |  | -$callCreds1 = Grpc\CallCredentials::createFromPlugin('callbackFunc');
 | 
	
		
			
				|  |  | -$callCreds2 = Grpc\CallCredentials::createFromPlugin('callbackFunc2');
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$creds1 = Grpc\ChannelCredentials::createSsl();
 | 
	
		
			
				|  |  | -$creds2 = Grpc\ChannelCredentials::createComposite(
 | 
	
		
			
				|  |  | -    $creds1, $callCreds1);
 | 
	
		
			
				|  |  | -$creds3 = Grpc\ChannelCredentials::createComposite(
 | 
	
		
			
				|  |  | -    $creds1, $callCreds2);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel1 = new Grpc\Channel('localhost:1',
 | 
	
		
			
				|  |  | -                                   ["credentials" => $creds1,
 | 
	
		
			
				|  |  | -                                    "grpc_target_persist_bound" => 3,
 | 
	
		
			
				|  |  | -                                    ]);
 | 
	
		
			
				|  |  | -$channel2 = new Grpc\Channel('localhost:1',
 | 
	
		
			
				|  |  | -                                   ["credentials" => $creds2]);
 | 
	
		
			
				|  |  | -$channel3 = new Grpc\Channel('localhost:1',
 | 
	
		
			
				|  |  | -                                   ["credentials" => $creds3]);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$state = $channel1->getConnectivityState(true);
 | 
	
		
			
				|  |  | -waitUntilNotIdle($channel1);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$state = $channel1->getConnectivityState();
 | 
	
		
			
				|  |  | -assertConnecting($state);
 | 
	
		
			
				|  |  | -$state = $channel2->getConnectivityState();
 | 
	
		
			
				|  |  | -assert(GRPC\CHANNEL_IDLE == $state);
 | 
	
		
			
				|  |  | -$state = $channel3->getConnectivityState();
 | 
	
		
			
				|  |  | -assert(GRPC\CHANNEL_IDLE == $state);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel1->close();
 | 
	
		
			
				|  |  | -$channel2->close();
 | 
	
		
			
				|  |  | -$channel3->close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test PersistentChannelForceNew
 | 
	
		
			
				|  |  | -$channel1 = new Grpc\Channel('localhost:1', [
 | 
	
		
			
				|  |  | -    "grpc_target_persist_bound" => 2,
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -$channel2 = new Grpc\Channel('localhost:1',
 | 
	
		
			
				|  |  | -                                   ["force_new" => true]);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$state = $channel1->getConnectivityState(true);
 | 
	
		
			
				|  |  | -waitUntilNotIdle($channel1);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$state = $channel1->getConnectivityState();
 | 
	
		
			
				|  |  | -assertConnecting($state);
 | 
	
		
			
				|  |  | -$state = $channel2->getConnectivityState();
 | 
	
		
			
				|  |  | -assert(GRPC\CHANNEL_IDLE == $state);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel1->close();
 | 
	
		
			
				|  |  | -$channel2->close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test PersistentChannelForceNewOldChannelIdle1
 | 
	
		
			
				|  |  | -$channel1 = new Grpc\Channel('localhost:1', [
 | 
	
		
			
				|  |  | -    "grpc_target_persist_bound" => 2,
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -$channel2 = new Grpc\Channel('localhost:1',
 | 
	
		
			
				|  |  | -                                   ["force_new" => true]);
 | 
	
		
			
				|  |  | -$channel3 = new Grpc\Channel('localhost:1', []);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$state = $channel2->getConnectivityState(true);
 | 
	
		
			
				|  |  | -waitUntilNotIdle($channel2);
 | 
	
		
			
				|  |  | -$state = $channel1->getConnectivityState();
 | 
	
		
			
				|  |  | -assert(GRPC\CHANNEL_IDLE == $state);
 | 
	
		
			
				|  |  | -$state = $channel2->getConnectivityState();
 | 
	
		
			
				|  |  | -assertConnecting($state);
 | 
	
		
			
				|  |  | -$state = $channel3->getConnectivityState();
 | 
	
		
			
				|  |  | -assert(GRPC\CHANNEL_IDLE == $state);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel1->close();
 | 
	
		
			
				|  |  | -$channel2->close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test PersistentChannelForceNewOldChannelIdle2
 | 
	
		
			
				|  |  | -$channel1 = new Grpc\Channel('localhost:1', [
 | 
	
		
			
				|  |  | -    "grpc_target_persist_bound" => 2,
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -$channel2 = new Grpc\Channel('localhost:1', []);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$state = $channel1->getConnectivityState(true);
 | 
	
		
			
				|  |  | -waitUntilNotIdle($channel2);
 | 
	
		
			
				|  |  | -$state = $channel1->getConnectivityState();
 | 
	
		
			
				|  |  | -assertConnecting($state);
 | 
	
		
			
				|  |  | -$state = $channel2->getConnectivityState();
 | 
	
		
			
				|  |  | -assertConnecting($state);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel1->close();
 | 
	
		
			
				|  |  | -$channel2->close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test PersistentChannelForceNewOldChannelClose1
 | 
	
		
			
				|  |  | -$channel1 = new Grpc\Channel('localhost:1', [
 | 
	
		
			
				|  |  | -    "grpc_target_persist_bound" => 2,
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -$channel2 = new Grpc\Channel('localhost:1',
 | 
	
		
			
				|  |  | -                                   ["force_new" => true]);
 | 
	
		
			
				|  |  | -$channel3 = new Grpc\Channel('localhost:1', []);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel1->close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$state = $channel2->getConnectivityState();
 | 
	
		
			
				|  |  | -assert(GRPC\CHANNEL_IDLE == $state);
 | 
	
		
			
				|  |  | -$state = $channel3->getConnectivityState();
 | 
	
		
			
				|  |  | -assert(GRPC\CHANNEL_IDLE == $state);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel2->close();
 | 
	
		
			
				|  |  | -$channel3->close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test PersistentChannelForceNewOldChannelClose2
 | 
	
		
			
				|  |  | -$channel1 = new Grpc\Channel('localhost:1', [
 | 
	
		
			
				|  |  | -    "grpc_target_persist_bound" => 2,
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -$channel2 = new Grpc\Channel('localhost:1',
 | 
	
		
			
				|  |  | -  ["force_new" => true]);
 | 
	
		
			
				|  |  | -// channel3 shares with channel1
 | 
	
		
			
				|  |  | -$channel3 = new Grpc\Channel('localhost:1', []);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel1->close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$state = $channel2->getConnectivityState();
 | 
	
		
			
				|  |  | -assert(GRPC\CHANNEL_IDLE == $state);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// channel3 is still usable
 | 
	
		
			
				|  |  | -$state = $channel3->getConnectivityState();
 | 
	
		
			
				|  |  | -assert(GRPC\CHANNEL_IDLE == $state);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// channel 1 is closed
 | 
	
		
			
				|  |  | -try{
 | 
	
		
			
				|  |  | -  $channel1->getConnectivityState();
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -catch(\Exception $e){
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel2->close();
 | 
	
		
			
				|  |  | -$channel3->close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test PersistentChannelForceNewNewChannelClose
 | 
	
		
			
				|  |  | -$channel1 = new Grpc\Channel('localhost:1', [
 | 
	
		
			
				|  |  | -    "grpc_target_persist_bound" => 2,
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -$channel2 = new Grpc\Channel('localhost:1',
 | 
	
		
			
				|  |  | -                                   ["force_new" => true]);
 | 
	
		
			
				|  |  | -$channel3 = new Grpc\Channel('localhost:1', []);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel2->close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$state = $channel1->getConnectivityState();
 | 
	
		
			
				|  |  | -assert(GRPC\CHANNEL_IDLE == $state);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// can still connect on channel1
 | 
	
		
			
				|  |  | -$state = $channel1->getConnectivityState(true);
 | 
	
		
			
				|  |  | -waitUntilNotIdle($channel1);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$state = $channel1->getConnectivityState();
 | 
	
		
			
				|  |  | -assertConnecting($state);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel1->close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -//============== Call Test ====================
 | 
	
		
			
				|  |  | -$server = new Grpc\Server([]);
 | 
	
		
			
				|  |  | -$port = $server->addHttp2Port('0.0.0.0:53000');
 | 
	
		
			
				|  |  | -$channel = new Grpc\Channel('localhost:'.$port, []);
 | 
	
		
			
				|  |  | -$call = new Grpc\Call($channel,
 | 
	
		
			
				|  |  | -    '/foo',
 | 
	
		
			
				|  |  | -    Grpc\Timeval::infFuture());
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test AddEmptyMetadata
 | 
	
		
			
				|  |  | -$batch = [
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -];
 | 
	
		
			
				|  |  | -$result = $call->startBatch($batch);
 | 
	
		
			
				|  |  | -assert($result->send_metadata == true);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test testAddSingleMetadata
 | 
	
		
			
				|  |  | -$batch = [
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => ['key' => ['value']],
 | 
	
		
			
				|  |  | -];
 | 
	
		
			
				|  |  | -$call = new Grpc\Call($channel,
 | 
	
		
			
				|  |  | -  '/foo',
 | 
	
		
			
				|  |  | -  Grpc\Timeval::infFuture());
 | 
	
		
			
				|  |  | -$result = $call->startBatch($batch);
 | 
	
		
			
				|  |  | -assert($result->send_metadata == true);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test AddMultiValue
 | 
	
		
			
				|  |  | -$batch = [
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => ['key' => ['value1', 'value2']],
 | 
	
		
			
				|  |  | -];
 | 
	
		
			
				|  |  | -$call = new Grpc\Call($channel,
 | 
	
		
			
				|  |  | -  '/foo',
 | 
	
		
			
				|  |  | -  Grpc\Timeval::infFuture());
 | 
	
		
			
				|  |  | -$result = $call->startBatch($batch);
 | 
	
		
			
				|  |  | -assert($result->send_metadata == true);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test AddSingleAndMultiValueMetadata
 | 
	
		
			
				|  |  | -$batch = [
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => ['key1' => ['value1'],
 | 
	
		
			
				|  |  | -                                      'key2' => ['value2',
 | 
	
		
			
				|  |  | -                                                 'value3', ], ],
 | 
	
		
			
				|  |  | -];
 | 
	
		
			
				|  |  | -$call = new Grpc\Call($channel,
 | 
	
		
			
				|  |  | -  '/foo',
 | 
	
		
			
				|  |  | -  Grpc\Timeval::infFuture());
 | 
	
		
			
				|  |  | -$result = $call->startBatch($batch);
 | 
	
		
			
				|  |  | -assert($result->send_metadata == true);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test AddMultiAndMultiValueMetadata
 | 
	
		
			
				|  |  | -$batch = [
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => ['key1' => ['value1'],
 | 
	
		
			
				|  |  | -                                      'key2' => ['value2',
 | 
	
		
			
				|  |  | -                                                 'value3', ], ],
 | 
	
		
			
				|  |  | -];
 | 
	
		
			
				|  |  | -$call = new Grpc\Call($channel,
 | 
	
		
			
				|  |  | -  '/foo',
 | 
	
		
			
				|  |  | -  Grpc\Timeval::infFuture());
 | 
	
		
			
				|  |  | -$result = $call->startBatch($batch);
 | 
	
		
			
				|  |  | -assert($result->send_metadata == true);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test GetPeer
 | 
	
		
			
				|  |  | -assert(is_string($call->getPeer()) == true);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test Cancel
 | 
	
		
			
				|  |  | -assert($call->cancel == NULL);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test InvalidStartBatchKey
 | 
	
		
			
				|  |  | -$batch = [
 | 
	
		
			
				|  |  | -  'invalid' => ['key1' => 'value1'],
 | 
	
		
			
				|  |  | -];
 | 
	
		
			
				|  |  | -try{
 | 
	
		
			
				|  |  | -  $result = $call->startBatch($batch);
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -catch(\Exception $e){
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test InvalideMetadataStrKey
 | 
	
		
			
				|  |  | -$batch = [
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => ['Key' => ['value1', 'value2']],
 | 
	
		
			
				|  |  | -];
 | 
	
		
			
				|  |  | -$call = new Grpc\Call($channel,
 | 
	
		
			
				|  |  | -  '/foo',
 | 
	
		
			
				|  |  | -  Grpc\Timeval::infFuture());
 | 
	
		
			
				|  |  | -try{
 | 
	
		
			
				|  |  | -  $result = $call->startBatch($batch);
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -catch(\Exception $e){
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test InvalidMetadataIntKey
 | 
	
		
			
				|  |  | -$batch = [
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [1 => ['value1', 'value2']],
 | 
	
		
			
				|  |  | -];
 | 
	
		
			
				|  |  | -$call = new Grpc\Call($channel,
 | 
	
		
			
				|  |  | -  '/foo',
 | 
	
		
			
				|  |  | -  Grpc\Timeval::infFuture());
 | 
	
		
			
				|  |  | -try{
 | 
	
		
			
				|  |  | -  $result = $call->startBatch($batch);
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -catch(\Exception $e){
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test InvalidMetadataInnerValue
 | 
	
		
			
				|  |  | -$batch = [
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => ['key1' => 'value1'],
 | 
	
		
			
				|  |  | -];
 | 
	
		
			
				|  |  | -$call = new Grpc\Call($channel,
 | 
	
		
			
				|  |  | -  '/foo',
 | 
	
		
			
				|  |  | -  Grpc\Timeval::infFuture());
 | 
	
		
			
				|  |  | -try{
 | 
	
		
			
				|  |  | -  $result = $call->startBatch($batch);
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -catch(\Exception $e){
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test InvalidConstuctor
 | 
	
		
			
				|  |  | -try {
 | 
	
		
			
				|  |  | -  $call = new Grpc\Call();
 | 
	
		
			
				|  |  | -} catch (\Exception $e) {}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test InvalidConstuctor2
 | 
	
		
			
				|  |  | -try {
 | 
	
		
			
				|  |  | -  $call = new Grpc\Call('hi', 'hi', 'hi');
 | 
	
		
			
				|  |  | -} catch (\Exception $e) {}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test InvalidSetCredentials
 | 
	
		
			
				|  |  | -try{
 | 
	
		
			
				|  |  | -  $call->setCredentials('hi');
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -catch(\Exception $e){
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test InvalidSetCredentials2
 | 
	
		
			
				|  |  | -try {
 | 
	
		
			
				|  |  | -  $call->setCredentials([]);
 | 
	
		
			
				|  |  | -} catch (\Exception $e) {}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -//============== CallCredentials Test 2 ====================
 | 
	
		
			
				|  |  | -// Set Up
 | 
	
		
			
				|  |  | -$credentials = Grpc\ChannelCredentials::createSsl(
 | 
	
		
			
				|  |  | -    file_get_contents(dirname(__FILE__).'/../data/ca.pem'));
 | 
	
		
			
				|  |  | -$server_credentials = Grpc\ServerCredentials::createSsl(
 | 
	
		
			
				|  |  | -    null,
 | 
	
		
			
				|  |  | -    file_get_contents(dirname(__FILE__).'/../data/server1.key'),
 | 
	
		
			
				|  |  | -    file_get_contents(dirname(__FILE__).'/../data/server1.pem'));
 | 
	
		
			
				|  |  | -$server = new Grpc\Server();
 | 
	
		
			
				|  |  | -$port = $server->addSecureHttp2Port('0.0.0.0:0',
 | 
	
		
			
				|  |  | -    $server_credentials);
 | 
	
		
			
				|  |  | -$server->start();
 | 
	
		
			
				|  |  | -$host_override = 'foo.test.google.fr';
 | 
	
		
			
				|  |  | -$channel = new Grpc\Channel(
 | 
	
		
			
				|  |  | -    'localhost:'.$port,
 | 
	
		
			
				|  |  | -    [
 | 
	
		
			
				|  |  | -      'grpc.ssl_target_name_override' => $host_override,
 | 
	
		
			
				|  |  | -      'grpc.default_authority' => $host_override,
 | 
	
		
			
				|  |  | -      'credentials' => $credentials,
 | 
	
		
			
				|  |  | -    ]
 | 
	
		
			
				|  |  | -);
 | 
	
		
			
				|  |  | -function callCredscallbackFunc($context)
 | 
	
		
			
				|  |  | -{
 | 
	
		
			
				|  |  | -  is_string($context->service_url);
 | 
	
		
			
				|  |  | -  is_string($context->method_name);
 | 
	
		
			
				|  |  | -  return ['k1' => ['v1'], 'k2' => ['v2']];
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test CreateFromPlugin
 | 
	
		
			
				|  |  | -$deadline = Grpc\Timeval::infFuture();
 | 
	
		
			
				|  |  | -$status_text = 'xyz';
 | 
	
		
			
				|  |  | -$call = new Grpc\Call($channel,
 | 
	
		
			
				|  |  | -    '/abc/dummy_method',
 | 
	
		
			
				|  |  | -    $deadline,
 | 
	
		
			
				|  |  | -    $host_override);
 | 
	
		
			
				|  |  | - $call_credentials = Grpc\CallCredentials::createFromPlugin(
 | 
	
		
			
				|  |  | -    'callCredscallbackFunc');
 | 
	
		
			
				|  |  | -$call->setCredentials($call_credentials);
 | 
	
		
			
				|  |  | - $event = $call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_CLOSE_FROM_CLIENT => true,
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -assert($event->send_metadata == true);
 | 
	
		
			
				|  |  | -assert($event->send_close == true);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$event = $server->requestCall();
 | 
	
		
			
				|  |  | -assert(is_array($event->metadata) == true);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$metadata = $event->metadata;
 | 
	
		
			
				|  |  | -assert(array_key_exists('k1', $metadata) == true);
 | 
	
		
			
				|  |  | -assert(array_key_exists('k2', $metadata) == true);
 | 
	
		
			
				|  |  | -assert($metadata['k1'] == ['v1']);
 | 
	
		
			
				|  |  | -assert($metadata['k2'] == ['v2']);
 | 
	
		
			
				|  |  | -assert('/abc/dummy_method' == $event->method);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$server_call = $event->call;
 | 
	
		
			
				|  |  | -$event = $server_call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_STATUS_FROM_SERVER => [
 | 
	
		
			
				|  |  | -      'metadata' => [],
 | 
	
		
			
				|  |  | -      'code' => Grpc\STATUS_OK,
 | 
	
		
			
				|  |  | -      'details' => $status_text,
 | 
	
		
			
				|  |  | -    ],
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_CLOSE_ON_SERVER => true,
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -assert($event->send_metadata == true);
 | 
	
		
			
				|  |  | -assert($event->send_status == true);
 | 
	
		
			
				|  |  | -assert($event->cancelled == false);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$event = $call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_INITIAL_METADATA => true,
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_STATUS_ON_CLIENT => true,
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -assert([] == $event->metadata);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$status = $event->status;
 | 
	
		
			
				|  |  | -assert([] == $status->metadata);
 | 
	
		
			
				|  |  | -assert(Grpc\STATUS_OK == $status->code);
 | 
	
		
			
				|  |  | -assert($status_text == $status->details);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -unset($call);
 | 
	
		
			
				|  |  | -unset($server_call);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -function invalidKeyCallbackFunc($context)
 | 
	
		
			
				|  |  | -{
 | 
	
		
			
				|  |  | -  is_string($context->service_url);
 | 
	
		
			
				|  |  | -  is_string($context->method_name);
 | 
	
		
			
				|  |  | -  return ['K1' => ['v1']];
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test CallbackWithInvalidKey
 | 
	
		
			
				|  |  | -$deadline = Grpc\Timeval::infFuture();
 | 
	
		
			
				|  |  | -$status_text = 'xyz';
 | 
	
		
			
				|  |  | -$call = new Grpc\Call($channel,
 | 
	
		
			
				|  |  | -    '/abc/dummy_method',
 | 
	
		
			
				|  |  | -    $deadline,
 | 
	
		
			
				|  |  | -    $host_override);
 | 
	
		
			
				|  |  | - $call_credentials = Grpc\CallCredentials::createFromPlugin(
 | 
	
		
			
				|  |  | -    'invalidKeyCallbackFunc');
 | 
	
		
			
				|  |  | -$call->setCredentials($call_credentials);
 | 
	
		
			
				|  |  | -$event = $call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_CLOSE_FROM_CLIENT => true,
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_STATUS_ON_CLIENT => true,
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -assert($event->send_metadata == true);
 | 
	
		
			
				|  |  | -assert($event->send_close == true);
 | 
	
		
			
				|  |  | -assert(($event->status->code == Grpc\STATUS_UNAVAILABLE) == true);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -function invalidReturnCallbackFunc($context)
 | 
	
		
			
				|  |  | -{
 | 
	
		
			
				|  |  | -  is_string($context->service_url);
 | 
	
		
			
				|  |  | -  is_string($context->method_name);
 | 
	
		
			
				|  |  | -  return 'a string';
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test CallbackWithInvalidReturnValue
 | 
	
		
			
				|  |  | -$deadline = Grpc\Timeval::infFuture();
 | 
	
		
			
				|  |  | -$status_text = 'xyz';
 | 
	
		
			
				|  |  | -$call = new Grpc\Call($channel,
 | 
	
		
			
				|  |  | -    '/abc/dummy_method',
 | 
	
		
			
				|  |  | -    $deadline,
 | 
	
		
			
				|  |  | -    $host_override);
 | 
	
		
			
				|  |  | - $call_credentials = Grpc\CallCredentials::createFromPlugin(
 | 
	
		
			
				|  |  | -    'invalidReturnCallbackFunc');
 | 
	
		
			
				|  |  | -$call->setCredentials($call_credentials);
 | 
	
		
			
				|  |  | - $event = $call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_CLOSE_FROM_CLIENT => true,
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_STATUS_ON_CLIENT => true,
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -assert($event->send_metadata == true);
 | 
	
		
			
				|  |  | -assert($event->send_close == true);
 | 
	
		
			
				|  |  | -assert(($event->status->code == Grpc\STATUS_UNAVAILABLE) == true);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -unset($channel);
 | 
	
		
			
				|  |  | -unset($server);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -//============== CallCredentials Test ====================
 | 
	
		
			
				|  |  | -//Set Up
 | 
	
		
			
				|  |  | -$credentials = Grpc\ChannelCredentials::createSsl(
 | 
	
		
			
				|  |  | -    file_get_contents(dirname(__FILE__).'/../data/ca.pem'));
 | 
	
		
			
				|  |  | -$call_credentials = Grpc\CallCredentials::createFromPlugin('callbackFunc');
 | 
	
		
			
				|  |  | -$credentials = Grpc\ChannelCredentials::createComposite(
 | 
	
		
			
				|  |  | -  $credentials,
 | 
	
		
			
				|  |  | -  $call_credentials
 | 
	
		
			
				|  |  | -);
 | 
	
		
			
				|  |  | -$server_credentials = Grpc\ServerCredentials::createSsl(
 | 
	
		
			
				|  |  | -    null,
 | 
	
		
			
				|  |  | -    file_get_contents(dirname(__FILE__).'/../data/server1.key'),
 | 
	
		
			
				|  |  | -    file_get_contents(dirname(__FILE__).'/../data/server1.pem'));
 | 
	
		
			
				|  |  | -$server = new Grpc\Server();
 | 
	
		
			
				|  |  | -$port = $server->addSecureHttp2Port('0.0.0.0:0',
 | 
	
		
			
				|  |  | -    $server_credentials);
 | 
	
		
			
				|  |  | -$server->start();
 | 
	
		
			
				|  |  | -$host_override = 'foo.test.google.fr';
 | 
	
		
			
				|  |  | -$channel = new Grpc\Channel(
 | 
	
		
			
				|  |  | -    'localhost:'.$port,
 | 
	
		
			
				|  |  | -    [
 | 
	
		
			
				|  |  | -      'grpc.ssl_target_name_override' => $host_override,
 | 
	
		
			
				|  |  | -      'grpc.default_authority' => $host_override,
 | 
	
		
			
				|  |  | -      'credentials' => $credentials,
 | 
	
		
			
				|  |  | -    ]
 | 
	
		
			
				|  |  | -);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test CreateComposite
 | 
	
		
			
				|  |  | -$call_credentials2 = Grpc\CallCredentials::createFromPlugin('callbackFunc');
 | 
	
		
			
				|  |  | -$call_credentials3 = Grpc\CallCredentials::createComposite(
 | 
	
		
			
				|  |  | -    $call_credentials,
 | 
	
		
			
				|  |  | -    $call_credentials2
 | 
	
		
			
				|  |  | -);
 | 
	
		
			
				|  |  | -assert('Grpc\CallCredentials' == get_class($call_credentials3));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test CreateFromPluginInvalidParam
 | 
	
		
			
				|  |  | -try{
 | 
	
		
			
				|  |  | -  $call_credentials = Grpc\CallCredentials::createFromPlugin(
 | 
	
		
			
				|  |  | -      'callbackFunc'
 | 
	
		
			
				|  |  | -  );
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -catch(\Exception $e){}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test CreateCompositeInvalidParam
 | 
	
		
			
				|  |  | -try{
 | 
	
		
			
				|  |  | -  $call_credentials3 = Grpc\CallCredentials::createComposite(
 | 
	
		
			
				|  |  | -    $call_credentials,
 | 
	
		
			
				|  |  | -    $credentials
 | 
	
		
			
				|  |  | -  );
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -catch(\Exception $e){}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -unset($channel);
 | 
	
		
			
				|  |  | -unset($server);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -//============== EndToEnd Test ====================
 | 
	
		
			
				|  |  | -// Set Up
 | 
	
		
			
				|  |  | -$server = new Grpc\Server([]);
 | 
	
		
			
				|  |  | -$port = $server->addHttp2Port('0.0.0.0:0');
 | 
	
		
			
				|  |  | -$channel = new Grpc\Channel('localhost:'.$port, []);
 | 
	
		
			
				|  |  | -$server->start();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test SimpleRequestBody
 | 
	
		
			
				|  |  | -$deadline = Grpc\Timeval::infFuture();
 | 
	
		
			
				|  |  | -$status_text = 'xyz';
 | 
	
		
			
				|  |  | -$call = new Grpc\Call($channel,
 | 
	
		
			
				|  |  | -    'dummy_method',
 | 
	
		
			
				|  |  | -    $deadline);
 | 
	
		
			
				|  |  | -$event = $call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_CLOSE_FROM_CLIENT => true,
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -assert($event->send_metadata == true);
 | 
	
		
			
				|  |  | -assert($event->send_close == true);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$event = $server->requestCall();
 | 
	
		
			
				|  |  | -assert('dummy_method' == $event->method);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$server_call = $event->call;
 | 
	
		
			
				|  |  | -$event = $server_call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_STATUS_FROM_SERVER => [
 | 
	
		
			
				|  |  | -      'metadata' => [],
 | 
	
		
			
				|  |  | -      'code' => Grpc\STATUS_OK,
 | 
	
		
			
				|  |  | -      'details' => $status_text,
 | 
	
		
			
				|  |  | -    ],
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_CLOSE_ON_SERVER => true,
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -assert($event->send_metadata == true);
 | 
	
		
			
				|  |  | -assert($event->send_status == true);
 | 
	
		
			
				|  |  | -assert($event->cancelled == false)
 | 
	
		
			
				|  |  | -;
 | 
	
		
			
				|  |  | - $event = $call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_INITIAL_METADATA => true,
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_STATUS_ON_CLIENT => true,
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -$status = $event->status;
 | 
	
		
			
				|  |  | -assert([] == $status->metadata);
 | 
	
		
			
				|  |  | -assert(Grpc\STATUS_OK == $status->code);
 | 
	
		
			
				|  |  | -assert($status_text == $status->details);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -unset($call);
 | 
	
		
			
				|  |  | -unset($server_call);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test MessageWriteFlags
 | 
	
		
			
				|  |  | -$deadline = Grpc\Timeval::infFuture();
 | 
	
		
			
				|  |  | -$req_text = 'message_write_flags_test';
 | 
	
		
			
				|  |  | -$status_text = 'xyz';
 | 
	
		
			
				|  |  | -$call = new Grpc\Call($channel,
 | 
	
		
			
				|  |  | -    'dummy_method',
 | 
	
		
			
				|  |  | -    $deadline);
 | 
	
		
			
				|  |  | -$event = $call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_MESSAGE => ['message' => $req_text,
 | 
	
		
			
				|  |  | -      'flags' => Grpc\WRITE_NO_COMPRESS, ],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_CLOSE_FROM_CLIENT => true,
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -assert($event->send_metadata == true);
 | 
	
		
			
				|  |  | -assert($event->send_close == true);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$event = $server->requestCall();
 | 
	
		
			
				|  |  | -assert('dummy_method' == $event->method);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$server_call = $event->call;
 | 
	
		
			
				|  |  | -$event = $server_call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_STATUS_FROM_SERVER => [
 | 
	
		
			
				|  |  | -      'metadata' => [],
 | 
	
		
			
				|  |  | -      'code' => Grpc\STATUS_OK,
 | 
	
		
			
				|  |  | -      'details' => $status_text,
 | 
	
		
			
				|  |  | -    ],
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -$event = $call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_INITIAL_METADATA => true,
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_STATUS_ON_CLIENT => true,
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -$status = $event->status;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -assert([] == $status->metadata);
 | 
	
		
			
				|  |  | -assert(Grpc\STATUS_OK == $status->code);
 | 
	
		
			
				|  |  | -assert($status_text == $status->details);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -unset($call);
 | 
	
		
			
				|  |  | -unset($server_call);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test ClientServerFullRequestResponse
 | 
	
		
			
				|  |  | -$deadline = Grpc\Timeval::infFuture();
 | 
	
		
			
				|  |  | -$req_text = 'client_server_full_request_response';
 | 
	
		
			
				|  |  | -$reply_text = 'reply:client_server_full_request_response';
 | 
	
		
			
				|  |  | -$status_text = 'status:client_server_full_response_text';
 | 
	
		
			
				|  |  | -$call = new Grpc\Call($channel,
 | 
	
		
			
				|  |  | -    'dummy_method',
 | 
	
		
			
				|  |  | -    $deadline);
 | 
	
		
			
				|  |  | - $event = $call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_CLOSE_FROM_CLIENT => true,
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_MESSAGE => ['message' => $req_text],
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -assert($event->send_metadata == true);
 | 
	
		
			
				|  |  | -assert($event->send_close == true);
 | 
	
		
			
				|  |  | -assert($event->send_message == true);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$event = $server->requestCall();
 | 
	
		
			
				|  |  | -assert('dummy_method' == $event->method);
 | 
	
		
			
				|  |  | -$server_call = $event->call;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$event = $server_call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_MESSAGE => ['message' => $reply_text],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_STATUS_FROM_SERVER => [
 | 
	
		
			
				|  |  | -      'metadata' => [],
 | 
	
		
			
				|  |  | -      'code' => Grpc\STATUS_OK,
 | 
	
		
			
				|  |  | -      'details' => $status_text,
 | 
	
		
			
				|  |  | -    ],
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_MESSAGE => true,
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_CLOSE_ON_SERVER => true,
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -assert($event->send_metadata == true);
 | 
	
		
			
				|  |  | -assert($event->send_status == true);
 | 
	
		
			
				|  |  | -assert($event->send_message == true);
 | 
	
		
			
				|  |  | -assert($event->cancelled == false);
 | 
	
		
			
				|  |  | -assert($req_text == $event->message);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$event = $call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_INITIAL_METADATA => true,
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_MESSAGE => true,
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_STATUS_ON_CLIENT => true,
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -assert([] == $event->metadata);
 | 
	
		
			
				|  |  | -assert($reply_text == $event->message);
 | 
	
		
			
				|  |  | -$status = $event->status;
 | 
	
		
			
				|  |  | -assert([] == $status->metadata);
 | 
	
		
			
				|  |  | -assert(Grpc\STATUS_OK == $status->code);
 | 
	
		
			
				|  |  | -assert($status_text == $status->details);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -unset($call);
 | 
	
		
			
				|  |  | -unset($server_call);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test InvalidClientMessageArray
 | 
	
		
			
				|  |  | -$deadline = Grpc\Timeval::infFuture();
 | 
	
		
			
				|  |  | -$req_text = 'client_server_full_request_response';
 | 
	
		
			
				|  |  | -$reply_text = 'reply:client_server_full_request_response';
 | 
	
		
			
				|  |  | -$status_text = 'status:client_server_full_response_text';
 | 
	
		
			
				|  |  | -$call = new Grpc\Call($channel,
 | 
	
		
			
				|  |  | -    'dummy_method',
 | 
	
		
			
				|  |  | -    $deadline);
 | 
	
		
			
				|  |  | -try {
 | 
	
		
			
				|  |  | -  $event = $call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_CLOSE_FROM_CLIENT => true,
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_MESSAGE => 'invalid',
 | 
	
		
			
				|  |  | -  ]);
 | 
	
		
			
				|  |  | -} catch (\Exception $e) {}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test InvalidClientMessageString
 | 
	
		
			
				|  |  | -$deadline = Grpc\Timeval::infFuture();
 | 
	
		
			
				|  |  | -$req_text = 'client_server_full_request_response';
 | 
	
		
			
				|  |  | -$reply_text = 'reply:client_server_full_request_response';
 | 
	
		
			
				|  |  | -$status_text = 'status:client_server_full_response_text';
 | 
	
		
			
				|  |  | -$call = new Grpc\Call($channel,
 | 
	
		
			
				|  |  | -    'dummy_method',
 | 
	
		
			
				|  |  | -    $deadline);
 | 
	
		
			
				|  |  | -try{
 | 
	
		
			
				|  |  | -  $event = $call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_CLOSE_FROM_CLIENT => true,
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_MESSAGE => ['message' => 0],
 | 
	
		
			
				|  |  | -  ]);
 | 
	
		
			
				|  |  | -} catch (\Exception $e) {}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test InvalidClientMessageFlags
 | 
	
		
			
				|  |  | -$deadline = Grpc\Timeval::infFuture();
 | 
	
		
			
				|  |  | -$req_text = 'client_server_full_request_response';
 | 
	
		
			
				|  |  | -$reply_text = 'reply:client_server_full_request_response';
 | 
	
		
			
				|  |  | -$status_text = 'status:client_server_full_response_text';
 | 
	
		
			
				|  |  | -$call = new Grpc\Call($channel,
 | 
	
		
			
				|  |  | -    'dummy_method',
 | 
	
		
			
				|  |  | -    $deadline);
 | 
	
		
			
				|  |  | -try{
 | 
	
		
			
				|  |  | -  $event = $call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_CLOSE_FROM_CLIENT => true,
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_MESSAGE => ['message' => 'abc',
 | 
	
		
			
				|  |  | -      'flags' => 'invalid',
 | 
	
		
			
				|  |  | -    ],
 | 
	
		
			
				|  |  | -  ]);
 | 
	
		
			
				|  |  | -} catch (\Exception $e) {}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test InvalidServerStatusMetadata
 | 
	
		
			
				|  |  | -$deadline = Grpc\Timeval::infFuture();
 | 
	
		
			
				|  |  | -$req_text = 'client_server_full_request_response';
 | 
	
		
			
				|  |  | -$reply_text = 'reply:client_server_full_request_response';
 | 
	
		
			
				|  |  | -$status_text = 'status:client_server_full_response_text';
 | 
	
		
			
				|  |  | -$call = new Grpc\Call($channel,
 | 
	
		
			
				|  |  | -    'dummy_method',
 | 
	
		
			
				|  |  | -    $deadline);
 | 
	
		
			
				|  |  | -$event = $call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_CLOSE_FROM_CLIENT => true,
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_MESSAGE => ['message' => $req_text],
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -assert($event->send_metadata == true);
 | 
	
		
			
				|  |  | -assert($event->send_close == true);
 | 
	
		
			
				|  |  | -assert($event->send_message == true);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$event = $server->requestCall();
 | 
	
		
			
				|  |  | -assert('dummy_method' == $event->method);
 | 
	
		
			
				|  |  | -$server_call = $event->call;
 | 
	
		
			
				|  |  | -try {
 | 
	
		
			
				|  |  | -  $event = $server_call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_MESSAGE => ['message' => $reply_text],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_STATUS_FROM_SERVER => [
 | 
	
		
			
				|  |  | -      'metadata' => 'invalid',
 | 
	
		
			
				|  |  | -      'code' => Grpc\STATUS_OK,
 | 
	
		
			
				|  |  | -      'details' => $status_text,
 | 
	
		
			
				|  |  | -    ],
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_MESSAGE => true,
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_CLOSE_ON_SERVER => true,
 | 
	
		
			
				|  |  | -  ]);
 | 
	
		
			
				|  |  | -} catch (\Exception $e) {}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test InvalidServerStatusCode
 | 
	
		
			
				|  |  | -$deadline = Grpc\Timeval::infFuture();
 | 
	
		
			
				|  |  | -$req_text = 'client_server_full_request_response';
 | 
	
		
			
				|  |  | -$reply_text = 'reply:client_server_full_request_response';
 | 
	
		
			
				|  |  | -$status_text = 'status:client_server_full_response_text';
 | 
	
		
			
				|  |  | -$call = new Grpc\Call($channel,
 | 
	
		
			
				|  |  | -    'dummy_method',
 | 
	
		
			
				|  |  | -    $deadline);
 | 
	
		
			
				|  |  | -$event = $call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_CLOSE_FROM_CLIENT => true,
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_MESSAGE => ['message' => $req_text],
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -assert($event->send_metadata == true);
 | 
	
		
			
				|  |  | -assert($event->send_close == true);
 | 
	
		
			
				|  |  | -assert($event->send_message == true);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$event = $server->requestCall();
 | 
	
		
			
				|  |  | -assert('dummy_method' == $event->method);
 | 
	
		
			
				|  |  | -$server_call = $event->call;
 | 
	
		
			
				|  |  | -try {
 | 
	
		
			
				|  |  | -  $event = $server_call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_MESSAGE => ['message' => $reply_text],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_STATUS_FROM_SERVER => [
 | 
	
		
			
				|  |  | -      'metadata' => [],
 | 
	
		
			
				|  |  | -      'code' => 'invalid',
 | 
	
		
			
				|  |  | -      'details' => $status_text,
 | 
	
		
			
				|  |  | -    ],
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_MESSAGE => true,
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_CLOSE_ON_SERVER => true,
 | 
	
		
			
				|  |  | -  ]);
 | 
	
		
			
				|  |  | -} catch (\Exception $e) {}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test MissingServerStatusCode
 | 
	
		
			
				|  |  | -$deadline = Grpc\Timeval::infFuture();
 | 
	
		
			
				|  |  | -$req_text = 'client_server_full_request_response';
 | 
	
		
			
				|  |  | -$reply_text = 'reply:client_server_full_request_response';
 | 
	
		
			
				|  |  | -$status_text = 'status:client_server_full_response_text';
 | 
	
		
			
				|  |  | -$call = new Grpc\Call($channel,
 | 
	
		
			
				|  |  | -    'dummy_method',
 | 
	
		
			
				|  |  | -    $deadline);
 | 
	
		
			
				|  |  | -$event = $call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_CLOSE_FROM_CLIENT => true,
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_MESSAGE => ['message' => $req_text],
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -$event = $server->requestCall();
 | 
	
		
			
				|  |  | -$server_call = $event->call;
 | 
	
		
			
				|  |  | -try {
 | 
	
		
			
				|  |  | -  $event = $server_call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_MESSAGE => ['message' => $reply_text],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_STATUS_FROM_SERVER => [
 | 
	
		
			
				|  |  | -      'metadata' => [],
 | 
	
		
			
				|  |  | -      'details' => $status_text,
 | 
	
		
			
				|  |  | -    ],
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_MESSAGE => true,
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_CLOSE_ON_SERVER => true,
 | 
	
		
			
				|  |  | -  ]);
 | 
	
		
			
				|  |  | -} catch (\Exception $e) {}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test InvalidServerStatusDetails
 | 
	
		
			
				|  |  | -$deadline = Grpc\Timeval::infFuture();
 | 
	
		
			
				|  |  | -$req_text = 'client_server_full_request_response';
 | 
	
		
			
				|  |  | -$reply_text = 'reply:client_server_full_request_response';
 | 
	
		
			
				|  |  | -$status_text = 'status:client_server_full_response_text';
 | 
	
		
			
				|  |  | -$call = new Grpc\Call($channel,
 | 
	
		
			
				|  |  | -    'dummy_method',
 | 
	
		
			
				|  |  | -    $deadline);
 | 
	
		
			
				|  |  | -$event = $call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_CLOSE_FROM_CLIENT => true,
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_MESSAGE => ['message' => $req_text],
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -$event = $server->requestCall();
 | 
	
		
			
				|  |  | -$server_call = $event->call;
 | 
	
		
			
				|  |  | -try {
 | 
	
		
			
				|  |  | -  $event = $server_call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_MESSAGE => ['message' => $reply_text],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_STATUS_FROM_SERVER => [
 | 
	
		
			
				|  |  | -      'metadata' => [],
 | 
	
		
			
				|  |  | -      'code' => Grpc\STATUS_OK,
 | 
	
		
			
				|  |  | -      'details' => 0,
 | 
	
		
			
				|  |  | -    ],
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_MESSAGE => true,
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_CLOSE_ON_SERVER => true,
 | 
	
		
			
				|  |  | -  ]);
 | 
	
		
			
				|  |  | -} catch (\Exception $e) {}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test MissingServerStatusDetails
 | 
	
		
			
				|  |  | -$deadline = Grpc\Timeval::infFuture();
 | 
	
		
			
				|  |  | -$req_text = 'client_server_full_request_response';
 | 
	
		
			
				|  |  | -$reply_text = 'reply:client_server_full_request_response';
 | 
	
		
			
				|  |  | -$status_text = 'status:client_server_full_response_text';
 | 
	
		
			
				|  |  | -$call = new Grpc\Call($channel,
 | 
	
		
			
				|  |  | -    'dummy_method',
 | 
	
		
			
				|  |  | -    $deadline);
 | 
	
		
			
				|  |  | -$event = $call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_CLOSE_FROM_CLIENT => true,
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_MESSAGE => ['message' => $req_text],
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -$event = $server->requestCall();
 | 
	
		
			
				|  |  | -$server_call = $event->call;
 | 
	
		
			
				|  |  | -try {
 | 
	
		
			
				|  |  | -  $event = $server_call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_MESSAGE => ['message' => $reply_text],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_STATUS_FROM_SERVER => [
 | 
	
		
			
				|  |  | -      'metadata' => [],
 | 
	
		
			
				|  |  | -      'code' => Grpc\STATUS_OK,
 | 
	
		
			
				|  |  | -    ],
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_MESSAGE => true,
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_CLOSE_ON_SERVER => true,
 | 
	
		
			
				|  |  | -  ]);
 | 
	
		
			
				|  |  | -} catch (\Exception $e) {}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test InvalidStartBatchKey
 | 
	
		
			
				|  |  | -$deadline = Grpc\Timeval::infFuture();
 | 
	
		
			
				|  |  | -$req_text = 'client_server_full_request_response';
 | 
	
		
			
				|  |  | -$reply_text = 'reply:client_server_full_request_response';
 | 
	
		
			
				|  |  | -$status_text = 'status:client_server_full_response_text';
 | 
	
		
			
				|  |  | -$call = new Grpc\Call($channel,
 | 
	
		
			
				|  |  | -    'dummy_method',
 | 
	
		
			
				|  |  | -    $deadline);
 | 
	
		
			
				|  |  | -try {
 | 
	
		
			
				|  |  | -  $event = $call->startBatch([
 | 
	
		
			
				|  |  | -    9999999 => [],
 | 
	
		
			
				|  |  | -  ]);
 | 
	
		
			
				|  |  | -} catch (\Exception $e) {}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test InvalidStartBatch
 | 
	
		
			
				|  |  | -$deadline = Grpc\Timeval::infFuture();
 | 
	
		
			
				|  |  | -$req_text = 'client_server_full_request_response';
 | 
	
		
			
				|  |  | -$reply_text = 'reply:client_server_full_request_response';
 | 
	
		
			
				|  |  | -$status_text = 'status:client_server_full_response_text';
 | 
	
		
			
				|  |  | -$call = new Grpc\Call($channel,
 | 
	
		
			
				|  |  | -    'dummy_method',
 | 
	
		
			
				|  |  | -    $deadline);
 | 
	
		
			
				|  |  | -try {
 | 
	
		
			
				|  |  | -  $event = $call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_CLOSE_FROM_CLIENT => true,
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_MESSAGE => ['message' => $req_text],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_STATUS_FROM_SERVER => [
 | 
	
		
			
				|  |  | -      'metadata' => [],
 | 
	
		
			
				|  |  | -      'code' => Grpc\STATUS_OK,
 | 
	
		
			
				|  |  | -      'details' => 'abc',
 | 
	
		
			
				|  |  | -    ],
 | 
	
		
			
				|  |  | -  ]);
 | 
	
		
			
				|  |  | -} catch (\Exception $e) {}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test GetTarget
 | 
	
		
			
				|  |  | -assert(is_string($channel->getTarget()) == true);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test GetConnectivityState
 | 
	
		
			
				|  |  | -assert(($channel->getConnectivityState() ==
 | 
	
		
			
				|  |  | -                          Grpc\CHANNEL_IDLE) == true);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test WatchConnectivityStateFailed
 | 
	
		
			
				|  |  | -$idle_state = $channel->getConnectivityState();
 | 
	
		
			
				|  |  | -assert(($idle_state == Grpc\CHANNEL_IDLE) == true);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$now = Grpc\Timeval::now();
 | 
	
		
			
				|  |  | -$delta = new Grpc\Timeval(50000); // should timeout
 | 
	
		
			
				|  |  | -$deadline = $now->add($delta);
 | 
	
		
			
				|  |  | -assert($channel->watchConnectivityState(
 | 
	
		
			
				|  |  | -    $idle_state, $deadline) == false);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test WatchConnectivityStateSuccess()
 | 
	
		
			
				|  |  | -$idle_state = $channel->getConnectivityState(true);
 | 
	
		
			
				|  |  | -assert(($idle_state == Grpc\CHANNEL_IDLE) == true);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$now = Grpc\Timeval::now();
 | 
	
		
			
				|  |  | -$delta = new Grpc\Timeval(3000000); // should finish well before
 | 
	
		
			
				|  |  | -$deadline = $now->add($delta);
 | 
	
		
			
				|  |  | -$new_state = $channel->getConnectivityState();
 | 
	
		
			
				|  |  | -assert($new_state != $idle_state);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test WatchConnectivityStateDoNothing
 | 
	
		
			
				|  |  | -$idle_state = $channel->getConnectivityState();
 | 
	
		
			
				|  |  | -$now = Grpc\Timeval::now();
 | 
	
		
			
				|  |  | -$delta = new Grpc\Timeval(50000);
 | 
	
		
			
				|  |  | -$deadline = $now->add($delta);
 | 
	
		
			
				|  |  | -assert(!$channel->watchConnectivityState(
 | 
	
		
			
				|  |  | -        $idle_state, $deadline));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$new_state = $channel->getConnectivityState();
 | 
	
		
			
				|  |  | -assert($new_state == Grpc\CHANNEL_IDLE);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test GetConnectivityStateInvalidParam
 | 
	
		
			
				|  |  | -try {
 | 
	
		
			
				|  |  | -  $channel->getConnectivityState(new Grpc\Timeval());
 | 
	
		
			
				|  |  | -} catch (\Exception $e) {}
 | 
	
		
			
				|  |  | -// Test WatchConnectivityStateInvalidParam
 | 
	
		
			
				|  |  | -try {
 | 
	
		
			
				|  |  | -  $channel->watchConnectivityState(0, 1000);
 | 
	
		
			
				|  |  | -} catch (\Exception $e) {}
 | 
	
		
			
				|  |  | -// Test ChannelConstructorInvalidParam
 | 
	
		
			
				|  |  | -try {
 | 
	
		
			
				|  |  | -  $channel = new Grpc\Channel('localhost:'.$port, null);
 | 
	
		
			
				|  |  | -} catch (\Exception $e) {}
 | 
	
		
			
				|  |  | -// testClose()
 | 
	
		
			
				|  |  | -$channel->close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -//============== SecureEndToEnd Test ====================
 | 
	
		
			
				|  |  | -// Set Up
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$credentials = Grpc\ChannelCredentials::createSsl(
 | 
	
		
			
				|  |  | -    file_get_contents(dirname(__FILE__).'/../data/ca.pem'));
 | 
	
		
			
				|  |  | -$server_credentials = Grpc\ServerCredentials::createSsl(
 | 
	
		
			
				|  |  | -    null,
 | 
	
		
			
				|  |  | -    file_get_contents(dirname(__FILE__).'/../data/server1.key'),
 | 
	
		
			
				|  |  | -    file_get_contents(dirname(__FILE__).'/../data/server1.pem'));
 | 
	
		
			
				|  |  | -$server = new Grpc\Server();
 | 
	
		
			
				|  |  | -$port = $server->addSecureHttp2Port('0.0.0.0:0',
 | 
	
		
			
				|  |  | -    $server_credentials);
 | 
	
		
			
				|  |  | -$server->start();
 | 
	
		
			
				|  |  | -$host_override = 'foo.test.google.fr';
 | 
	
		
			
				|  |  | -$channel = new Grpc\Channel(
 | 
	
		
			
				|  |  | -    'localhost:'.$port,
 | 
	
		
			
				|  |  | -    [
 | 
	
		
			
				|  |  | -      'grpc.ssl_target_name_override' => $host_override,
 | 
	
		
			
				|  |  | -      'grpc.default_authority' => $host_override,
 | 
	
		
			
				|  |  | -      'credentials' => $credentials,
 | 
	
		
			
				|  |  | -    ]
 | 
	
		
			
				|  |  | -);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test SimpleRequestBody
 | 
	
		
			
				|  |  | -$deadline = Grpc\Timeval::infFuture();
 | 
	
		
			
				|  |  | -$status_text = 'xyz';
 | 
	
		
			
				|  |  | -$call = new Grpc\Call($channel,
 | 
	
		
			
				|  |  | -    'dummy_method',
 | 
	
		
			
				|  |  | -    $deadline,
 | 
	
		
			
				|  |  | -    $host_override);
 | 
	
		
			
				|  |  | - $event = $call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_CLOSE_FROM_CLIENT => true,
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -assert($event->send_metadata == true);
 | 
	
		
			
				|  |  | -assert($event->send_close == true);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$event = $server->requestCall();
 | 
	
		
			
				|  |  | -assert('dummy_method' == $event->method);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$server_call = $event->call;
 | 
	
		
			
				|  |  | -$event = $server_call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_STATUS_FROM_SERVER => [
 | 
	
		
			
				|  |  | -      'metadata' => [],
 | 
	
		
			
				|  |  | -      'code' => Grpc\STATUS_OK,
 | 
	
		
			
				|  |  | -      'details' => $status_text,
 | 
	
		
			
				|  |  | -    ],
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_CLOSE_ON_SERVER => true,
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -assert($event->send_metadata == true);
 | 
	
		
			
				|  |  | -assert($event->send_status == true);
 | 
	
		
			
				|  |  | -assert($event->cancelled == false);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$event = $call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_INITIAL_METADATA => true,
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_STATUS_ON_CLIENT => true,
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -assert([] == $event->metadata);
 | 
	
		
			
				|  |  | -$status = $event->status;
 | 
	
		
			
				|  |  | -assert([] == $status->metadata);
 | 
	
		
			
				|  |  | -assert(Grpc\STATUS_OK == $status->code);
 | 
	
		
			
				|  |  | -assert($status_text == $status->details);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -unset($call);
 | 
	
		
			
				|  |  | -unset($server_call);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test MessageWriteFlags
 | 
	
		
			
				|  |  | -$deadline = Grpc\Timeval::infFuture();
 | 
	
		
			
				|  |  | -$req_text = 'message_write_flags_test';
 | 
	
		
			
				|  |  | -$status_text = 'xyz';
 | 
	
		
			
				|  |  | -$call = new Grpc\Call($channel,
 | 
	
		
			
				|  |  | -    'dummy_method',
 | 
	
		
			
				|  |  | -    $deadline,
 | 
	
		
			
				|  |  | -    $host_override);
 | 
	
		
			
				|  |  | - $event = $call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_MESSAGE => ['message' => $req_text,
 | 
	
		
			
				|  |  | -      'flags' => Grpc\WRITE_NO_COMPRESS, ],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_CLOSE_FROM_CLIENT => true,
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -assert($event->send_metadata == true);
 | 
	
		
			
				|  |  | -assert($event->send_close == true);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$event = $server->requestCall();
 | 
	
		
			
				|  |  | -assert('dummy_method' == $event->method);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$server_call = $event->call;
 | 
	
		
			
				|  |  | -$event = $server_call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_STATUS_FROM_SERVER => [
 | 
	
		
			
				|  |  | -      'metadata' => [],
 | 
	
		
			
				|  |  | -      'code' => Grpc\STATUS_OK,
 | 
	
		
			
				|  |  | -      'details' => $status_text,
 | 
	
		
			
				|  |  | -    ],
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -$event = $call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_INITIAL_METADATA => true,
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_STATUS_ON_CLIENT => true,
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -assert([] == $event->metadata);
 | 
	
		
			
				|  |  | -$status = $event->status;
 | 
	
		
			
				|  |  | -assert([] == $status->metadata);
 | 
	
		
			
				|  |  | -assert(Grpc\STATUS_OK == $status->code);
 | 
	
		
			
				|  |  | -assert($status_text == $status->details);unset($call);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -unset($call);
 | 
	
		
			
				|  |  | -unset($server_call);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test ClientServerFullRequestResponse
 | 
	
		
			
				|  |  | -$deadline = Grpc\Timeval::infFuture();
 | 
	
		
			
				|  |  | -$req_text = 'client_server_full_request_response';
 | 
	
		
			
				|  |  | -$reply_text = 'reply:client_server_full_request_response';
 | 
	
		
			
				|  |  | -$status_text = 'status:client_server_full_response_text';
 | 
	
		
			
				|  |  | -$call = new Grpc\Call($channel,
 | 
	
		
			
				|  |  | -    'dummy_method',
 | 
	
		
			
				|  |  | -    $deadline,
 | 
	
		
			
				|  |  | -    $host_override);
 | 
	
		
			
				|  |  | -$event = $call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_CLOSE_FROM_CLIENT => true,
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_MESSAGE => ['message' => $req_text],
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -assert($event->send_metadata == true);
 | 
	
		
			
				|  |  | -assert($event->send_close == true);
 | 
	
		
			
				|  |  | -assert($event->send_message == true);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$event = $server->requestCall();
 | 
	
		
			
				|  |  | -assert('dummy_method' == $event->method);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$server_call = $event->call;
 | 
	
		
			
				|  |  | -$event = $server_call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_MESSAGE => ['message' => $reply_text],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_STATUS_FROM_SERVER => [
 | 
	
		
			
				|  |  | -      'metadata' => [],
 | 
	
		
			
				|  |  | -      'code' => Grpc\STATUS_OK,
 | 
	
		
			
				|  |  | -      'details' => $status_text,
 | 
	
		
			
				|  |  | -    ],
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_MESSAGE => true,
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_CLOSE_ON_SERVER => true,
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -assert($event->send_metadata);
 | 
	
		
			
				|  |  | -assert($event->send_status);
 | 
	
		
			
				|  |  | -assert($event->send_message);
 | 
	
		
			
				|  |  | -assert(!$event->cancelled);
 | 
	
		
			
				|  |  | -assert($req_text == $event->message);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$event = $call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_INITIAL_METADATA => true,
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_MESSAGE => true,
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_STATUS_ON_CLIENT => true,
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -assert([] == $event->metadata);
 | 
	
		
			
				|  |  | -assert($reply_text == $event->message);
 | 
	
		
			
				|  |  | -$status = $event->status;
 | 
	
		
			
				|  |  | -assert([] == $status->metadata);
 | 
	
		
			
				|  |  | -assert(Grpc\STATUS_OK == $status->code);
 | 
	
		
			
				|  |  | -assert($status_text == $status->details);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -unset($call);
 | 
	
		
			
				|  |  | -unset($server_call);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel->close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -//============== Timeval Test ====================
 | 
	
		
			
				|  |  | -// Test ConstructorWithInt
 | 
	
		
			
				|  |  | -$time = new Grpc\Timeval(1234);
 | 
	
		
			
				|  |  | -assert($time != NULL);
 | 
	
		
			
				|  |  | -assert('Grpc\Timeval' == get_class($time));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test ConstructorWithNegative
 | 
	
		
			
				|  |  | -$time = new Grpc\Timeval(-123);
 | 
	
		
			
				|  |  | -assert($time != NULL);
 | 
	
		
			
				|  |  | -assert('Grpc\Timeval' == get_class($time));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test ConstructorWithZero
 | 
	
		
			
				|  |  | -$time = new Grpc\Timeval(0);
 | 
	
		
			
				|  |  | -assert($time != NULL);
 | 
	
		
			
				|  |  | -assert('Grpc\Timeval' == get_class($time));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test ConstructorWithOct
 | 
	
		
			
				|  |  | -$time = new Grpc\Timeval(0123);
 | 
	
		
			
				|  |  | -assert($time != NULL);
 | 
	
		
			
				|  |  | -assert('Grpc\Timeval' == get_class($time));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test ConstructorWithHex
 | 
	
		
			
				|  |  | -$time = new Grpc\Timeval(0x1A);
 | 
	
		
			
				|  |  | -assert($time != NULL);
 | 
	
		
			
				|  |  | -assert('Grpc\Timeval' == get_class($time));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test ConstructorWithFloat
 | 
	
		
			
				|  |  | -$time = new Grpc\Timeval(123.456);
 | 
	
		
			
				|  |  | -assert($time != NULL);
 | 
	
		
			
				|  |  | -assert('Grpc\Timeval' == get_class($time));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test CompareSame
 | 
	
		
			
				|  |  | -$zero = Grpc\Timeval::zero();
 | 
	
		
			
				|  |  | -assert(0 == Grpc\Timeval::compare($zero, $zero));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test PastIsLessThanZero
 | 
	
		
			
				|  |  | -$zero = Grpc\Timeval::zero();
 | 
	
		
			
				|  |  | -$past = Grpc\Timeval::infPast();
 | 
	
		
			
				|  |  | -assert(0 > Grpc\Timeval::compare($past, $zero));
 | 
	
		
			
				|  |  | -assert(0 < Grpc\Timeval::compare($zero, $past));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test FutureIsGreaterThanZero
 | 
	
		
			
				|  |  | -$zero = Grpc\Timeval::zero();
 | 
	
		
			
				|  |  | -$future = Grpc\Timeval::infFuture();
 | 
	
		
			
				|  |  | -assert(0 > Grpc\Timeval::compare($zero, $future));
 | 
	
		
			
				|  |  | -assert(0 < Grpc\Timeval::compare($future, $zero));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test NowIsBetweenZeroAndFuture
 | 
	
		
			
				|  |  | -$zero = Grpc\Timeval::zero();
 | 
	
		
			
				|  |  | -$future = Grpc\Timeval::infFuture();
 | 
	
		
			
				|  |  | -$now = Grpc\Timeval::now();
 | 
	
		
			
				|  |  | -assert(0 > Grpc\Timeval::compare($zero, $now));
 | 
	
		
			
				|  |  | -assert(0 > Grpc\Timeval::compare($now, $future));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test NowAndAdd
 | 
	
		
			
				|  |  | -$now = Grpc\Timeval::now();
 | 
	
		
			
				|  |  | -assert($now != NULL);
 | 
	
		
			
				|  |  | -$delta = new Grpc\Timeval(1000);
 | 
	
		
			
				|  |  | -$deadline = $now->add($delta);
 | 
	
		
			
				|  |  | -assert(0 < Grpc\Timeval::compare($deadline, $now));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test NowAndSubtract
 | 
	
		
			
				|  |  | -$now = Grpc\Timeval::now();
 | 
	
		
			
				|  |  | -$delta = new Grpc\Timeval(1000);
 | 
	
		
			
				|  |  | -$deadline = $now->subtract($delta);
 | 
	
		
			
				|  |  | -assert(0 > Grpc\Timeval::compare($deadline, $now));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test AddAndSubtract
 | 
	
		
			
				|  |  | -$now = Grpc\Timeval::now();
 | 
	
		
			
				|  |  | -$delta = new Grpc\Timeval(1000);
 | 
	
		
			
				|  |  | -$deadline = $now->add($delta);
 | 
	
		
			
				|  |  | -$back_to_now = $deadline->subtract($delta);
 | 
	
		
			
				|  |  | -assert(0 == Grpc\Timeval::compare($back_to_now, $now));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test Similar
 | 
	
		
			
				|  |  | -$a = Grpc\Timeval::now();
 | 
	
		
			
				|  |  | -$delta = new Grpc\Timeval(1000);
 | 
	
		
			
				|  |  | -$b = $a->add($delta);
 | 
	
		
			
				|  |  | -$thresh = new Grpc\Timeval(1100);
 | 
	
		
			
				|  |  | -assert(Grpc\Timeval::similar($a, $b, $thresh));
 | 
	
		
			
				|  |  | -$thresh = new Grpc\Timeval(900);
 | 
	
		
			
				|  |  | -assert(!Grpc\Timeval::similar($a, $b, $thresh));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test SleepUntil
 | 
	
		
			
				|  |  | -$curr_microtime = microtime(true);
 | 
	
		
			
				|  |  | -$now = Grpc\Timeval::now();
 | 
	
		
			
				|  |  | -$delta = new Grpc\Timeval(1000);
 | 
	
		
			
				|  |  | -$deadline = $now->add($delta);
 | 
	
		
			
				|  |  | -$deadline->sleepUntil();
 | 
	
		
			
				|  |  | -$done_microtime = microtime(true);
 | 
	
		
			
				|  |  | -assert(($done_microtime - $curr_microtime) > 0.0009);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test ConstructorInvalidParam
 | 
	
		
			
				|  |  | -try {
 | 
	
		
			
				|  |  | -  $delta = new Grpc\Timeval('abc');
 | 
	
		
			
				|  |  | -} catch (\Exception $e) {}
 | 
	
		
			
				|  |  | -// Test AddInvalidParam
 | 
	
		
			
				|  |  | -$a = Grpc\Timeval::now();
 | 
	
		
			
				|  |  | -try {
 | 
	
		
			
				|  |  | -  $a->add(1000);
 | 
	
		
			
				|  |  | -} catch (\Exception $e) {}
 | 
	
		
			
				|  |  | -// Test SubtractInvalidParam
 | 
	
		
			
				|  |  | -$a = Grpc\Timeval::now();
 | 
	
		
			
				|  |  | -try {
 | 
	
		
			
				|  |  | -  $a->subtract(1000);
 | 
	
		
			
				|  |  | -} catch (\Exception $e) {}
 | 
	
		
			
				|  |  | -// Test CompareInvalidParam
 | 
	
		
			
				|  |  | -try {
 | 
	
		
			
				|  |  | -  $a = Grpc\Timeval::compare(1000, 1100);
 | 
	
		
			
				|  |  | -} catch (\Exception $e) {}
 | 
	
		
			
				|  |  | -// Test SimilarInvalidParam
 | 
	
		
			
				|  |  | -try {
 | 
	
		
			
				|  |  | -  $a = Grpc\Timeval::similar(1000, 1100, 1200);
 | 
	
		
			
				|  |  | -} catch (\Exception $e) {}
 | 
	
		
			
				|  |  | - unset($time);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | - //============== Server Test ====================
 | 
	
		
			
				|  |  | - //Set Up
 | 
	
		
			
				|  |  | - $server = NULL;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | - // Test ConstructorWithNull
 | 
	
		
			
				|  |  | -$server = new Grpc\Server();
 | 
	
		
			
				|  |  | -assert($server != NULL);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test ConstructorWithNullArray
 | 
	
		
			
				|  |  | -$server = new Grpc\Server([]);
 | 
	
		
			
				|  |  | -assert($server != NULL);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test ConstructorWithArray
 | 
	
		
			
				|  |  | -$server = new Grpc\Server(['ip' => '127.0.0.1',
 | 
	
		
			
				|  |  | -                                          'port' => '8080', ]);
 | 
	
		
			
				|  |  | -assert($server != NULL);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test RequestCall
 | 
	
		
			
				|  |  | -$server = new Grpc\Server();
 | 
	
		
			
				|  |  | -$port = $server->addHttp2Port('0.0.0.0:0');
 | 
	
		
			
				|  |  | -$server->start();
 | 
	
		
			
				|  |  | -$channel = new Grpc\Channel('localhost:'.$port,
 | 
	
		
			
				|  |  | -     [
 | 
	
		
			
				|  |  | -         'force_new' => true,
 | 
	
		
			
				|  |  | -         'credentials' => Grpc\ChannelCredentials::createInsecure()
 | 
	
		
			
				|  |  | -     ]);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$deadline = Grpc\Timeval::infFuture();
 | 
	
		
			
				|  |  | -$call = new Grpc\Call($channel, 'dummy_method', $deadline);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$event = $call->startBatch([Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -                            Grpc\OP_SEND_CLOSE_FROM_CLIENT => true,
 | 
	
		
			
				|  |  | -                            ]);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$c = $server->requestCall();
 | 
	
		
			
				|  |  | -assert('dummy_method' == $c->method);
 | 
	
		
			
				|  |  | -assert(is_string($c->host));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -unset($call);
 | 
	
		
			
				|  |  | -unset($channel);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test InvalidConstructorWithNumKeyOfArray
 | 
	
		
			
				|  |  | -try{
 | 
	
		
			
				|  |  | -  $server = new Grpc\Server([10 => '127.0.0.1',
 | 
	
		
			
				|  |  | -                                         20 => '8080', ]);
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -catch(\Exception $e){}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test Invalid ArgumentException
 | 
	
		
			
				|  |  | -try{
 | 
	
		
			
				|  |  | -  $server = new Grpc\Server(['127.0.0.1', '8080']);
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -catch(\Exception $e){}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test InvalidAddHttp2Port
 | 
	
		
			
				|  |  | -$server = new Grpc\Server([]);
 | 
	
		
			
				|  |  | -try{
 | 
	
		
			
				|  |  | -  $port = $server->addHttp2Port(['0.0.0.0:0']);
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -catch(\Exception $e){}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test InvalidAddSecureHttp2Port
 | 
	
		
			
				|  |  | -$server = new Grpc\Server([]);
 | 
	
		
			
				|  |  | -try{
 | 
	
		
			
				|  |  | -  $port = $server->addSecureHttp2Port(['0.0.0.0:0']);
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -catch(\Exception $e){}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test InvalidAddSecureHttp2Port2
 | 
	
		
			
				|  |  | -$server = new Grpc\Server();
 | 
	
		
			
				|  |  | -try{
 | 
	
		
			
				|  |  | -  $port = $server->addSecureHttp2Port('0.0.0.0:0');
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -catch(\Exception $e){}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test InvalidAddSecureHttp2Port3
 | 
	
		
			
				|  |  | -$server = new Grpc\Server();
 | 
	
		
			
				|  |  | -try{
 | 
	
		
			
				|  |  | -  $port = $server->addSecureHttp2Port('0.0.0.0:0', 'invalid');
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -catch(\Exception $e){}
 | 
	
		
			
				|  |  | -unset($server);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -//============== ChannelCredential Test ====================
 | 
	
		
			
				|  |  | -// Test CreateSslWith3Null
 | 
	
		
			
				|  |  | -$channel_credentials = Grpc\ChannelCredentials::createSsl(null, null,
 | 
	
		
			
				|  |  | -    null);
 | 
	
		
			
				|  |  | -assert($channel_credentials != NULL);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test CreateSslWith3NullString
 | 
	
		
			
				|  |  | -$channel_credentials = Grpc\ChannelCredentials::createSsl('', '', '');
 | 
	
		
			
				|  |  | -assert($channel_credentials != NULL);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test CreateInsecure
 | 
	
		
			
				|  |  | -$channel_credentials = Grpc\ChannelCredentials::createInsecure();
 | 
	
		
			
				|  |  | -assert($channel_credentials == NULL);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test InvalidCreateSsl()
 | 
	
		
			
				|  |  | -try {
 | 
	
		
			
				|  |  | -  $channel_credentials = Grpc\ChannelCredentials::createSsl([]);
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -catch (\Exception $e) {
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -try {
 | 
	
		
			
				|  |  | -  $channel_credentials = Grpc\ChannelCredentials::createComposite(
 | 
	
		
			
				|  |  | -    'something', 'something');
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -catch (\Exception $e) {
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -//============== Interceptor Test ====================
 | 
	
		
			
				|  |  | -require_once(dirname(__FILE__).'/../../lib/Grpc/BaseStub.php');
 | 
	
		
			
				|  |  | -require_once(dirname(__FILE__).'/../../lib/Grpc/AbstractCall.php');
 | 
	
		
			
				|  |  | -require_once(dirname(__FILE__).'/../../lib/Grpc/UnaryCall.php');
 | 
	
		
			
				|  |  | -require_once(dirname(__FILE__).'/../../lib/Grpc/ClientStreamingCall.php');
 | 
	
		
			
				|  |  | -require_once(dirname(__FILE__).'/../../lib/Grpc/Interceptor.php');
 | 
	
		
			
				|  |  | -require_once(dirname(__FILE__).'/../../lib/Grpc/CallInvoker.php');
 | 
	
		
			
				|  |  | -require_once(dirname(__FILE__).'/../../lib/Grpc/DefaultCallInvoker.php');
 | 
	
		
			
				|  |  | -require_once(dirname(__FILE__).'/../../lib/Grpc/Internal/InterceptorChannel.php');
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -class SimpleRequest
 | 
	
		
			
				|  |  | -{
 | 
	
		
			
				|  |  | -    private $data;
 | 
	
		
			
				|  |  | -    public function __construct($data)
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        $this->data = $data;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    public function setData($data)
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        $this->data = $data;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    public function serializeToString()
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        return $this->data;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -class InterceptorClient extends Grpc\BaseStub
 | 
	
		
			
				|  |  | -{
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    /**
 | 
	
		
			
				|  |  | -     * @param string $hostname hostname
 | 
	
		
			
				|  |  | -     * @param array $opts channel options
 | 
	
		
			
				|  |  | -     * @param Channel|InterceptorChannel $channel (optional) re-use channel object
 | 
	
		
			
				|  |  | -     */
 | 
	
		
			
				|  |  | -    public function __construct($hostname, $opts, $channel = null)
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        parent::__construct($hostname, $opts, $channel);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    /**
 | 
	
		
			
				|  |  | -     * A simple RPC.
 | 
	
		
			
				|  |  | -     * @param SimpleRequest $argument input argument
 | 
	
		
			
				|  |  | -     * @param array $metadata metadata
 | 
	
		
			
				|  |  | -     * @param array $options call options
 | 
	
		
			
				|  |  | -     */
 | 
	
		
			
				|  |  | -    public function UnaryCall(
 | 
	
		
			
				|  |  | -        SimpleRequest $argument,
 | 
	
		
			
				|  |  | -        $metadata = [],
 | 
	
		
			
				|  |  | -        $options = []
 | 
	
		
			
				|  |  | -    ) {
 | 
	
		
			
				|  |  | -        return $this->_simpleRequest(
 | 
	
		
			
				|  |  | -            '/dummy_method',
 | 
	
		
			
				|  |  | -            $argument,
 | 
	
		
			
				|  |  | -            [],
 | 
	
		
			
				|  |  | -            $metadata,
 | 
	
		
			
				|  |  | -            $options
 | 
	
		
			
				|  |  | -        );
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    /**
 | 
	
		
			
				|  |  | -     * A client-to-server streaming RPC.
 | 
	
		
			
				|  |  | -     * @param array $metadata metadata
 | 
	
		
			
				|  |  | -     * @param array $options call options
 | 
	
		
			
				|  |  | -     */
 | 
	
		
			
				|  |  | -    public function StreamCall(
 | 
	
		
			
				|  |  | -        $metadata = [],
 | 
	
		
			
				|  |  | -        $options = []
 | 
	
		
			
				|  |  | -    ) {
 | 
	
		
			
				|  |  | -        return $this->_clientStreamRequest('/dummy_method', [], $metadata, $options);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -class ChangeMetadataInterceptor extends Grpc\Interceptor
 | 
	
		
			
				|  |  | -{
 | 
	
		
			
				|  |  | -    public function interceptUnaryUnary($method,
 | 
	
		
			
				|  |  | -                                        $argument,
 | 
	
		
			
				|  |  | -                                        $deserialize,
 | 
	
		
			
				|  |  | -                                        array $metadata = [],
 | 
	
		
			
				|  |  | -                                        array $options = [],
 | 
	
		
			
				|  |  | -                                        $continuation)
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        $metadata["foo"] = array('interceptor_from_unary_request');
 | 
	
		
			
				|  |  | -        return $continuation($method, $argument, $deserialize, $metadata, $options);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    public function interceptStreamUnary($method, $deserialize, array $metadata = [], array $options = [], $continuation)
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        $metadata["foo"] = array('interceptor_from_stream_request');
 | 
	
		
			
				|  |  | -        return $continuation($method, $deserialize, $metadata, $options);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -class ChangeMetadataInterceptor2 extends Grpc\Interceptor
 | 
	
		
			
				|  |  | -{
 | 
	
		
			
				|  |  | -    public function interceptUnaryUnary($method,
 | 
	
		
			
				|  |  | -                                        $argument,
 | 
	
		
			
				|  |  | -                                        $deserialize,
 | 
	
		
			
				|  |  | -                                        array $metadata = [],
 | 
	
		
			
				|  |  | -                                        array $options = [],
 | 
	
		
			
				|  |  | -                                        $continuation)
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        if (array_key_exists('foo', $metadata)) {
 | 
	
		
			
				|  |  | -            $metadata['bar'] = array('ChangeMetadataInterceptor should be executed first');
 | 
	
		
			
				|  |  | -        } else {
 | 
	
		
			
				|  |  | -            $metadata["bar"] = array('interceptor_from_unary_request');
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        return $continuation($method, $argument, $deserialize, $metadata, $options);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    public function interceptStreamUnary($method,
 | 
	
		
			
				|  |  | -                                         $deserialize,
 | 
	
		
			
				|  |  | -                                         array $metadata = [],
 | 
	
		
			
				|  |  | -                                         array $options = [],
 | 
	
		
			
				|  |  | -                                         $continuation)
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        if (array_key_exists('foo', $metadata)) {
 | 
	
		
			
				|  |  | -            $metadata['bar'] = array('ChangeMetadataInterceptor should be executed first');
 | 
	
		
			
				|  |  | -        } else {
 | 
	
		
			
				|  |  | -            $metadata["bar"] = array('interceptor_from_stream_request');
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        return $continuation($method, $deserialize, $metadata, $options);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -class ChangeRequestCall
 | 
	
		
			
				|  |  | -{
 | 
	
		
			
				|  |  | -    private $call;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    public function __construct($call)
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        $this->call = $call;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    public function getCall()
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        return $this->call;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    public function write($request)
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        $request->setData('intercepted_stream_request');
 | 
	
		
			
				|  |  | -        $this->getCall()->write($request);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    public function wait()
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        return $this->getCall()->wait();
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -class ChangeRequestInterceptor extends Grpc\Interceptor
 | 
	
		
			
				|  |  | -{
 | 
	
		
			
				|  |  | -    public function interceptUnaryUnary($method,
 | 
	
		
			
				|  |  | -                                        $argument,
 | 
	
		
			
				|  |  | -                                        $deserialize,
 | 
	
		
			
				|  |  | -                                        array $metadata = [],
 | 
	
		
			
				|  |  | -                                        array $options = [],
 | 
	
		
			
				|  |  | -                                        $continuation)
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        $argument->setData('intercepted_unary_request');
 | 
	
		
			
				|  |  | -        return $continuation($method, $argument, $deserialize, $metadata, $options);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    public function interceptStreamUnary($method, $deserialize, array $metadata = [], array $options = [], $continuation)
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        return new ChangeRequestCall(
 | 
	
		
			
				|  |  | -            $continuation($method, $deserialize, $metadata, $options)
 | 
	
		
			
				|  |  | -        );
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -class StopCallInterceptor extends Grpc\Interceptor
 | 
	
		
			
				|  |  | -{
 | 
	
		
			
				|  |  | -    public function interceptUnaryUnary($method,
 | 
	
		
			
				|  |  | -                                        $argument,
 | 
	
		
			
				|  |  | -                                        array $metadata = [],
 | 
	
		
			
				|  |  | -                                        array $options = [],
 | 
	
		
			
				|  |  | -                                        $continuation)
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        $metadata["foo"] = array('interceptor_from_request_response');
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    public function interceptStreamUnary($method,
 | 
	
		
			
				|  |  | -                                         array $metadata = [],
 | 
	
		
			
				|  |  | -                                         array $options = [],
 | 
	
		
			
				|  |  | -                                         $continuation)
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        $metadata["foo"] = array('interceptor_from_request_response');
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Set Up
 | 
	
		
			
				|  |  | -$server = new Grpc\Server([]);
 | 
	
		
			
				|  |  | -$port = $server->addHttp2Port('0.0.0.0:0');
 | 
	
		
			
				|  |  | -$channel = new Grpc\Channel('localhost:'.$port, [
 | 
	
		
			
				|  |  | -    'force_new' => true,
 | 
	
		
			
				|  |  | -    'credentials' => Grpc\ChannelCredentials::createInsecure()]);
 | 
	
		
			
				|  |  | -$server->start();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test ClientChangeMetadataOneInterceptor
 | 
	
		
			
				|  |  | -$req_text = 'client_request';
 | 
	
		
			
				|  |  | -$channel_matadata_interceptor = new ChangeMetadataInterceptor();
 | 
	
		
			
				|  |  | -$intercept_channel = Grpc\Interceptor::intercept($channel, $channel_matadata_interceptor);
 | 
	
		
			
				|  |  | -$client = new InterceptorClient('localhost:'.$port, [
 | 
	
		
			
				|  |  | -    'force_new' => true,
 | 
	
		
			
				|  |  | -    'credentials' => Grpc\ChannelCredentials::createInsecure(),
 | 
	
		
			
				|  |  | -], $intercept_channel);
 | 
	
		
			
				|  |  | -$req = new SimpleRequest($req_text);
 | 
	
		
			
				|  |  | -$unary_call = $client->UnaryCall($req);
 | 
	
		
			
				|  |  | -$event = $server->requestCall();
 | 
	
		
			
				|  |  | -assert('/dummy_method' == $event->method);
 | 
	
		
			
				|  |  | -assert(['interceptor_from_unary_request'] == $event->metadata['foo']);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$stream_call = $client->StreamCall();
 | 
	
		
			
				|  |  | -$stream_call->write($req);
 | 
	
		
			
				|  |  | -$event = $server->requestCall();
 | 
	
		
			
				|  |  | -assert('/dummy_method' == $event->method);
 | 
	
		
			
				|  |  | -assert(['interceptor_from_stream_request'] == $event->metadata['foo']);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -unset($unary_call);
 | 
	
		
			
				|  |  | -unset($stream_call);
 | 
	
		
			
				|  |  | -unset($server_call);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test ClientChangeMetadataTwoInterceptor
 | 
	
		
			
				|  |  | -$req_text = 'client_request';
 | 
	
		
			
				|  |  | -$channel_matadata_interceptor = new ChangeMetadataInterceptor();
 | 
	
		
			
				|  |  | -$channel_matadata_intercepto2 = new ChangeMetadataInterceptor2();
 | 
	
		
			
				|  |  | -// test intercept separately.
 | 
	
		
			
				|  |  | -$intercept_channel1 = Grpc\Interceptor::intercept($channel, $channel_matadata_interceptor);
 | 
	
		
			
				|  |  | -$intercept_channel2 = Grpc\Interceptor::intercept($intercept_channel1, $channel_matadata_intercepto2);
 | 
	
		
			
				|  |  | -$client = new InterceptorClient('localhost:'.$port, [
 | 
	
		
			
				|  |  | -    'force_new' => true,
 | 
	
		
			
				|  |  | -    'credentials' => Grpc\ChannelCredentials::createInsecure(),
 | 
	
		
			
				|  |  | -], $intercept_channel2);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$req = new SimpleRequest($req_text);
 | 
	
		
			
				|  |  | -$unary_call = $client->UnaryCall($req);
 | 
	
		
			
				|  |  | -$event = $server->requestCall();
 | 
	
		
			
				|  |  | -assert('/dummy_method' == $event->method);
 | 
	
		
			
				|  |  | -assert(['interceptor_from_unary_request'] == $event->metadata['foo']);
 | 
	
		
			
				|  |  | -assert(['interceptor_from_unary_request'] == $event->metadata['bar']);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$stream_call = $client->StreamCall();
 | 
	
		
			
				|  |  | -$stream_call->write($req);
 | 
	
		
			
				|  |  | -$event = $server->requestCall();
 | 
	
		
			
				|  |  | -assert('/dummy_method' == $event->method);
 | 
	
		
			
				|  |  | -assert(['interceptor_from_stream_request'] == $event->metadata['foo']);
 | 
	
		
			
				|  |  | -assert(['interceptor_from_stream_request'] == $event->metadata['bar']);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -unset($unary_call);
 | 
	
		
			
				|  |  | -unset($stream_call);
 | 
	
		
			
				|  |  | -unset($server_call);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// test intercept by array.
 | 
	
		
			
				|  |  | -$intercept_channel3 = Grpc\Interceptor::intercept($channel,
 | 
	
		
			
				|  |  | -    [$channel_matadata_intercepto2, $channel_matadata_interceptor]);
 | 
	
		
			
				|  |  | -$client = new InterceptorClient('localhost:'.$port, [
 | 
	
		
			
				|  |  | -    'force_new' => true,
 | 
	
		
			
				|  |  | -    'credentials' => Grpc\ChannelCredentials::createInsecure(),
 | 
	
		
			
				|  |  | -], $intercept_channel3);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$req = new SimpleRequest($req_text);
 | 
	
		
			
				|  |  | -$unary_call = $client->UnaryCall($req);
 | 
	
		
			
				|  |  | -$event = $server->requestCall();
 | 
	
		
			
				|  |  | -assert('/dummy_method' == $event->method);
 | 
	
		
			
				|  |  | -assert(['interceptor_from_unary_request'] == $event->metadata['foo']);
 | 
	
		
			
				|  |  | -assert(['interceptor_from_unary_request'] == $event->metadata['bar']);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$stream_call = $client->StreamCall();
 | 
	
		
			
				|  |  | -$stream_call->write($req);
 | 
	
		
			
				|  |  | -$event = $server->requestCall();
 | 
	
		
			
				|  |  | -assert('/dummy_method' == $event->method);
 | 
	
		
			
				|  |  | -assert(['interceptor_from_stream_request'] == $event->metadata['foo']);
 | 
	
		
			
				|  |  | -assert(['interceptor_from_stream_request'] == $event->metadata['bar']);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -unset($unary_call);
 | 
	
		
			
				|  |  | -unset($stream_call);
 | 
	
		
			
				|  |  | -unset($server_call);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test ClientChangeRequestInterceptor
 | 
	
		
			
				|  |  | -$req_text = 'client_request';
 | 
	
		
			
				|  |  | -$change_request_interceptor = new ChangeRequestInterceptor();
 | 
	
		
			
				|  |  | -$intercept_channel = Grpc\Interceptor::intercept($channel,
 | 
	
		
			
				|  |  | -    $change_request_interceptor);
 | 
	
		
			
				|  |  | -$client = new InterceptorClient('localhost:'.$port, [
 | 
	
		
			
				|  |  | -    'force_new' => true,
 | 
	
		
			
				|  |  | -    'credentials' => Grpc\ChannelCredentials::createInsecure(),
 | 
	
		
			
				|  |  | -], $intercept_channel);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$req = new SimpleRequest($req_text);
 | 
	
		
			
				|  |  | -$unary_call = $client->UnaryCall($req);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$event = $server->requestCall();
 | 
	
		
			
				|  |  | -assert('/dummy_method' == $event->method);
 | 
	
		
			
				|  |  | -$server_call = $event->call;
 | 
	
		
			
				|  |  | -$event = $server_call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_STATUS_FROM_SERVER => [
 | 
	
		
			
				|  |  | -        'metadata' => [],
 | 
	
		
			
				|  |  | -        'code' => Grpc\STATUS_OK,
 | 
	
		
			
				|  |  | -        'details' => '',
 | 
	
		
			
				|  |  | -    ],
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_MESSAGE => true,
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_CLOSE_ON_SERVER => true,
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -assert('intercepted_unary_request' == $event->message);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$stream_call = $client->StreamCall();
 | 
	
		
			
				|  |  | -$stream_call->write($req);
 | 
	
		
			
				|  |  | -$event = $server->requestCall();
 | 
	
		
			
				|  |  | -assert('/dummy_method' == $event->method);
 | 
	
		
			
				|  |  | -$server_call = $event->call;
 | 
	
		
			
				|  |  | -$event = $server_call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_STATUS_FROM_SERVER => [
 | 
	
		
			
				|  |  | -        'metadata' => [],
 | 
	
		
			
				|  |  | -        'code' => Grpc\STATUS_OK,
 | 
	
		
			
				|  |  | -        'details' => '',
 | 
	
		
			
				|  |  | -    ],
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_MESSAGE => true,
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_CLOSE_ON_SERVER => true,
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -assert('intercepted_stream_request' == $event->message);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -unset($unary_call);
 | 
	
		
			
				|  |  | -unset($stream_call);
 | 
	
		
			
				|  |  | -unset($server_call);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test ClientChangeStopCallInterceptor
 | 
	
		
			
				|  |  | -$req_text = 'client_request';
 | 
	
		
			
				|  |  | -$channel_request_interceptor = new StopCallInterceptor();
 | 
	
		
			
				|  |  | -$intercept_channel = Grpc\Interceptor::intercept($channel,
 | 
	
		
			
				|  |  | -    $channel_request_interceptor);
 | 
	
		
			
				|  |  | -$client = new InterceptorClient('localhost:'.$port, [
 | 
	
		
			
				|  |  | -    'force_new' => true,
 | 
	
		
			
				|  |  | -    'credentials' => Grpc\ChannelCredentials::createInsecure(),
 | 
	
		
			
				|  |  | -], $intercept_channel);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$req = new SimpleRequest($req_text);
 | 
	
		
			
				|  |  | -$unary_call = $client->UnaryCall($req);
 | 
	
		
			
				|  |  | -assert($unary_call == NULL);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$stream_call = $client->StreamCall();
 | 
	
		
			
				|  |  | -assert($stream_call == NULL);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -unset($unary_call);
 | 
	
		
			
				|  |  | -unset($stream_call);
 | 
	
		
			
				|  |  | -unset($server_call);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test GetInterceptorChannelConnectivityState
 | 
	
		
			
				|  |  | -$channel = new Grpc\Channel(
 | 
	
		
			
				|  |  | -    'localhost:0',
 | 
	
		
			
				|  |  | -    [
 | 
	
		
			
				|  |  | -        'force_new' => true,
 | 
	
		
			
				|  |  | -        'credentials' => Grpc\ChannelCredentials::createInsecure()
 | 
	
		
			
				|  |  | -    ]
 | 
	
		
			
				|  |  | -);
 | 
	
		
			
				|  |  | -$interceptor_channel = Grpc\Interceptor::intercept($channel, new Grpc\Interceptor());
 | 
	
		
			
				|  |  | -$state = $interceptor_channel->getConnectivityState();
 | 
	
		
			
				|  |  | -assert(0 == $state);
 | 
	
		
			
				|  |  | -$channel->close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test InterceptorChannelWatchConnectivityState
 | 
	
		
			
				|  |  | -$channel = new Grpc\Channel(
 | 
	
		
			
				|  |  | -    'localhost:0',
 | 
	
		
			
				|  |  | -    [
 | 
	
		
			
				|  |  | -        'force_new' => true,
 | 
	
		
			
				|  |  | -        'credentials' => Grpc\ChannelCredentials::createInsecure()
 | 
	
		
			
				|  |  | -    ]
 | 
	
		
			
				|  |  | -);
 | 
	
		
			
				|  |  | -$interceptor_channel = Grpc\Interceptor::intercept($channel, new Grpc\Interceptor());
 | 
	
		
			
				|  |  | -$now = Grpc\Timeval::now();
 | 
	
		
			
				|  |  | -$deadline = $now->add(new Grpc\Timeval(100*1000));
 | 
	
		
			
				|  |  | -$state = $interceptor_channel->watchConnectivityState(1, $deadline);
 | 
	
		
			
				|  |  | -assert($state);
 | 
	
		
			
				|  |  | -unset($time);
 | 
	
		
			
				|  |  | -unset($deadline);
 | 
	
		
			
				|  |  | -$channel->close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test InterceptorChannelClose
 | 
	
		
			
				|  |  | -$channel = new Grpc\Channel(
 | 
	
		
			
				|  |  | -    'localhost:0',
 | 
	
		
			
				|  |  | -    [
 | 
	
		
			
				|  |  | -        'force_new' => true,
 | 
	
		
			
				|  |  | -        'credentials' => Grpc\ChannelCredentials::createInsecure()
 | 
	
		
			
				|  |  | -    ]
 | 
	
		
			
				|  |  | -);
 | 
	
		
			
				|  |  | -$interceptor_channel = Grpc\Interceptor::intercept($channel, new Grpc\Interceptor());
 | 
	
		
			
				|  |  | -assert($interceptor_channel != NULL);
 | 
	
		
			
				|  |  | -$channel->close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test InterceptorChannelGetTarget
 | 
	
		
			
				|  |  | -$channel = new Grpc\Channel(
 | 
	
		
			
				|  |  | -    'localhost:8888',
 | 
	
		
			
				|  |  | -    [
 | 
	
		
			
				|  |  | -        'force_new' => true,
 | 
	
		
			
				|  |  | -        'credentials' => Grpc\ChannelCredentials::createInsecure()
 | 
	
		
			
				|  |  | -    ]
 | 
	
		
			
				|  |  | -);
 | 
	
		
			
				|  |  | -$interceptor_channel = Grpc\Interceptor::intercept($channel, new Grpc\Interceptor());
 | 
	
		
			
				|  |  | -$target = $interceptor_channel->getTarget();
 | 
	
		
			
				|  |  | -assert(is_string($target));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$channel->close();
 | 
	
		
			
				|  |  | -unset($server);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -//============== CallInvoker Test ====================
 | 
	
		
			
				|  |  | -class CallInvokerSimpleRequest
 | 
	
		
			
				|  |  | -{
 | 
	
		
			
				|  |  | -    private $data;
 | 
	
		
			
				|  |  | -    public function __construct($data)
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        $this->data = $data;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    public function setData($data)
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        $this->data = $data;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    public function serializeToString()
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        return $this->data;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -class CallInvokerClient extends Grpc\BaseStub
 | 
	
		
			
				|  |  | -{
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  /**
 | 
	
		
			
				|  |  | -   * @param string $hostname hostname
 | 
	
		
			
				|  |  | -   * @param array $opts channel options
 | 
	
		
			
				|  |  | -   * @param Channel|InterceptorChannel $channel (optional) re-use channel object
 | 
	
		
			
				|  |  | -   */
 | 
	
		
			
				|  |  | -  public function __construct($hostname, $opts, $channel = null)
 | 
	
		
			
				|  |  | -  {
 | 
	
		
			
				|  |  | -    parent::__construct($hostname, $opts, $channel);
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  /**
 | 
	
		
			
				|  |  | -   * A simple RPC.
 | 
	
		
			
				|  |  | -   * @param SimpleRequest $argument input argument
 | 
	
		
			
				|  |  | -   * @param array $metadata metadata
 | 
	
		
			
				|  |  | -   * @param array $options call options
 | 
	
		
			
				|  |  | -   */
 | 
	
		
			
				|  |  | -  public function UnaryCall(
 | 
	
		
			
				|  |  | -    CallInvokerSimpleRequest $argument,
 | 
	
		
			
				|  |  | -    $metadata = [],
 | 
	
		
			
				|  |  | -    $options = []
 | 
	
		
			
				|  |  | -  ) {
 | 
	
		
			
				|  |  | -    return $this->_simpleRequest(
 | 
	
		
			
				|  |  | -      '/dummy_method',
 | 
	
		
			
				|  |  | -      $argument,
 | 
	
		
			
				|  |  | -      [],
 | 
	
		
			
				|  |  | -      $metadata,
 | 
	
		
			
				|  |  | -      $options
 | 
	
		
			
				|  |  | -    );
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -class CallInvokerUpdateChannel implements \Grpc\CallInvoker
 | 
	
		
			
				|  |  | -{
 | 
	
		
			
				|  |  | -    private $channel;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    public function getChannel() {
 | 
	
		
			
				|  |  | -        return $this->channel;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    public function createChannelFactory($hostname, $opts) {
 | 
	
		
			
				|  |  | -        $this->channel = new \Grpc\Channel('localhost:50050', $opts);
 | 
	
		
			
				|  |  | -        return $this->channel;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    public function UnaryCall($channel, $method, $deserialize, $options) {
 | 
	
		
			
				|  |  | -        return new UnaryCall($channel, $method, $deserialize, $options);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    public function ClientStreamingCall($channel, $method, $deserialize, $options) {
 | 
	
		
			
				|  |  | -        return new ClientStreamingCall($channel, $method, $deserialize, $options);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    public function ServerStreamingCall($channel, $method, $deserialize, $options) {
 | 
	
		
			
				|  |  | -        return new ServerStreamingCall($channel, $method, $deserialize, $options);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    public function BidiStreamingCall($channel, $method, $deserialize, $options) {
 | 
	
		
			
				|  |  | -        return new BidiStreamingCall($channel, $method, $deserialize, $options);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -class CallInvokerChangeRequest implements \Grpc\CallInvoker
 | 
	
		
			
				|  |  | -{
 | 
	
		
			
				|  |  | -    private $channel;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    public function getChannel() {
 | 
	
		
			
				|  |  | -        return $this->channel;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    public function createChannelFactory($hostname, $opts) {
 | 
	
		
			
				|  |  | -        $this->channel = new \Grpc\Channel($hostname, $opts);
 | 
	
		
			
				|  |  | -        return $this->channel;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    public function UnaryCall($channel, $method, $deserialize, $options) {
 | 
	
		
			
				|  |  | -        return new CallInvokerChangeRequestCall($channel, $method, $deserialize, $options);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    public function ClientStreamingCall($channel, $method, $deserialize, $options) {
 | 
	
		
			
				|  |  | -        return new ClientStreamingCall($channel, $method, $deserialize, $options);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    public function ServerStreamingCall($channel, $method, $deserialize, $options) {
 | 
	
		
			
				|  |  | -        return new ServerStreamingCall($channel, $method, $deserialize, $options);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    public function BidiStreamingCall($channel, $method, $deserialize, $options) {
 | 
	
		
			
				|  |  | -        return new BidiStreamingCall($channel, $method, $deserialize, $options);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -class CallInvokerChangeRequestCall
 | 
	
		
			
				|  |  | -{
 | 
	
		
			
				|  |  | -    private $call;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    public function __construct($channel, $method, $deserialize, $options)
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        $this->call = new \Grpc\UnaryCall($channel, $method, $deserialize, $options);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    public function start($argument, $metadata, $options) {
 | 
	
		
			
				|  |  | -        $argument->setData('intercepted_unary_request');
 | 
	
		
			
				|  |  | -        $this->call->start($argument, $metadata, $options);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    public function wait()
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        return $this->call->wait();
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Set Up
 | 
	
		
			
				|  |  | -$server = new Grpc\Server([]);
 | 
	
		
			
				|  |  | -$port = $server->addHttp2Port('0.0.0.0:0');
 | 
	
		
			
				|  |  | -$server->start();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test CreateDefaultCallInvoker
 | 
	
		
			
				|  |  | -$call_invoker = new \Grpc\DefaultCallInvoker();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test CreateCallInvoker
 | 
	
		
			
				|  |  | -$call_invoker = new CallInvokerUpdateChannel();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test CallInvokerAccessChannel
 | 
	
		
			
				|  |  | -$call_invoker = new CallInvokerUpdateChannel();
 | 
	
		
			
				|  |  | -$stub = new \Grpc\BaseStub('localhost:50051',
 | 
	
		
			
				|  |  | -  ['credentials' => \Grpc\ChannelCredentials::createInsecure(),
 | 
	
		
			
				|  |  | -    'grpc_call_invoker' => $call_invoker]);
 | 
	
		
			
				|  |  | -assert($call_invoker->getChannel()->getTarget() == 'localhost:50050');
 | 
	
		
			
				|  |  | -$call_invoker->getChannel()->close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// Test ClientChangeRequestCallInvoker
 | 
	
		
			
				|  |  | -$req_text = 'client_request';
 | 
	
		
			
				|  |  | -$call_invoker = new CallInvokerChangeRequest();
 | 
	
		
			
				|  |  | -$client = new CallInvokerClient('localhost:'.$port, [
 | 
	
		
			
				|  |  | -    'force_new' => true,
 | 
	
		
			
				|  |  | -    'credentials' => Grpc\ChannelCredentials::createInsecure(),
 | 
	
		
			
				|  |  | -    'grpc_call_invoker' => $call_invoker,
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$req = new CallInvokerSimpleRequest($req_text);
 | 
	
		
			
				|  |  | -$unary_call = $client->UnaryCall($req);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -$event = $server->requestCall();
 | 
	
		
			
				|  |  | -assert('/dummy_method' == $event->method);
 | 
	
		
			
				|  |  | -$server_call = $event->call;
 | 
	
		
			
				|  |  | -$event = $server_call->startBatch([
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_INITIAL_METADATA => [],
 | 
	
		
			
				|  |  | -    Grpc\OP_SEND_STATUS_FROM_SERVER => [
 | 
	
		
			
				|  |  | -        'metadata' => [],
 | 
	
		
			
				|  |  | -        'code' => Grpc\STATUS_OK,
 | 
	
		
			
				|  |  | -        'details' => '',
 | 
	
		
			
				|  |  | -    ],
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_MESSAGE => true,
 | 
	
		
			
				|  |  | -    Grpc\OP_RECV_CLOSE_ON_SERVER => true,
 | 
	
		
			
				|  |  | -]);
 | 
	
		
			
				|  |  | -assert('intercepted_unary_request' == $event->message);
 | 
	
		
			
				|  |  | -$call_invoker->getChannel()->close();
 | 
	
		
			
				|  |  | -unset($unary_call);
 | 
	
		
			
				|  |  | -unset($server_call);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -unset($server);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 |