From 6caf3fabbbded0790142edfd51dc693166d669c2 Mon Sep 17 00:00:00 2001 From: Martin Kopec Date: Sun, 20 Jan 2019 15:24:10 +0000 Subject: [PATCH] Fix tempest cleanup for python3 When using python3 the file which is read and loaded by jsonutils needs to be opened in binary mode, otherwise, it's causing problems. It is a known bug [1] in jsonutils from oslo.serialization module. The patch also adds a unit test which tests the loading of a json file. [1] https://bugs.launchpad.net/oslo.serialization/+bug/1515231 Closes-Bug: #1806089 Change-Id: I3db71c6662d9137a4b75381de7d6dbddd3de4e09 --- tempest/cmd/cleanup.py | 4 +-- tempest/tests/cmd/test_cleanup.py | 26 ++++++++++++++++++++ tempest/tests/cmd/test_saved_state_json.json | 16 ++++++++++++ 3 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 tempest/tests/cmd/test_cleanup.py create mode 100644 tempest/tests/cmd/test_saved_state_json.json diff --git a/tempest/cmd/cleanup.py b/tempest/cmd/cleanup.py index 2f54f9a642..8e686981a4 100644 --- a/tempest/cmd/cleanup.py +++ b/tempest/cmd/cleanup.py @@ -309,9 +309,9 @@ class TempestCleanup(command.Command): f.write(json.dumps(data, sort_keys=True, indent=2, separators=(',', ': '))) - def _load_json(self): + def _load_json(self, saved_state_json=SAVED_STATE_JSON): try: - with open(SAVED_STATE_JSON) as json_file: + with open(saved_state_json, 'rb') as json_file: self.json_data = json.load(json_file) except IOError as ex: diff --git a/tempest/tests/cmd/test_cleanup.py b/tempest/tests/cmd/test_cleanup.py new file mode 100644 index 0000000000..e4e8525703 --- /dev/null +++ b/tempest/tests/cmd/test_cleanup.py @@ -0,0 +1,26 @@ +# Copyright 2018 Red Hat, Inc. +# +# 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. + +from tempest.cmd import cleanup +from tempest.tests import base + + +class TestTempestCleanup(base.TestCase): + + def test_load_json(self): + # instatiate "empty" TempestCleanup + c = cleanup.TempestCleanup(None, None, 'test') + test_saved_json = 'tempest/tests/cmd/test_saved_state_json.json' + # test if the file is loaded without any issues/exceptions + c._load_json(test_saved_json) diff --git a/tempest/tests/cmd/test_saved_state_json.json b/tempest/tests/cmd/test_saved_state_json.json new file mode 100644 index 0000000000..5c55331b8f --- /dev/null +++ b/tempest/tests/cmd/test_saved_state_json.json @@ -0,0 +1,16 @@ +{ + "domains": { + "default": "Default" + }, + "flavors": { + "1": "m1.tiny" + }, + "images": {}, + "projects": { + "268bcb63488b4aa2942ecaac0f85ed62": "demo" + }, + "roles": {}, + "users": { + "023e65a5922a454585a91c6af8310968": "demo" + } +}