Fix unit tests cleanup for --resource-list option
This patch fixes the incomplete cleanup of unit tests for
`record_resources()` function. These unit tests are tied with the
tempest cleanup --resource-list option. The issue was the creation
of None file and resource_list.json file while running unit tests.
Closes-Bug: #2070449
Change-Id: Id8ff96606b30d52ad4c8a6bd31bcb09ae03cc963
diff --git a/tempest/lib/common/rest_client.py b/tempest/lib/common/rest_client.py
index 4f9e9ba..b656b7a 100644
--- a/tempest/lib/common/rest_client.py
+++ b/tempest/lib/common/rest_client.py
@@ -46,6 +46,8 @@
JSONSCHEMA_VALIDATOR = jsonschema_validator.JSONSCHEMA_VALIDATOR
FORMAT_CHECKER = jsonschema_validator.FORMAT_CHECKER
+RESOURCE_LIST_JSON = "resource_list.json"
+
class RestClient(object):
"""Unified OpenStack RestClient class
@@ -1045,7 +1047,7 @@
data[res_type].update({res_dict.get('name'): ""})
self.rec_rw_lock.acquire_write_lock()
- with open("resource_list.json", 'w+') as f:
+ with open(RESOURCE_LIST_JSON, 'w+') as f:
f.write(json.dumps(data, indent=2, separators=(',', ': ')))
self.rec_rw_lock.release_write_lock()
@@ -1059,7 +1061,7 @@
self.rec_rw_lock.acquire_read_lock()
try:
- with open('resource_list.json', 'rb') as f:
+ with open(RESOURCE_LIST_JSON, 'rb') as f:
data = json.load(f)
except IOError:
data = {}
diff --git a/tempest/tests/lib/common/test_rest_client.py b/tempest/tests/lib/common/test_rest_client.py
index 9bc6f60..0d1660c 100644
--- a/tempest/tests/lib/common/test_rest_client.py
+++ b/tempest/tests/lib/common/test_rest_client.py
@@ -14,6 +14,7 @@
import copy
from unittest import mock
+from unittest.mock import patch
import fixtures
import jsonschema
@@ -755,103 +756,124 @@
def setUp(self):
self.fake_http = fake_http.fake_httplib2()
super(TestRecordResources, self).setUp()
-
- def _cleanup_test_resource_record(self):
- # clear resource_list.json file
- with open('resource_list.json', 'w') as f:
- f.write('{}')
+ self.rest_client.rec_rw_lock = mock.MagicMock()
def test_post_record_resources(self):
- self.rest_client.record_resources = True
- __, return_dict = self.rest_client.post(self.url, {}, {})
- self.assertEqual({}, return_dict['headers'])
- self.assertEqual({}, return_dict['body'])
-
- def test_resource_record_no_top_key(self):
- test_body_no_key = b'{}'
- self.rest_client.resource_record(test_body_no_key)
+ with patch('builtins.open', mock.mock_open(read_data=b'{}')):
+ self.rest_client.record_resources = True
+ __, return_dict = self.rest_client.post(self.url, {}, {})
+ self.assertEqual({}, return_dict['headers'])
+ self.assertEqual({}, return_dict['body'])
def test_resource_record_dict(self):
- test_dict_body = b'{"project": {"id": "test-id", "name": ""}}\n'
- self.rest_client.resource_record(test_dict_body)
+ mock_resource_list_1 = mock.mock_open(read_data=b'{}')
+ mock_resource_list_2 = mock.mock_open(
+ read_data=b'{"projects": {"test-id": ""}}')
- with open('resource_list.json', 'r') as f:
- content = f.read()
- resource_list_content = json.loads(content)
+ with patch('builtins.open') as mock_open_func:
+ mock_open_func.side_effect = [
+ mock_resource_list_1.return_value,
+ mock_resource_list_2.return_value
+ ]
- test_resource_list = {
- "projects": {"test-id": ""}
- }
- self.assertEqual(resource_list_content, test_resource_list)
+ test_dict_body = b'{"project": {"id": "test-id", "name": ""}}\n'
+ self.rest_client.resource_record(test_dict_body)
- # cleanup
- self._cleanup_test_resource_record()
+ content = mock_resource_list_2().read()
+ resource_list_2 = json.loads(content)
+ test_resource_list_2 = {
+ "projects": {"test-id": ""}
+ }
+ self.assertEqual(resource_list_2, test_resource_list_2)
def test_resource_record_list(self):
- test_list_body = '''{
- "user": [
- {
- "id": "test-uuid",
- "name": "test-name"
- },
- {
- "id": "test-uuid2",
- "name": "test-name2"
- }
+ mock_content_2 = b'{"users": {"test-uuid": "test-name"}}'
+ mock_content_3 = (
+ b'{"users": {"test-uuid": "test-name",'
+ b'"test-uuid2": "test-name2"}}'
+ )
+
+ mock_resource_list_1 = mock.mock_open(read_data=b'{}')
+ mock_resource_list_2 = mock.mock_open(read_data=mock_content_2)
+ mock_resource_list_3 = mock.mock_open(read_data=mock_content_3)
+
+ with patch('builtins.open') as mock_open_func:
+ mock_open_func.side_effect = [
+ mock_resource_list_1.return_value,
+ mock_resource_list_2.return_value,
+ mock_resource_list_3.return_value
]
- }'''
- test_list_body = test_list_body.encode('utf-8')
- self.rest_client.resource_record(test_list_body)
- with open('resource_list.json', 'r') as f:
- content = f.read()
- resource_list_content = json.loads(content)
+ test_list_body = '''{
+ "user": [
+ {
+ "id": "test-uuid",
+ "name": "test-name"
+ },
+ {
+ "id": "test-uuid2",
+ "name": "test-name2"
+ }
+ ]
+ }'''
+ test_list_body = test_list_body.encode('utf-8')
+ self.rest_client.resource_record(test_list_body)
- test_resource_list = {
- "users": {
- "test-uuid": "test-name",
- "test-uuid2": "test-name2"
+ content_2 = mock_resource_list_2().read()
+ resource_list_2 = json.loads(content_2)
+
+ test_resource_list_2 = {
+ "users": {
+ "test-uuid": "test-name"
+ }
}
- }
- self.assertEqual(resource_list_content, test_resource_list)
+ self.assertEqual(resource_list_2, test_resource_list_2)
- # cleanup
- self._cleanup_test_resource_record()
+ content_3 = mock_resource_list_3().read()
+ resource_list_3 = json.loads(content_3)
+
+ test_resource_list_3 = {
+ "users": {
+ "test-uuid": "test-name",
+ "test-uuid2": "test-name2"
+ }
+ }
+ self.assertEqual(resource_list_3, test_resource_list_3)
def test_resource_update_id(self):
data = {}
res_dict = {'id': 'test-uuid', 'name': 'test-name'}
- self.rest_client.rec_rw_lock = mock.MagicMock()
- self.rest_client.resource_update(data, 'user', res_dict)
- result = {'users': {'test-uuid': 'test-name'}}
- self.assertEqual(data, result)
+ with patch('builtins.open', mock.mock_open(read_data=b'{}')):
+ self.rest_client.resource_update(data, 'user', res_dict)
+ result = {'users': {'test-uuid': 'test-name'}}
+ self.assertEqual(data, result)
def test_resource_update_name(self):
data = {'keypairs': {}}
res_dict = {'name': 'test-keypair'}
- self.rest_client.rec_rw_lock = mock.MagicMock()
- self.rest_client.resource_update(data, 'keypair', res_dict)
- result = {'keypairs': {'test-keypair': ""}}
- self.assertEqual(data, result)
+ with patch('builtins.open', mock.mock_open(read_data=b'{}')):
+ self.rest_client.resource_update(data, 'keypair', res_dict)
+ result = {'keypairs': {'test-keypair': ""}}
+ self.assertEqual(data, result)
def test_resource_update_no_id(self):
data = {}
res_dict = {'type': 'test', 'description': 'example'}
- self.rest_client.rec_rw_lock = mock.MagicMock()
- self.rest_client.resource_update(data, 'projects', res_dict)
- result = {'projects': {}}
- self.assertEqual(data, result)
+ with patch('builtins.open', mock.mock_open(read_data=b'{}')):
+ self.rest_client.resource_update(data, 'projects', res_dict)
+ result = {'projects': {}}
+ self.assertEqual(data, result)
def test_resource_update_not_dict(self):
data = {}
res_dict = 'test-string'
- self.rest_client.rec_rw_lock = mock.MagicMock()
- self.rest_client.resource_update(data, 'user', res_dict)
- self.assertEqual(data, {})
+ with patch('builtins.open', mock.mock_open(read_data=b'{}')):
+ self.rest_client.resource_update(data, 'user', res_dict)
+ self.assertEqual(data, {})
class TestResponseBody(base.TestCase):