summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCyril Roelandt <cyril@redhat.com>2022-07-28 20:48:58 +0200
committerCyril Roelandt <cyril@redhat.com>2022-07-28 21:46:35 +0200
commit90eb9d2be62b5eef179edc7d5ab2cb424a6119e0 (patch)
tree826112b1611cf9225961d40c82b2d5f7d2fac527
parent1f3b6634857e346e2be225a5552469213f329194 (diff)
downloadpython-cinderclient-90eb9d2be62b5eef179edc7d5ab2cb424a6119e0.tar.gz
Python3.11: Fix argparse-related test failures
In Python3.11, the following code crashes: $ cat test.py import argparse parser = argparse.ArgumentParser(description='Short sample app') subparsers = parser.add_subparsers() subparsers.add_parser('foo') subparsers.add_parser('foo') $ python3.11 test.py Traceback (most recent call last): File "/tmp/arg.py", line 6, in <module> subparsers.add_parser('foo') File "/usr/lib/python3.11/argparse.py", line 1197, in add_parser raise ArgumentError(self, _('conflicting subparser: %s') % name) argparse.ArgumentError: argument {foo}: conflicting subparser: foo It is now forbidden to use add_parser() multiple times with the same arguments, which is exactly what we do in the following tests: - cinderclient.tests.unit.test_shell.TestLoadVersionedActions.test_load_versioned_actions - cinderclient.tests.unit.test_shell.TestLoadVersionedActions.test_load_actions_with_versioned_args In order to fix the tests failures, we make sure to reset the parser and subparsers before calling add_parser(). While not strictly necessary, we split those tests into two functions, for readability purposes. Closes-Bug: #1983054 Change-Id: I2d4cb81a394f3c10e5f01945d894746a904fb5df
-rw-r--r--cinderclient/tests/unit/test_shell.py17
1 files changed, 13 insertions, 4 deletions
diff --git a/cinderclient/tests/unit/test_shell.py b/cinderclient/tests/unit/test_shell.py
index 682d509..8f236c6 100644
--- a/cinderclient/tests/unit/test_shell.py
+++ b/cinderclient/tests/unit/test_shell.py
@@ -376,7 +376,7 @@ class TestLoadVersionedActions(utils.TestCase):
self.mock_completion()
- def test_load_versioned_actions(self):
+ def test_load_versioned_actions_v3_0(self):
parser = cinderclient.shell.CinderClientArgumentParser()
subparsers = parser.add_subparsers(metavar='<subcommand>')
shell = cinderclient.shell.OpenStackCinderShell()
@@ -388,6 +388,10 @@ class TestLoadVersionedActions(utils.TestCase):
"fake_action 3.0 to 3.1",
shell.subcommands['fake-action'].get_default('func')())
+ def test_load_versioned_actions_v3_2(self):
+ parser = cinderclient.shell.CinderClientArgumentParser()
+ subparsers = parser.add_subparsers(metavar='<subcommand>')
+ shell = cinderclient.shell.OpenStackCinderShell()
shell.subcommands = {}
shell._find_actions(subparsers, fake_actions_module,
api_versions.APIVersion("3.2"), False, [])
@@ -521,7 +525,7 @@ class TestLoadVersionedActions(utils.TestCase):
@mock.patch.object(cinderclient.shell.CinderClientArgumentParser,
'add_argument')
- def test_load_actions_with_versioned_args(self, mock_add_arg):
+ def test_load_actions_with_versioned_args_v36(self, mock_add_arg):
parser = cinderclient.shell.CinderClientArgumentParser(add_help=False)
subparsers = parser.add_subparsers(metavar='<subcommand>')
shell = cinderclient.shell.OpenStackCinderShell()
@@ -533,8 +537,13 @@ class TestLoadVersionedActions(utils.TestCase):
self.assertNotIn(mock.call('--foo', help="second foo"),
mock_add_arg.call_args_list)
- mock_add_arg.reset_mock()
-
+ @mock.patch.object(cinderclient.shell.CinderClientArgumentParser,
+ 'add_argument')
+ def test_load_actions_with_versioned_args_v39(self, mock_add_arg):
+ parser = cinderclient.shell.CinderClientArgumentParser(add_help=False)
+ subparsers = parser.add_subparsers(metavar='<subcommand>')
+ shell = cinderclient.shell.OpenStackCinderShell()
+ shell.subcommands = {}
shell._find_actions(subparsers, fake_actions_module,
api_versions.APIVersion("3.9"), False, [])
self.assertNotIn(mock.call('--foo', help="first foo"),