| 
					
				 | 
			
			
				@@ -38,6 +38,7 @@ require 'empty.php'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 require 'message_set.php'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 require 'messages.php'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 require 'test.php'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * Assertion function that always exits with an error code if the assertion is 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * falsy 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -45,7 +46,7 @@ require 'test.php'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @param $error_message Message to display if the assertion is false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 function hardAssert($value, $error_message) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if(!$value) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (!$value) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     echo $error_message . "\n"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     exit(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -53,7 +54,7 @@ function hardAssert($value, $error_message) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * Run the empty_unary test. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * Currently not tested against any server as of 2014-12-04 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Passes when run against the Node server as of 2015-04-30 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @param $stub Stub object that has service methods 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 function emptyUnary($stub) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -64,11 +65,20 @@ function emptyUnary($stub) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * Run the large_unary test. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * Passes when run against the C++ server as of 2014-12-04 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * Not tested against any other server as of 2014-12-04 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Passes when run against the C++/Node server as of 2015-04-30 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @param $stub Stub object that has service methods 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 function largeUnary($stub) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  performLargeUnary($stub); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Shared code between large unary test and auth test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @param $stub Stub object that has service methods 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @param $fillUsername boolean whether to fill result with username 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @param $fillOauthScope boolean whether to fill result with oauth scope 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function performLargeUnary($stub, $fillUsername = false, $fillOauthScope = false) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   $request_len = 271828; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   $response_len = 314159; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -79,6 +89,8 @@ function largeUnary($stub) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   $payload->setType(grpc\testing\PayloadType::COMPRESSABLE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   $payload->setBody(str_repeat("\0", $request_len)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   $request->setPayload($payload); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  $request->setFillUsername($fillUsername); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  $request->setFillOauthScope($fillOauthScope); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   list($result, $status) = $stub->UnaryCall($request)->wait(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   hardAssert($status->code === Grpc\STATUS_OK, 'Call did not complete successfully'); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -90,11 +102,32 @@ function largeUnary($stub) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          'Payload had the wrong length'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   hardAssert($payload->getBody() === str_repeat("\0", $response_len), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          'Payload had the wrong content'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return $result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Run the service account credentials auth test. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Passes when run against the cloud server as of 2015-04-30 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @param $stub Stub object that has service methods 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @param $args array command line args 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function serviceAccountCreds($stub, $args) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (!array_key_exists('oauth_scope', $args)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    throw new Exception('Missing oauth scope'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  $jsonKey = json_decode( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      file_get_contents(getenv(Google\Auth\CredentialsLoader::ENV_VAR)), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  $result = performLargeUnary($stub, $fillUsername=true, $fillOauthScope=true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  hardAssert($result->getUsername() == $jsonKey['client_email'], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             'invalid email returned'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  hardAssert(strpos($args['oauth_scope'], $result->getOauthScope()) !== false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             'invalid oauth scope returned'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * Run the client_streaming test. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * Not tested against any server as of 2014-12-04. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Passes when run against the Node server as of 2015-04-30 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @param $stub Stub object that has service methods 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 function clientStreaming($stub) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -117,7 +150,7 @@ function clientStreaming($stub) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * Run the server_streaming test. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * Not tested against any server as of 2014-12-04. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Passes when run against the Node server as of 2015-04-30 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @param $stub Stub object that has service methods. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 function serverStreaming($stub) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -148,7 +181,7 @@ function serverStreaming($stub) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * Run the ping_pong test. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * Not tested against any server as of 2014-12-04. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Passes when run against the Node server as of 2015-04-30 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @param $stub Stub object that has service methods. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 function pingPong($stub) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -182,6 +215,11 @@ function pingPong($stub) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               'Call did not complete successfully'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Run the cancel_after_first_response test. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Passes when run against the Node server as of 2015-04-30 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @param $stub Stub object that has service methods. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 function cancelAfterFirstResponse($stub) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   $call = $stub->FullDuplexCall(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   $request = new grpc\testing\StreamingOutputCallRequest(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -201,7 +239,8 @@ function cancelAfterFirstResponse($stub) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				              'Call status was not CANCELLED'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-$args = getopt('', array('server_host:', 'server_port:', 'test_case:')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$args = getopt('', array('server_host:', 'server_port:', 'test_case:', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                         'server_host_override:', 'oauth_scope:')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 if (!array_key_exists('server_host', $args) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     !array_key_exists('server_port', $args) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     !array_key_exists('test_case', $args)) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -210,20 +249,37 @@ if (!array_key_exists('server_host', $args) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 $server_address = $args['server_host'] . ':' . $args['server_port']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-$credentials = Grpc\Credentials::createSsl( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    file_get_contents(dirname(__FILE__) . '/../data/ca.pem')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+if (!array_key_exists('server_host_override', $args)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  $args['server_host_override'] = 'foo.test.google.fr'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$ssl_cert_file = getenv('SSL_CERT_FILE'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+if (!$ssl_cert_file) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  $ssl_cert_file = dirname(__FILE__) . '/../data/ca.pem'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$credentials = Grpc\Credentials::createSsl(file_get_contents($ssl_cert_file)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$opts = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    'grpc.ssl_target_name_override' => $args['server_host_override'], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    'credentials' => $credentials, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+if (array_key_exists('oauth_scope', $args)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  $auth = Google\Auth\ApplicationDefaultCredentials::getCredentials( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $args['oauth_scope']); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  $opts['update_metadata'] = $auth->getUpdateMetadataFunc(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 $stub = new grpc\testing\TestServiceClient( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     new Grpc\BaseStub( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         $server_address, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            'grpc.ssl_target_name_override' => 'foo.test.google.fr', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            'credentials' => $credentials 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         ])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $opts)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 echo "Connecting to $server_address\n"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 echo "Running test case $args[test_case]\n"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-switch($args['test_case']) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+switch ($args['test_case']) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   case 'empty_unary': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     emptyUnary($stub); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     break; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -242,6 +298,9 @@ switch($args['test_case']) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   case 'cancel_after_first_response': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     cancelAfterFirstResponse($stub); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  case 'service_account_creds': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    serviceAccountCreds($stub, $args); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     exit(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |