From 79ef24a784eba24c50a14a8d9e0b41cc2d51dfd3 Mon Sep 17 00:00:00 2001 From: Andreas Jaeger Date: Sat, 11 Jan 2020 20:37:41 +0100 Subject: [PATCH] Remove six usage (2/2) This repo does not support Python 2 anymore, so we don't need six for compatibility between Python2 and 3, convert six usage to Python 3 code. This changes urllib usage. mock.patch usage in heat_dashboard/test/tests/api/test_heat.py is modified to cope with the mix usage of urllib from python3 (in heat-dashboard) and six.moves.urllib (in heatclient). In the case of the mix usage, patching urllib.request.urlopen() only does not work as urllib.request.urlopen() is not called after resolving a lazy loading in six and the resolved object is six.moves.urllib.request is called. The previous code depends on the behavior in heatclient read_url_content() and the method should be mocked instead. Considering this, mocking in api/test_heat.py is modified to mock direct methods called in the heat-dashboard code. Co-Authored-By: Akihiro Motoki Change-Id: Icf3f889770242b02023fe22c405cfa2d823581a5 Needed-By: https://review.opendev.org/701743 --- heat_dashboard/api/heat.py | 2 +- heat_dashboard/test/tests/api/test_heat.py | 22 +++++++++++++--------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/heat_dashboard/api/heat.py b/heat_dashboard/api/heat.py index 09286e9b..4fce648a 100644 --- a/heat_dashboard/api/heat.py +++ b/heat_dashboard/api/heat.py @@ -12,7 +12,7 @@ import contextlib -from six.moves.urllib import request +from urllib import request from django.conf import settings from oslo_serialization import jsonutils diff --git a/heat_dashboard/test/tests/api/test_heat.py b/heat_dashboard/test/tests/api/test_heat.py index d00118cd..0527257d 100644 --- a/heat_dashboard/test/tests/api/test_heat.py +++ b/heat_dashboard/test/tests/api/test_heat.py @@ -13,7 +13,6 @@ import io import mock -import six from django.conf import settings from django.test.utils import override_settings @@ -257,8 +256,8 @@ class HeatApiTests(test.APITestCase): files = api.heat.get_template_files(template_data=tmpl)[0] self.assertEqual(files, expected_files) - @mock.patch.object(six.moves.urllib.request, 'urlopen') - def test_get_template_files(self, mock_request): + @mock.patch('heatclient.common.utils.read_url_content') + def test_get_template_files(self, mock_read_url_content): tmpl = ''' # comment @@ -276,14 +275,16 @@ class HeatApiTests(test.APITestCase): expected_files = {u'http://test.example/example': b'echo "test"'} url = 'http://test.example/example' data = b'echo "test"' - mock_request.return_value = io.BytesIO(data) + mock_read_url_content.return_value = data files = api.heat.get_template_files(template_data=tmpl)[0] self.assertEqual(files, expected_files) - mock_request.assert_called_once_with(url) + mock_read_url_content.assert_called_once_with(url) - @mock.patch.object(six.moves.urllib.request, 'urlopen') - def test_get_template_files_with_template_url(self, mock_request): + @mock.patch('urllib.request.urlopen') + @mock.patch('heatclient.common.utils.read_url_content') + def test_get_template_files_with_template_url(self, mock_read_url_content, + mock_request): url = 'https://test.example/example.yaml' data = b''' # comment @@ -301,11 +302,14 @@ class HeatApiTests(test.APITestCase): ''' data2 = b'echo "test"' expected_files = {'http://test.example/example': b'echo "test"'} - mock_request.side_effect = \ - [io.BytesIO(data), io.BytesIO(data2)] + mock_request.return_value = io.BytesIO(data) + mock_read_url_content.return_value = data2 files = api.heat.get_template_files(template_url=url)[0] self.assertEqual(files, expected_files) + mock_request.assert_called_once_with(url) + mock_read_url_content.assert_called_once_with( + 'http://test.example/example') def test_get_template_files_invalid(self): tmpl = '''