summaryrefslogtreecommitdiff
path: root/openstackclient/tests/unit/common
diff options
context:
space:
mode:
authorArtem Goncharov <Artem.goncharov@gmail.com>2020-06-09 11:35:46 +0200
committerArtem Goncharov <artem.goncharov@gmail.com>2021-02-02 08:14:34 +0000
commit119d2fae2567285b9149b2c737d7d4452b59288c (patch)
tree8e9bef2e7bb22131a052cbf70a7365bda49ad88a /openstackclient/tests/unit/common
parent01a53fa96fe2fbd67682850ee7ce9ab140c9211b (diff)
downloadpython-openstackclient-119d2fae2567285b9149b2c737d7d4452b59288c.tar.gz
project cleanup
New implementation of the project cleanup based on the sdk.project_cleanup. It is implemented as an additional OSC operation and will ideally obsolete the `openstack project purge` giving flexibility to extend services support, parallelization, filters, etc. Change-Id: Ie08877f182379f73e5ec5ad4daaf84b3092c829c
Diffstat (limited to 'openstackclient/tests/unit/common')
-rw-r--r--openstackclient/tests/unit/common/test_project_cleanup.py183
1 files changed, 183 insertions, 0 deletions
diff --git a/openstackclient/tests/unit/common/test_project_cleanup.py b/openstackclient/tests/unit/common/test_project_cleanup.py
new file mode 100644
index 00000000..d235aeb0
--- /dev/null
+++ b/openstackclient/tests/unit/common/test_project_cleanup.py
@@ -0,0 +1,183 @@
+# 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 io import StringIO
+from unittest import mock
+
+from openstackclient.common import project_cleanup
+from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
+from openstackclient.tests.unit import utils as tests_utils
+
+
+class TestProjectCleanupBase(tests_utils.TestCommand):
+
+ def setUp(self):
+ super(TestProjectCleanupBase, self).setUp()
+
+ self.app.client_manager.sdk_connection = mock.Mock()
+
+
+class TestProjectCleanup(TestProjectCleanupBase):
+
+ project = identity_fakes.FakeProject.create_one_project()
+
+ def setUp(self):
+ super(TestProjectCleanup, self).setUp()
+ self.cmd = project_cleanup.ProjectCleanup(self.app, None)
+
+ self.project_cleanup_mock = mock.Mock()
+ self.sdk_connect_as_project_mock = \
+ mock.Mock(return_value=self.app.client_manager.sdk_connection)
+ self.app.client_manager.sdk_connection.project_cleanup = \
+ self.project_cleanup_mock
+ self.app.client_manager.sdk_connection.identity.find_project = \
+ mock.Mock(return_value=self.project)
+ self.app.client_manager.sdk_connection.connect_as_project = \
+ self.sdk_connect_as_project_mock
+
+ def test_project_no_options(self):
+ arglist = []
+ verifylist = []
+
+ self.assertRaises(tests_utils.ParserException, self.check_parser,
+ self.cmd, arglist, verifylist)
+
+ def test_project_cleanup_with_filters(self):
+ arglist = [
+ '--project', self.project.id,
+ '--created-before', '2200-01-01',
+ '--updated-before', '2200-01-02'
+ ]
+ verifylist = [
+ ('dry_run', False),
+ ('auth_project', False),
+ ('project', self.project.id),
+ ('created_before', '2200-01-01'),
+ ('updated_before', '2200-01-02')
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ result = None
+
+ with mock.patch('sys.stdin', StringIO('y')):
+ result = self.cmd.take_action(parsed_args)
+
+ self.sdk_connect_as_project_mock.assert_called_with(
+ self.project)
+ filters = {
+ 'created_at': '2200-01-01',
+ 'updated_at': '2200-01-02'
+ }
+
+ calls = [
+ mock.call(dry_run=True, status_queue=mock.ANY, filters=filters),
+ mock.call(dry_run=False, status_queue=mock.ANY, filters=filters)
+ ]
+ self.project_cleanup_mock.assert_has_calls(calls)
+
+ self.assertIsNone(result)
+
+ def test_project_cleanup_with_project(self):
+ arglist = [
+ '--project', self.project.id,
+ ]
+ verifylist = [
+ ('dry_run', False),
+ ('auth_project', False),
+ ('project', self.project.id),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ result = None
+
+ with mock.patch('sys.stdin', StringIO('y')):
+ result = self.cmd.take_action(parsed_args)
+
+ self.sdk_connect_as_project_mock.assert_called_with(
+ self.project)
+ calls = [
+ mock.call(dry_run=True, status_queue=mock.ANY, filters={}),
+ mock.call(dry_run=False, status_queue=mock.ANY, filters={})
+ ]
+ self.project_cleanup_mock.assert_has_calls(calls)
+
+ self.assertIsNone(result)
+
+ def test_project_cleanup_with_project_abort(self):
+ arglist = [
+ '--project', self.project.id,
+ ]
+ verifylist = [
+ ('dry_run', False),
+ ('auth_project', False),
+ ('project', self.project.id),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ result = None
+
+ with mock.patch('sys.stdin', StringIO('n')):
+ result = self.cmd.take_action(parsed_args)
+
+ self.sdk_connect_as_project_mock.assert_called_with(
+ self.project)
+ calls = [
+ mock.call(dry_run=True, status_queue=mock.ANY, filters={}),
+ ]
+ self.project_cleanup_mock.assert_has_calls(calls)
+
+ self.assertIsNone(result)
+
+ def test_project_cleanup_with_dry_run(self):
+ arglist = [
+ '--dry-run',
+ '--project', self.project.id,
+ ]
+ verifylist = [
+ ('dry_run', True),
+ ('auth_project', False),
+ ('project', self.project.id),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ result = None
+
+ result = self.cmd.take_action(parsed_args)
+
+ self.sdk_connect_as_project_mock.assert_called_with(
+ self.project)
+ self.project_cleanup_mock.assert_called_once_with(
+ dry_run=True, status_queue=mock.ANY, filters={})
+
+ self.assertIsNone(result)
+
+ def test_project_cleanup_with_auth_project(self):
+ self.app.client_manager.auth_ref = mock.Mock()
+ self.app.client_manager.auth_ref.project_id = self.project.id
+ arglist = [
+ '--auth-project',
+ ]
+ verifylist = [
+ ('dry_run', False),
+ ('auth_project', True),
+ ('project', None),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ result = None
+
+ with mock.patch('sys.stdin', StringIO('y')):
+ result = self.cmd.take_action(parsed_args)
+
+ self.sdk_connect_as_project_mock.assert_not_called()
+ calls = [
+ mock.call(dry_run=True, status_queue=mock.ANY, filters={}),
+ mock.call(dry_run=False, status_queue=mock.ANY, filters={})
+ ]
+ self.project_cleanup_mock.assert_has_calls(calls)
+
+ self.assertIsNone(result)