Fix invalid unit test code in python-tackerclient
Unit tests are not testing the behavior of command-line client code properly since mox was replaced with mock in [1]. [1] https://review.openstack.org/#/c/313165/ assert_called_once_with() should be called after the target call of the patched method. Change-Id: I99873e9cb1d75d1fa2e41c02b9f87dfa4f9ef1f7 Partial-Bug: #1572706
This commit is contained in:
parent
dbc71552f2
commit
59ee90791d
tackerclient/tests/unit
@ -29,6 +29,7 @@ from tackerclient.common import exceptions
|
||||
from tackerclient import shell
|
||||
from tackerclient.tacker import v1_0 as tackerV1_0
|
||||
from tackerclient.tacker.v1_0 import TackerCommand
|
||||
from tackerclient.tests.unit import test_utils
|
||||
from tackerclient.v1_0 import client
|
||||
|
||||
API_VERSION = "1.0"
|
||||
@ -114,6 +115,12 @@ class MyUrlComparator(object):
|
||||
def __repr__(self):
|
||||
return str(self)
|
||||
|
||||
def __eq__(self, rhs):
|
||||
return self.equals(rhs)
|
||||
|
||||
def __ne__(self, rhs):
|
||||
return not self.__eq__(rhs)
|
||||
|
||||
|
||||
class MyComparator(object):
|
||||
def __init__(self, lhs, client):
|
||||
@ -243,17 +250,13 @@ class CLITestV10Base(testtools.TestCase):
|
||||
_body = self.client.serialize(body)
|
||||
with mock.patch.object(self.client.httpclient, 'request') as mock_req:
|
||||
mock_req.return_value = (MyResp(200), resstr)
|
||||
self.client.httpclient.request(
|
||||
end_url(path, format=self.format), 'POST',
|
||||
body=_body,
|
||||
headers={'X-Auth-Token', TOKEN})
|
||||
mock_req.assert_called_once_with(
|
||||
end_url(path, format=self.format), 'POST',
|
||||
body=_body,
|
||||
headers={'X-Auth-Token', TOKEN})
|
||||
args.extend(['--request-format', self.format])
|
||||
cmd_parser = cmd.get_parser('create_' + resource)
|
||||
shell.run_command(cmd, cmd_parser, args)
|
||||
mock_req.assert_called_once_with(
|
||||
end_url(path, format=self.format), 'POST',
|
||||
body=_body,
|
||||
headers=test_utils.ContainsKeyValue('X-Auth-Token', TOKEN))
|
||||
self.assertEqual(get_client_called_count, mock_get.call_count)
|
||||
_str = self.fake_stdout.make_string()
|
||||
self.assertIn(myid, _str)
|
||||
@ -271,17 +274,13 @@ class CLITestV10Base(testtools.TestCase):
|
||||
path = getattr(self.client, resources_collection + "_path")
|
||||
with mock.patch.object(self.client.httpclient, 'request') as mock_req:
|
||||
mock_req.return_value = (MyResp(200), resstr)
|
||||
self.client.httpclient.request(
|
||||
end_url(path, format=self.format), 'GET',
|
||||
body=None,
|
||||
headers={'X-Auth-Token': TOKEN})
|
||||
mock_req.assert_called_once_with(
|
||||
end_url(path, format=self.format), 'GET',
|
||||
body=None,
|
||||
headers={'X-Auth-Token': TOKEN})
|
||||
args.extend(['--request-format', self.format])
|
||||
cmd_parser = cmd.get_parser("list_" + resources_collection)
|
||||
shell.run_command(cmd, cmd_parser, args)
|
||||
mock_req.assert_called_once_with(
|
||||
end_url(path, format=self.format), 'GET',
|
||||
body=None,
|
||||
headers=test_utils.ContainsKeyValue('X-Auth-Token', TOKEN))
|
||||
mock_get.assert_called_once_with()
|
||||
|
||||
def _test_list_resources(self, resources, cmd, detail=False, tags=[],
|
||||
@ -362,16 +361,16 @@ class CLITestV10Base(testtools.TestCase):
|
||||
path = getattr(self.client, resources + "_path")
|
||||
with mock.patch.object(self.client.httpclient, 'request') as mock_req:
|
||||
mock_req.return_value = (MyResp(200), resstr)
|
||||
self.client.httpclient.request(
|
||||
MyUrlComparator(end_url(path, query, format=self.format),
|
||||
self.client),
|
||||
'GET',
|
||||
body=None,
|
||||
headers={'X-Auth-Token': TOKEN})
|
||||
with mock.patch.object(TackerCommand, 'get_client') as mock_get:
|
||||
mock_get.return_value = self.client
|
||||
cmd_parser = cmd.get_parser("list_" + resources)
|
||||
shell.run_command(cmd, cmd_parser, args)
|
||||
mock_req.assert_called_once_with(
|
||||
MyUrlComparator(end_url(path, query, format=self.format),
|
||||
self.client),
|
||||
'GET',
|
||||
body=None,
|
||||
headers=test_utils.ContainsKeyValue('X-Auth-Token', TOKEN))
|
||||
_str = self.fake_stdout.make_string()
|
||||
if response_contents is None:
|
||||
self.assertIn('myid1', _str)
|
||||
@ -459,18 +458,16 @@ class CLITestV10Base(testtools.TestCase):
|
||||
path = getattr(self.client, resources + "_path")
|
||||
with mock.patch.object(self.client.httpclient, 'request') as mock_req:
|
||||
mock_req.return_value = (MyResp(200), resstr)
|
||||
self.client.httpclient.request(
|
||||
end_url(path, format=self.format), 'GET',
|
||||
body=None,
|
||||
headers={'X-Auth-Token': TOKEN})
|
||||
mock_req.assert_called_once_with(
|
||||
end_url(path, format=self.format), 'GET',
|
||||
body=None,
|
||||
headers={'X-Auth-Token': TOKEN})
|
||||
comparator = MyUrlComparator(
|
||||
end_url(path % myid, query=query, format=self.format),
|
||||
self.client)
|
||||
args.extend(['--request-format', self.format])
|
||||
cmd_parser = cmd.get_parser("list_" + resources)
|
||||
shell.run_command(cmd, cmd_parser, args)
|
||||
|
||||
mock_req.assert_called_once_with(
|
||||
comparator, 'GET',
|
||||
body=None,
|
||||
headers=test_utils.ContainsKeyValue('X-Auth-Token', TOKEN))
|
||||
_str = self.fake_stdout.make_string()
|
||||
if response_contents is None:
|
||||
self.assertIn('myid1', _str)
|
||||
@ -562,17 +559,14 @@ class CLITestV10Base(testtools.TestCase):
|
||||
comparator = MyUrlComparator(
|
||||
end_url(path % myid, format=self.format), self.client)
|
||||
mock_req.return_value = (MyResp(204), None)
|
||||
self.client.httpclient.request(
|
||||
comparator, 'PUT', body=_body,
|
||||
headers={'X-Auth-Token', TOKEN})
|
||||
args.extend(['--request-format', self.format])
|
||||
cmd_parser = cmd.get_parser("update_" + resource)
|
||||
shell.run_command(cmd, cmd_parser, args)
|
||||
mock_req.assert_called_once_with(
|
||||
comparator,
|
||||
'PUT',
|
||||
body=_body,
|
||||
headers={'X-Auth-Token', TOKEN})
|
||||
args.extend(['--request-format', self.format])
|
||||
cmd_parser = cmd.get_parser("update_" + resource)
|
||||
shell.run_command(cmd, cmd_parser, args)
|
||||
headers=test_utils.ContainsKeyValue('X-Auth-Token', TOKEN))
|
||||
self.assertEqual(get_client_called_count, mock_get.call_count)
|
||||
_str = self.fake_stdout.make_string()
|
||||
self.assertIn(myid, _str)
|
||||
@ -590,15 +584,13 @@ class CLITestV10Base(testtools.TestCase):
|
||||
with mock.patch.object(self.client.httpclient, 'request') as\
|
||||
mock_req:
|
||||
mock_req.return_value = (MyResp(200), resstr)
|
||||
self.client.httpclient.request(
|
||||
end_url(path % myid, query, format=self.format), 'GET',
|
||||
body=None, headers={'X-Auth-Token': TOKEN})
|
||||
mock_req.assert_called_once_with(
|
||||
end_url(path % myid, query, format=self.format), 'GET',
|
||||
body=None, headers={'X-Auth-Token': TOKEN})
|
||||
args.extend(['--request-format', self.format])
|
||||
cmd_parser = cmd.get_parser("show_" + resource)
|
||||
shell.run_command(cmd, cmd_parser, args)
|
||||
mock_req.assert_called_once_with(
|
||||
end_url(path % myid, query, format=self.format), 'GET',
|
||||
body=None,
|
||||
headers=test_utils.ContainsKeyValue('X-Auth-Token', TOKEN))
|
||||
_str = self.fake_stdout.make_string()
|
||||
mock_get.assert_called_once_with()
|
||||
self.assertIn(myid, _str)
|
||||
@ -611,16 +603,13 @@ class CLITestV10Base(testtools.TestCase):
|
||||
path = getattr(self.client, resource + "_path")
|
||||
with mock.patch.object(self.client.httpclient, 'request') as mock_req:
|
||||
mock_req.return_value = (MyResp(204), None)
|
||||
self.client.httpclient.request(
|
||||
end_url(path % myid, format=self.format), 'DELETE',
|
||||
body=None,
|
||||
headers={'X-Auth-Token', TOKEN})
|
||||
args.extend(['--request-format', self.format])
|
||||
mock_req.assert_called_once_with(
|
||||
end_url(path % myid, format=self.format), 'DELETE',
|
||||
body=None, headers={'X-Auth-Token', TOKEN})
|
||||
cmd_parser = cmd.get_parser("delete_" + resource)
|
||||
shell.run_command(cmd, cmd_parser, args)
|
||||
mock_req.assert_called_once_with(
|
||||
end_url(path % myid, format=self.format), 'DELETE',
|
||||
body=None,
|
||||
headers=test_utils.ContainsKeyValue('X-Auth-Token', TOKEN))
|
||||
mock_get.assert_called_once_with()
|
||||
_str = self.fake_stdout.make_string()
|
||||
msg = 'All %(resource)s(s) %(msg)s successfully\n' % {
|
||||
@ -636,13 +625,13 @@ class CLITestV10Base(testtools.TestCase):
|
||||
path_action = '%s/%s' % (myid, action)
|
||||
with mock.patch.object(self.client.httpclient, 'request') as mock_req:
|
||||
mock_req.return_value = (MyResp(204), retval)
|
||||
self.client.httpclient.request(
|
||||
end_url(path % path_action, format=self.format), 'PUT',
|
||||
body=MyComparator(body, self.client),
|
||||
headers={'X-Auth-Token': TOKEN})
|
||||
args.extend(['--request-format', self.format])
|
||||
cmd_parser = cmd.get_parser("delete_" + resource)
|
||||
shell.run_command(cmd, cmd_parser, args)
|
||||
mock_req.assert_called_once_with(
|
||||
end_url(path % path_action, format=self.format), 'PUT',
|
||||
body=MyComparator(body, self.client),
|
||||
headers=test_utils.ContainsKeyValue('X-Auth-Token', TOKEN))
|
||||
_str = self.fake_stdout.make_string()
|
||||
self.assertIn(myid, _str)
|
||||
|
||||
@ -666,12 +655,14 @@ class ClientV1TestJson(CLITestV10Base):
|
||||
expected_auth_token = unicode_text.encode('utf-8')
|
||||
with mock.patch.object(self.client.httpclient, 'request') as mock_req:
|
||||
mock_req.return_value = (MyResp(200), expect_body)
|
||||
self.client.httpclient.request(
|
||||
end_url(expected_action, query=expect_query,
|
||||
format=self.format), 'PUT', body=expect_body,
|
||||
headers={'X-Auth-Token': expected_auth_token})
|
||||
res_body = self.client.do_request('PUT', action, body=body,
|
||||
params=params)
|
||||
mock_req.assert_called_once_with(
|
||||
end_url(expected_action, query=expect_query,
|
||||
format=self.format),
|
||||
'PUT', body=expect_body,
|
||||
headers=test_utils.ContainsKeyValue('X-Auth-Token',
|
||||
expected_auth_token))
|
||||
# test response with unicode
|
||||
self.assertEqual(res_body, body)
|
||||
|
||||
|
@ -109,3 +109,41 @@ class ImportClassTestCase(testtools.TestCase):
|
||||
self.assertRaises(
|
||||
exceptions.UnsupportedVersion,
|
||||
utils.get_client_class, 'image', '2', {'image': '2'})
|
||||
|
||||
|
||||
class ContainsKeyValue(object):
|
||||
"""Checks whether a key/value pair is in a dict parameter.
|
||||
|
||||
The ContainsKeyValue class is a helper for mock.assert_*()
|
||||
method. It enables strict check than the built in mock.ANY
|
||||
helper, and is the equivalent of the mox.ContainsKeyValue()
|
||||
function from the legacy mox library
|
||||
|
||||
Example usage could be:
|
||||
|
||||
mock_some_method.assert_called_once_with(
|
||||
"hello",
|
||||
ContainsKeyValue('foo', bar),
|
||||
mock.ANY,
|
||||
"world",
|
||||
ContainsKeyValue('hello', world))
|
||||
"""
|
||||
def __init__(self, wantkey, wantvalue):
|
||||
self.wantkey = wantkey
|
||||
self.wantvalue = wantvalue
|
||||
|
||||
def __eq__(self, other):
|
||||
try:
|
||||
return other[self.wantkey] == self.wantvalue
|
||||
except (KeyError, TypeError):
|
||||
return False
|
||||
|
||||
def __ne__(self, other):
|
||||
try:
|
||||
return other[self.wantkey] != self.wantvalue
|
||||
except (KeyError, TypeError):
|
||||
return True
|
||||
|
||||
def __repr__(self):
|
||||
return "<ContainsKeyValue: key " + str(self.wantkey) + \
|
||||
" and value " + str(self.wantvalue) + ">"
|
||||
|
@ -22,6 +22,7 @@ from tackerclient.tacker import v1_0 as tackerV1_0
|
||||
from tackerclient.tacker.v1_0 import TackerCommand
|
||||
from tackerclient.tacker.v1_0.vnfm import vnf
|
||||
from tackerclient.tests.unit import test_cli10
|
||||
from tackerclient.tests.unit import test_utils
|
||||
|
||||
API_VERSION = "1.0"
|
||||
FORMAT = 'json'
|
||||
@ -78,18 +79,14 @@ class CLITestV10VmVNFJSON(test_cli10.CLITestV10Base):
|
||||
_body = self.client.serialize(body)
|
||||
with mock.patch.object(self.client.httpclient, 'request') as mock_req:
|
||||
mock_req.return_value = (test_cli10.MyResp(200), resstr)
|
||||
self.client.httpclient.request(
|
||||
test_cli10.end_url(path, format=self.format), 'POST',
|
||||
body=_body,
|
||||
headers={'X-Auth-Token', TOKEN})
|
||||
mock_req.assert_called_once_with(
|
||||
test_cli10.end_url(path, format=self.format), 'POST',
|
||||
body=_body,
|
||||
headers={'X-Auth-Token', TOKEN})
|
||||
args.extend(['--request-format', self.format])
|
||||
args.extend(['--vnfd-id', 'vnfd'])
|
||||
cmd_parser = cmd.get_parser('create_' + resource)
|
||||
shell.run_command(cmd, cmd_parser, args)
|
||||
mock_req.assert_called_once_with(
|
||||
test_cli10.end_url(path, format=self.format), 'POST',
|
||||
body=_body,
|
||||
headers=test_utils.ContainsKeyValue('X-Auth-Token', TOKEN))
|
||||
mock_get.assert_any_call()
|
||||
|
||||
def test_create_vnf_all_params(self):
|
||||
|
@ -47,7 +47,7 @@ class CLITestV10VmVNFFGJSON(test_cli10.CLITestV10Base):
|
||||
'--symmetrical', 'True']
|
||||
position_names = ['vnffgd_id', 'vnf_mapping', 'symmetrical']
|
||||
position_values = [vnffgd_id, {"VNFD1": "VNF1"}, 'True']
|
||||
extra_body = {'name': vnffg_name}
|
||||
extra_body = {'name': vnffg_name, 'attributes': {}}
|
||||
self._test_create_resource(self._RESOURCE, cmd, None, my_id,
|
||||
args, position_names, position_values,
|
||||
extra_body=extra_body,
|
||||
@ -64,7 +64,7 @@ class CLITestV10VmVNFFGJSON(test_cli10.CLITestV10Base):
|
||||
]
|
||||
position_names = ['vnffgd_id']
|
||||
position_values = [vnffgd_id]
|
||||
extra_body = {'name': vnffg_name}
|
||||
extra_body = {'name': vnffg_name, 'attributes': {}}
|
||||
self._test_create_resource(self._RESOURCE, cmd, vnffg_name, my_id,
|
||||
args, position_names, position_values,
|
||||
extra_body=extra_body,
|
||||
|
Loading…
x
Reference in New Issue
Block a user