mirror of https://github.com/grpc/grpc.git
Merge pull request #830 from nathanielmanistaatgoogle/python-interop-client
The Python interop client.changes/64/217564/1^2
commit
bc53734c2e
6 changed files with 299 additions and 9 deletions
@ -0,0 +1,86 @@ |
||||
# Copyright 2015, Google Inc. |
||||
# All rights reserved. |
||||
# |
||||
# Redistribution and use in source and binary forms, with or without |
||||
# modification, are permitted provided that the following conditions are |
||||
# met: |
||||
# |
||||
# * Redistributions of source code must retain the above copyright |
||||
# notice, this list of conditions and the following disclaimer. |
||||
# * Redistributions in binary form must reproduce the above |
||||
# copyright notice, this list of conditions and the following disclaimer |
||||
# in the documentation and/or other materials provided with the |
||||
# distribution. |
||||
# * Neither the name of Google Inc. nor the names of its |
||||
# contributors may be used to endorse or promote products derived from |
||||
# this software without specific prior written permission. |
||||
# |
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
|
||||
"""The Python implementation of the GRPC interoperability test client.""" |
||||
|
||||
import argparse |
||||
|
||||
from grpc.early_adopter import implementations |
||||
|
||||
from interop import methods |
||||
from interop import resources |
||||
|
||||
_ONE_DAY_IN_SECONDS = 60 * 60 * 24 |
||||
|
||||
|
||||
def _args(): |
||||
parser = argparse.ArgumentParser() |
||||
parser.add_argument( |
||||
'--server_host', help='the host to which to connect', type=str) |
||||
parser.add_argument( |
||||
'--server_host_override', |
||||
help='the server host to which to claim to connect', type=str) |
||||
parser.add_argument( |
||||
'--server_port', help='the port to which to connect', type=int) |
||||
parser.add_argument( |
||||
'--test_case', help='the test case to execute', type=str) |
||||
parser.add_argument( |
||||
'--use_tls', help='require a secure connection', dest='use_tls', |
||||
action='store_true') |
||||
parser.add_argument( |
||||
'--use_test_ca', help='replace platform root CAs with ca.pem', |
||||
action='store_true') |
||||
return parser.parse_args() |
||||
|
||||
|
||||
def _stub(args): |
||||
if args.use_tls: |
||||
if args.use_test_ca: |
||||
root_certificates = resources.test_root_certificates() |
||||
else: |
||||
root_certificates = resources.prod_root_certificates() |
||||
# TODO(nathaniel): server host override. |
||||
|
||||
stub = implementations.secure_stub( |
||||
methods.CLIENT_METHODS, args.server_host, args.server_port, |
||||
root_certificates, None, None) |
||||
else: |
||||
stub = implementations.insecure_stub( |
||||
methods.CLIENT_METHODS, args.server_host, args.server_port) |
||||
return stub |
||||
|
||||
|
||||
def _test_interoperability(): |
||||
args = _args() |
||||
stub = _stub(args) |
||||
methods.test_interoperability(args.test_case, stub) |
||||
|
||||
|
||||
if __name__ == '__main__': |
||||
_test_interoperability() |
@ -0,0 +1,15 @@ |
||||
-----BEGIN CERTIFICATE----- |
||||
MIICSjCCAbOgAwIBAgIJAJHGGR4dGioHMA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNV |
||||
BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX |
||||
aWRnaXRzIFB0eSBMdGQxDzANBgNVBAMTBnRlc3RjYTAeFw0xNDExMTEyMjMxMjla |
||||
Fw0yNDExMDgyMjMxMjlaMFYxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0 |
||||
YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDzANBgNVBAMT |
||||
BnRlc3RjYTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwEDfBV5MYdlHVHJ7 |
||||
+L4nxrZy7mBfAVXpOc5vMYztssUI7mL2/iYujiIXM+weZYNTEpLdjyJdu7R5gGUu |
||||
g1jSVK/EPHfc74O7AyZU34PNIP4Sh33N+/A5YexrNgJlPY+E3GdVYi4ldWJjgkAd |
||||
Qah2PH5ACLrIIC6tRka9hcaBlIECAwEAAaMgMB4wDAYDVR0TBAUwAwEB/zAOBgNV |
||||
HQ8BAf8EBAMCAgQwDQYJKoZIhvcNAQELBQADgYEAHzC7jdYlzAVmddi/gdAeKPau |
||||
sPBG/C2HCWqHzpCUHcKuvMzDVkY/MP2o6JIW2DBbY64bO/FceExhjcykgaYtCH/m |
||||
oIU63+CFOTtR7otyQAWHqXa7q4SbCDlG7DyRFxqG0txPtGvy12lgldA2+RgcigQG |
||||
Dfcog5wrJytaQ6UA0wE= |
||||
-----END CERTIFICATE----- |
@ -0,0 +1,56 @@ |
||||
# Copyright 2015, Google Inc. |
||||
# All rights reserved. |
||||
# |
||||
# Redistribution and use in source and binary forms, with or without |
||||
# modification, are permitted provided that the following conditions are |
||||
# met: |
||||
# |
||||
# * Redistributions of source code must retain the above copyright |
||||
# notice, this list of conditions and the following disclaimer. |
||||
# * Redistributions in binary form must reproduce the above |
||||
# copyright notice, this list of conditions and the following disclaimer |
||||
# in the documentation and/or other materials provided with the |
||||
# distribution. |
||||
# * Neither the name of Google Inc. nor the names of its |
||||
# contributors may be used to endorse or promote products derived from |
||||
# this software without specific prior written permission. |
||||
# |
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
|
||||
"""Constants and functions for data used in interoperability testing.""" |
||||
|
||||
import os |
||||
|
||||
import pkg_resources |
||||
|
||||
_ROOT_CERTIFICATES_RESOURCE_PATH = 'credentials/ca.pem' |
||||
_PRIVATE_KEY_RESOURCE_PATH = 'credentials/server1.key' |
||||
_CERTIFICATE_CHAIN_RESOURCE_PATH = 'credentials/server1.pem' |
||||
|
||||
|
||||
def test_root_certificates(): |
||||
return pkg_resources.resource_string( |
||||
__name__, _ROOT_CERTIFICATES_RESOURCE_PATH) |
||||
|
||||
|
||||
def prod_root_certificates(): |
||||
return open(os.environ['SSL_CERT_FILE'], mode='rb').read() |
||||
|
||||
|
||||
def private_key(): |
||||
return pkg_resources.resource_string(__name__, _PRIVATE_KEY_RESOURCE_PATH) |
||||
|
||||
|
||||
def certificate_chain(): |
||||
return pkg_resources.resource_string( |
||||
__name__, _CERTIFICATE_CHAIN_RESOURCE_PATH) |
Loading…
Reference in new issue