Monday, December 1, 2014

OpenStack Python Client Unit Testing check mocked client request Url, Method and Body

1)
Patch to debug client request Url, Method and body


git diff neutronclient/client.py neutronclient/v2_0/client.py
diff --git a/neutronclient/client.py b/neutronclient/client.py
index e41511f..c6ef62c 100644
--- a/neutronclient/client.py
+++ b/neutronclient/client.py
@@ -102,6 +102,8 @@ class HTTPClient(object):

         utils.http_log_req(_logger, args, log_kargs)
         try:
+           raise Exception(args)
+           #raise Exception(kargs)  
          
             resp, body = self.request(*args, **kargs)
         except requests.exceptions.SSLError as e:
             raise exceptions.SslCertificateValidationError(reason=e)
diff --git a/neutronclient/v2_0/client.py b/neutronclient/v2_0/client.py
index 9664520..bc555ae 100644
--- a/neutronclient/v2_0/client.py
+++ b/neutronclient/v2_0/client.py
@@ -1336,11 +1336,12 @@ class Client(object):
             try:
                 return self.do_request(method, action, body=body,
                                        headers=headers, params=params)
-            except exceptions.ConnectionFailed:
+            except exceptions.ConnectionFailed as ex:
                 # Exception has already been logged by do_request()
                 if i < self.retries:
                     _logger.debug('Retrying connection to Neutron service')
                     time.sleep(self.retry_interval)
+               raise ex

         raise exceptions.ConnectionFailed(reason=_("Maximum attempts reached"))



2)
Run following test and check the mocked client request Url, Method and body and compare with the original API request.


#cd python-neutronclient

a)
#.tox/py27/bin/python -m testtools.run neutronclient.tests.unit.test_cli20_ipam.CLITestV20Ipam.test_create_ipam

Url and Method : ConnectionFailed: Connection to neutron failed: ['localurl/v2.0/ipams.json', 'POST']

Body : ConnectionFailed: Connection to neutron failed: {'body': '{"ipam": {"name": "myname", "mgmt": {"method": "fixed"}}}', 'headers': {'X-Auth-Token': 'testtoken', 'Content-Type': 'application/json', 'Accept': 'application/json', 'User-Agent': 'python-neutronclient'}}


b)
#.tox/py27/bin/python -m testtools.run neutronclient.tests.unit.test_cli20_ipam.CLITestV20Ipam.test_list_ipams_detail

Url and Method : ConnectionFailed: Connection to neutron failed: ['localurl/v2.0/ipams.json?verbose=True', 'GET']

Body : ConnectionFailed: Connection to neutron failed: {'body': None, 'headers': {'X-Auth-Token': 'testtoken', 'Content-Type': 'application/json', 'Accept': 'application/json', 'User-Agent': 'python-neutronclient'}}


c)
#.tox/py27/bin/python -m testtools.run neutronclient.tests.unit.test_cli20_ipam.CLITestV20Ipam.test_show_ipam

Url and Method : ConnectionFailed: Connection to neutron failed: ['localurl/v2.0/ipams/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa.json?fields=id&fields=name', 'GET']

Body : ConnectionFailed: Connection to neutron failed: {'body': None, 'headers': {'X-Auth-Token': 'testtoken', 'Content-Type': 'application/json', 'Accept': 'application/json', 'User-Agent': 'python-neutronclient'}}


d)
#.tox/py27/bin/python -m testtools.run neutronclient.tests.unit.test_cli20_ipam.CLITestV20Ipam.test_delete_ipam

Url and Method : ConnectionFailed: Connection to neutron failed: ['localurl/v2.0/ipams/myid.json', 'DELETE']

Body : ConnectionFailed: Connection to neutron failed: {'body': None, 'headers': {'X-Auth-Token': 'testtoken', 'Content-Type': 'application/json', 'Accept': 'application/json', 'User-Agent': 'python-neutronclient'}}

No comments:

Post a Comment