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
diff --git a/tempest/cmd/cleanup.py b/tempest/cmd/cleanup.py
index 2f54f9a..8e68698 100644
--- a/tempest/cmd/cleanup.py
+++ b/tempest/cmd/cleanup.py
@@ -309,9 +309,9 @@
             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 0000000..e4e8525
--- /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 0000000..5c55331
--- /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"
+  }
+}