From 4704b32a5cb0773e88acfa042366e2a3972df3e3 Mon Sep 17 00:00:00 2001 From: Akihiro Motoki Date: Sat, 18 Aug 2018 16:42:13 +0900 Subject: [PATCH] Drop mox usage in Selenium tests Selenium tests now runs in our gate, so this is the time to migrate them to mock. The arguments of the first calls of image_list_detailed in test_modal_create_image_from_url and test_modal_create_image_from_file need to be updated. It seems mox did not check arguments strictly. blueprint mock-framework-in-unit-tests Change-Id: If60734d6dbd667fe37ffe64858b93f503e6b8386 --- .../dashboards/project/images/tests.py | 86 ++++++++----------- openstack_dashboard/test/helpers.py | 3 - 2 files changed, 38 insertions(+), 51 deletions(-) diff --git a/openstack_dashboard/dashboards/project/images/tests.py b/openstack_dashboard/dashboards/project/images/tests.py index 8887cc4d68..938ca82628 100644 --- a/openstack_dashboard/dashboards/project/images/tests.py +++ b/openstack_dashboard/dashboards/project/images/tests.py @@ -22,11 +22,9 @@ from socket import timeout as socket_timeout import tempfile import unittest -from django import http from django.urls import reverse import mock -from mox3.mox import IsA import six from horizon import exceptions @@ -357,22 +355,11 @@ class ImagesAndSnapshotsUtilsTests(BaseImagesTestCase): class SeleniumTests(test.SeleniumTestCase): - @test.create_stubs({api.glance: ('image_list_detailed',)}) + @test.create_mocks({api.glance: ('image_list_detailed',)}) def test_modal_create_image_from_url(self): driver = self.selenium images = self.images.list() - api.glance.image_list_detailed(IsA(http.HttpRequest), - marker=None).AndReturn([images, - False, False]) - filters = {'disk_format': 'aki'} - api.glance.image_list_detailed( - IsA(http.HttpRequest), filters=filters).AndReturn( - [self.images.list(), False, False]) - filters = {'disk_format': 'ari'} - api.glance.image_list_detailed( - IsA(http.HttpRequest), filters=filters).AndReturn( - [self.images.list(), False, False]) - self.mox.ReplayAll() + self.mock_image_list_detailed.return_value = [images, False, False] driver.get("%s%s" % (self.live_server_url, INDEX_URL)) @@ -390,24 +377,21 @@ class SeleniumTests(test.SeleniumTestCase): self.assertIn("ISO", body.text, "ISO should be selected when the extension is *.iso") + self.assertEqual(3, self.mock_image_list_detailed.call_count) + self.mock_image_list_detailed.assert_has_calls([ + mock.call(test.IsHttpRequest(), marker=None, paginate=True, + reversed_order=False, sort_dir='asc', sort_key='name'), + mock.call(test.IsHttpRequest(), filters={'disk_format': 'aki'}), + mock.call(test.IsHttpRequest(), filters={'disk_format': 'ari'}), + ]) + @unittest.skipIf(os.environ.get('SELENIUM_PHANTOMJS'), "PhantomJS cannot test file upload widgets.") - @test.create_stubs({api.glance: ('image_list_detailed',)}) + @test.create_mocks({api.glance: ('image_list_detailed',)}) def test_modal_create_image_from_file(self): driver = self.selenium images = self.images.list() - api.glance.image_list_detailed(IsA(http.HttpRequest), - marker=None).AndReturn([images, - False, False]) - filters = {'disk_format': 'aki'} - api.glance.image_list_detailed( - IsA(http.HttpRequest), filters=filters).AndReturn( - [self.images.list(), False, False]) - filters = {'disk_format': 'ari'} - api.glance.image_list_detailed( - IsA(http.HttpRequest), filters=filters).AndReturn( - [self.images.list(), False, False]) - self.mox.ReplayAll() + self.mock_image_list_detailed.return_value = [images, False, False] driver.get("%s%s" % (self.live_server_url, INDEX_URL)) @@ -426,18 +410,19 @@ class SeleniumTests(test.SeleniumTestCase): self.assertIn("ISO", body.text, "ISO should be selected when the extension is *.iso") - @test.create_stubs({api.glance: ('image_list_detailed',)}) + self.assertEqual(3, self.mock_image_list_detailed.call_count) + self.mock_image_list_detailed.assert_has_calls([ + mock.call(test.IsHttpRequest(), marker=None, paginate=True, + reversed_order=False, sort_dir='asc', sort_key='name'), + mock.call(test.IsHttpRequest(), filters={'disk_format': 'aki'}), + mock.call(test.IsHttpRequest(), filters={'disk_format': 'ari'}), + ]) + + @test.create_mocks({api.glance: ('image_list_detailed',)}) def test_create_image_from_url(self): driver = self.selenium - filters = {'disk_format': 'aki'} - api.glance.image_list_detailed( - IsA(http.HttpRequest), filters=filters).AndReturn( - [self.images.list(), False, False]) - filters = {'disk_format': 'ari'} - api.glance.image_list_detailed( - IsA(http.HttpRequest), filters=filters).AndReturn( - [self.images.list(), False, False]) - self.mox.ReplayAll() + self.mock_image_list_detailed.return_value = [self.images.list(), + False, False] driver.get("%s%s" % (self.live_server_url, CREATE_URL)) wait = self.ui.WebDriverWait(driver, 10, @@ -453,20 +438,19 @@ class SeleniumTests(test.SeleniumTestCase): self.assertIn("ISO", body.text, "ISO should be selected when the extension is *.iso") + self.assertEqual(2, self.mock_image_list_detailed.call_count) + self.mock_image_list_detailed.assert_has_calls([ + mock.call(test.IsHttpRequest(), filters={'disk_format': 'aki'}), + mock.call(test.IsHttpRequest(), filters={'disk_format': 'ari'}), + ]) + @unittest.skipIf(os.environ.get('SELENIUM_PHANTOMJS'), "PhantomJS cannot test file upload widgets.") - @test.create_stubs({api.glance: ('image_list_detailed',)}) + @test.create_mocks({api.glance: ('image_list_detailed',)}) def test_create_image_from_file(self): driver = self.selenium - filters = {'disk_format': 'aki'} - api.glance.image_list_detailed( - IsA(http.HttpRequest), filters=filters).AndReturn( - [self.images.list(), False, False]) - filters = {'disk_format': 'ari'} - api.glance.image_list_detailed( - IsA(http.HttpRequest), filters=filters).AndReturn( - [self.images.list(), False, False]) - self.mox.ReplayAll() + self.mock_image_list_detailed.return_value = [self.images.list(), + False, False] driver.get("%s%s" % (self.live_server_url, CREATE_URL)) wait = self.ui.WebDriverWait(driver, 10, @@ -482,3 +466,9 @@ class SeleniumTests(test.SeleniumTestCase): self.assertIn("ISO", body.text, "ISO should be selected when the extension is *.iso") + + self.assertEqual(2, self.mock_image_list_detailed.call_count) + self.mock_image_list_detailed.assert_has_calls([ + mock.call(test.IsHttpRequest(), filters={'disk_format': 'aki'}), + mock.call(test.IsHttpRequest(), filters={'disk_format': 'ari'}), + ]) diff --git a/openstack_dashboard/test/helpers.py b/openstack_dashboard/test/helpers.py index 052ab654c0..be73f67c44 100644 --- a/openstack_dashboard/test/helpers.py +++ b/openstack_dashboard/test/helpers.py @@ -641,7 +641,6 @@ class SeleniumTestCase(horizon_helpers.SeleniumTestCase): super(SeleniumTestCase, self).setUp() test_utils.load_test_data(self) - self.mox = mox.Mox() self._real_get_user = utils.get_user self.setActiveUser(id=self.user.id, @@ -654,10 +653,8 @@ class SeleniumTestCase(horizon_helpers.SeleniumTestCase): os.environ["HORIZON_TEST_RUN"] = "True" def tearDown(self): - self.mox.UnsetStubs() utils.get_user = self._real_get_user mock.patch.stopall() - self.mox.VerifyAll() del os.environ["HORIZON_TEST_RUN"] def setActiveUser(self, id=None, token=None, username=None, tenant_id=None,