| 
					
				 | 
			
			
				@@ -0,0 +1,64 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# Copyright 2019 The gRPC authors 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# Licensed under the Apache License, Version 2.0 (the "License"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# you may not use this file except in compliance with the License. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# You may obtain a copy of the License at 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#     http://www.apache.org/licenses/LICENSE-2.0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# Unless required by applicable law or agreed to in writing, software 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# distributed under the License is distributed on an "AS IS" BASIS, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# See the License for the specific language governing permissions and 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# limitations under the License. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+"""Test of RPCs made using local credentials.""" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import unittest 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from concurrent.futures import ThreadPoolExecutor 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import grpc 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from grpc import local_credentials 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+class _GenericHandler(grpc.GenericRpcHandler): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def service(self, handler_call_details): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return grpc.unary_unary_rpc_method_handler( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            lambda request, unused_context: request) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+class LocalCredentialsTest(unittest.TestCase): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def _create_server(self): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        server = grpc.server(ThreadPoolExecutor()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        server.add_generic_rpc_handlers((_GenericHandler(),)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return server 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def test_local_tcp(self): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        server_addr = '[::1]:{}' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        channel_creds = local_credentials.local_channel_credentials( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            local_credentials.LocalConnectType.LOCAL_TCP) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        server_creds = local_credentials.local_server_credentials( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            local_credentials.LocalConnectType.LOCAL_TCP) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        server = self._create_server() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        port = server.add_secure_port(server_addr.format(0), server_creds) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        server.start() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        channel = grpc.secure_channel(server_addr.format(port), channel_creds) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.assertEqual(b'abc', channel.unary_unary('/test/method')(b'abc')) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        server.stop(None) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def test_uds(self): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        server_addr = 'unix:/tmp/grpc_fullstack_test' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        channel_creds = local_credentials.local_channel_credentials( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            local_credentials.LocalConnectType.UDS) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        server_creds = local_credentials.local_server_credentials( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            local_credentials.LocalConnectType.UDS) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        server = self._create_server() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        server.add_secure_port(server_addr, server_creds) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        server.start() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        channel = grpc.secure_channel(server_addr, channel_creds) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.assertEqual(b'abc', channel.unary_unary('/test/method')(b'abc')) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        server.stop(None) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+if __name__ == '__main__': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    unittest.main() 
			 |