From edf18bd6d3ff1d053d418815bf50c1ded21bc187 Mon Sep 17 00:00:00 2001 From: Hang Date: Tue, 18 Jul 2023 16:43:26 +0800 Subject: [PATCH 01/21] Init --- azure-pipelines-full-tests.yml | 18 +++++++++--------- azure-pipelines.yml | 20 ++++++++++---------- scripts/ci/build.sh | 1 + src/azure-cli-core/setup.py | 1 + src/azure-cli-telemetry/setup.py | 1 + src/azure-cli-testsdk/setup.py | 1 + src/azure-cli/setup.py | 1 + 7 files changed, 24 insertions(+), 19 deletions(-) diff --git a/azure-pipelines-full-tests.yml b/azure-pipelines-full-tests.yml index 33980164884..e0a1f47c119 100644 --- a/azure-pipelines-full-tests.yml +++ b/azure-pipelines-full-tests.yml @@ -25,8 +25,8 @@ jobs: matrix: Python39: python.version: '3.9' - Python310: - python.version: '3.10' + Python311: + python.version: '3.11' steps: - template: .azure-pipelines/templates/automation_test.yml parameters: @@ -44,8 +44,8 @@ jobs: matrix: Python39: python.version: '3.9' - Python310: - python.version: '3.10' + Python311: + python.version: '3.11' steps: - template: .azure-pipelines/templates/automation_test.yml parameters: @@ -63,8 +63,8 @@ jobs: matrix: Python39: python.version: '3.9' - Python310: - python.version: '3.10' + Python311: + python.version: '3.11' steps: - template: .azure-pipelines/templates/automation_test.yml parameters: @@ -107,8 +107,8 @@ jobs: fullTest: true jobName: 'FullTest' -- job: AutomationFullTestPython310ProfileLatest - displayName: Automation Full Test Python310 Profile Latest +- job: AutomationFullTestPython311ProfileLatest + displayName: Automation Full Test Python311 Profile Latest timeoutInMinutes: 9999 strategy: maxParallel: 8 @@ -147,7 +147,7 @@ jobs: - AutomationTest20190301 - AutomationTest20180301 - AutomationFullTestPython39ProfileLatest - - AutomationFullTestPython310ProfileLatest + - AutomationFullTestPython311ProfileLatest condition: and(failed(), in(variables['Build.Reason'], 'BatchedCI')) displayName: Notify CI Errors pool: diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 60d6c362f84..9c0cf09ae8b 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -455,8 +455,8 @@ jobs: matrix: Python39: python.version: '3.9' - Python310: - python.version: '3.10' + Python311: + python.version: '3.11' steps: - template: .azure-pipelines/templates/automation_test.yml parameters: @@ -472,8 +472,8 @@ jobs: matrix: Python39: python.version: '3.9' - Python310: - python.version: '3.10' + Python311: + python.version: '3.11' steps: - template: .azure-pipelines/templates/automation_test.yml parameters: @@ -492,8 +492,8 @@ jobs: matrix: Python39: python.version: '3.9' - Python310: - python.version: '3.10' + Python311: + python.version: '3.11' steps: - task: UsePythonVersion@0 displayName: 'Use Python $(python.version)' @@ -513,8 +513,8 @@ jobs: name: ${{ variables.ubuntu_pool }} strategy: matrix: - Python310: - python.version: '3.10' + Python311: + python.version: '3.11' steps: - task: UsePythonVersion@0 displayName: 'Use Python $(python.version)' @@ -1015,8 +1015,8 @@ jobs: matrix: Python39: python.version: '3.9' - Python310: - python.version: '3.10' + Python311: + python.version: '3.11' pool: name: ${{ variables.ubuntu_pool }} steps: diff --git a/scripts/ci/build.sh b/scripts/ci/build.sh index 45efa04313c..671b5d62ec7 100755 --- a/scripts/ci/build.sh +++ b/scripts/ci/build.sh @@ -101,6 +101,7 @@ CLASSIFIERS = [ 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', + 'Programming Language :: Python :: 3.11', 'License :: OSI Approved :: MIT License', ] diff --git a/src/azure-cli-core/setup.py b/src/azure-cli-core/setup.py index 337f580edd1..1e7fc52702c 100644 --- a/src/azure-cli-core/setup.py +++ b/src/azure-cli-core/setup.py @@ -38,6 +38,7 @@ 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', + 'Programming Language :: Python :: 3.11', 'License :: OSI Approved :: MIT License', ] diff --git a/src/azure-cli-telemetry/setup.py b/src/azure-cli-telemetry/setup.py index 47a7de57d5a..166ecde27ce 100755 --- a/src/azure-cli-telemetry/setup.py +++ b/src/azure-cli-telemetry/setup.py @@ -19,6 +19,7 @@ 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', + 'Programming Language :: Python :: 3.11', 'License :: OSI Approved :: MIT License', ] diff --git a/src/azure-cli-testsdk/setup.py b/src/azure-cli-testsdk/setup.py index 34d228b5de9..56ffeb6be42 100644 --- a/src/azure-cli-testsdk/setup.py +++ b/src/azure-cli-testsdk/setup.py @@ -18,6 +18,7 @@ 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', + 'Programming Language :: Python :: 3.11', 'License :: OSI Approved :: MIT License', ] diff --git a/src/azure-cli/setup.py b/src/azure-cli/setup.py index b0c55538038..aade14c5725 100644 --- a/src/azure-cli/setup.py +++ b/src/azure-cli/setup.py @@ -45,6 +45,7 @@ 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', + 'Programming Language :: Python :: 3.11', 'License :: OSI Approved :: MIT License', ] From e2852ecde85691f9c1c2c939bf71c0a7295af42b Mon Sep 17 00:00:00 2001 From: Hang Date: Tue, 18 Jul 2023 17:15:32 +0800 Subject: [PATCH 02/21] Replace inspect.getargspec --- src/azure-cli-core/azure/cli/core/util.py | 2 +- .../azure/cli/testsdk/scenario_tests/utilities.py | 2 +- .../vendored_sdks/azure_keyvault_t1/key_vault_authentication.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/azure-cli-core/azure/cli/core/util.py b/src/azure-cli-core/azure/cli/core/util.py index ee903887fc8..8a63201a4d7 100644 --- a/src/azure-cli-core/azure/cli/core/util.py +++ b/src/azure-cli-core/azure/cli/core/util.py @@ -661,7 +661,7 @@ def get_arg_list(op): sig = inspect.signature(op) return sig.parameters except AttributeError: - sig = inspect.getargspec(op) # pylint: disable=deprecated-method + sig = inspect.getfullargspec(op) return sig.args diff --git a/src/azure-cli-testsdk/azure/cli/testsdk/scenario_tests/utilities.py b/src/azure-cli-testsdk/azure/cli/testsdk/scenario_tests/utilities.py index 98be0bccebc..af7b7680dba 100644 --- a/src/azure-cli-testsdk/azure/cli/testsdk/scenario_tests/utilities.py +++ b/src/azure-cli-testsdk/azure/cli/testsdk/scenario_tests/utilities.py @@ -70,7 +70,7 @@ def trim_kwargs_from_test_function(fn, kwargs): # the next function is the actual test function. the kwargs need to be trimmed so # that parameters which are not required will not be passed to it. if not is_preparer_func(fn): - args, _, kw, _ = inspect.getargspec(fn) # pylint: disable=deprecated-method + args, _, kw, *_ = inspect.getfullargspec(fn) if kw is None: args = set(args) for key in [k for k in kwargs if k not in args]: diff --git a/src/azure-cli/azure/cli/command_modules/keyvault/vendored_sdks/azure_keyvault_t1/key_vault_authentication.py b/src/azure-cli/azure/cli/command_modules/keyvault/vendored_sdks/azure_keyvault_t1/key_vault_authentication.py index 095645afe07..523c218545f 100644 --- a/src/azure-cli/azure/cli/command_modules/keyvault/vendored_sdks/azure_keyvault_t1/key_vault_authentication.py +++ b/src/azure-cli/azure/cli/command_modules/keyvault/vendored_sdks/azure_keyvault_t1/key_vault_authentication.py @@ -59,7 +59,7 @@ def __init__(self, authorization_callback): # for backwards compatibility we need to support callbacks which don't accept the scheme def _auth_callback_compat(self, server, resource, scope, scheme): return self._user_callback(server, resource, scope) \ - if len(inspect.getargspec(self._user_callback).args) == 3 \ + if len(inspect.getfullargspec(self._user_callback).args) == 3 \ else self._user_callback(server, resource, scope, scheme) def __call__(self, request): From c5dec5a943651116ba4912e5c960e9d6b4e1ec38 Mon Sep 17 00:00:00 2001 From: Hang Date: Thu, 20 Jul 2023 17:59:16 +0800 Subject: [PATCH 03/21] Fix mock_get_extension --- .../azure/cli/core/tests/test_command_registration.py | 8 ++++---- src/azure-cli-core/azure/cli/core/tests/test_parser.py | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/azure-cli-core/azure/cli/core/tests/test_command_registration.py b/src/azure-cli-core/azure/cli/core/tests/test_command_registration.py index 5bad0b2f311..f25b8d1d609 100644 --- a/src/azure-cli-core/azure/cli/core/tests/test_command_registration.py +++ b/src/azure-cli-core/azure/cli/core/tests/test_command_registration.py @@ -160,10 +160,10 @@ def _mock_get_extension_modname(ext_name, ext_dir): return "azext_always_loaded" def _mock_get_extensions(): - MockExtension = namedtuple('Extension', ['name', 'preview', 'experimental', 'path', 'get_metadata']) - return [MockExtension(name=__name__ + '.ExtCommandsLoader', preview=False, experimental=False, path=None, get_metadata=lambda: {}), - MockExtension(name=__name__ + '.Ext2CommandsLoader', preview=False, experimental=False, path=None, get_metadata=lambda: {}), - MockExtension(name=__name__ + '.ExtAlwaysLoadedCommandsLoader', preview=False, experimental=False, path=None, get_metadata=lambda: {})] + MockExtension = namedtuple('Extension', ['name', 'preview', 'experimental', 'path', 'get_metadata', 'version', 'ext_type']) + return [MockExtension(name=__name__ + '.ExtCommandsLoader', preview=False, experimental=False, path=None, get_metadata=lambda: {}, version='0.0.1', ext_type='dev'), + MockExtension(name=__name__ + '.Ext2CommandsLoader', preview=False, experimental=False, path=None, get_metadata=lambda: {}, version='0.0.1', ext_type='dev'), + MockExtension(name=__name__ + '.ExtAlwaysLoadedCommandsLoader', preview=False, experimental=False, path=None, get_metadata=lambda: {}, version='0.0.1', ext_type='dev')] def _mock_load_command_loader(loader, args, name, prefix): diff --git a/src/azure-cli-core/azure/cli/core/tests/test_parser.py b/src/azure-cli-core/azure/cli/core/tests/test_parser.py index db37b2fc05a..13b8524e46b 100644 --- a/src/azure-cli-core/azure/cli/core/tests/test_parser.py +++ b/src/azure-cli-core/azure/cli/core/tests/test_parser.py @@ -144,9 +144,9 @@ def _mock_extension_modname(ext_name, ext_dir): return ext_name def _mock_get_extensions(**kwargs): - MockExtension = namedtuple('Extension', ['name', 'preview', 'experimental', 'path', 'get_metadata']) - return [MockExtension(name=__name__ + '.ExtCommandsLoader', preview=False, experimental=False, path=None, get_metadata=lambda: {}), - MockExtension(name=__name__ + '.Ext2CommandsLoader', preview=False, experimental=False, path=None, get_metadata=lambda: {})] + MockExtension = namedtuple('Extension', ['name', 'preview', 'experimental', 'path', 'get_metadata', 'version', 'ext_type']) + return [MockExtension(name=__name__ + '.ExtCommandsLoader', preview=False, experimental=False, path=None, get_metadata=lambda: {}, version='0.0.1', ext_type='dev'), + MockExtension(name=__name__ + '.Ext2CommandsLoader', preview=False, experimental=False, path=None, get_metadata=lambda: {}, version='0.0.1', ext_type='dev')] def _mock_load_command_loader(loader, args, name, prefix): from enum import Enum From f91ee2325f068411be85b161fe3dce7b2e24bd2d Mon Sep 17 00:00:00 2001 From: Hang Date: Fri, 21 Jul 2023 16:01:15 +0800 Subject: [PATCH 04/21] Fix mock error --- .../azure/cli/core/tests/test_command_registration.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/azure-cli-core/azure/cli/core/tests/test_command_registration.py b/src/azure-cli-core/azure/cli/core/tests/test_command_registration.py index f25b8d1d609..afb635a0ffa 100644 --- a/src/azure-cli-core/azure/cli/core/tests/test_command_registration.py +++ b/src/azure-cli-core/azure/cli/core/tests/test_command_registration.py @@ -298,10 +298,10 @@ def _check_index(): loader.load_command_table(["hello", "mod-only"]) _check_index() - with mock.patch("azure.cli.core.__version__", "2.7.0"), mock.patch.object(cli.cloud, "profile", "2019-03-01-hybrid"): + with mock.patch.object(cli.cloud, "profile", "2019-03-01-hybrid"): def update_and_check_index(): loader.load_command_table(["hello", "mod-only"]) - self.assertEqual(INDEX[CommandIndex._COMMAND_INDEX_VERSION], "2.7.0") + self.assertEqual(INDEX[CommandIndex._COMMAND_INDEX_VERSION], __version__) self.assertEqual(INDEX[CommandIndex._COMMAND_INDEX_CLOUD_PROFILE], "2019-03-01-hybrid") self.assertDictEqual(INDEX[CommandIndex._COMMAND_INDEX], self.expected_command_index) From db4341ff00eb3e617cb44c4549214038b98610de Mon Sep 17 00:00:00 2001 From: Hang Date: Mon, 24 Jul 2023 13:36:28 +0800 Subject: [PATCH 05/21] Test new knack --- .azure-pipelines/templates/azdev_setup.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.azure-pipelines/templates/azdev_setup.yml b/.azure-pipelines/templates/azdev_setup.yml index 10cb77e1c34..6265ec48385 100644 --- a/.azure-pipelines/templates/azdev_setup.yml +++ b/.azure-pipelines/templates/azdev_setup.yml @@ -31,6 +31,8 @@ steps: if [ "${{ parameters.EnableCompactAAZ }}" == 'True' ]; then python $CLI_REPO_PATH/scripts/compact_aaz.py fi + pip uninstall -y knack + pip install git+https://github.com/jiasli/knack@py311 displayName: 'azdev setup' env: CLI_REPO_PATH: ${{ parameters.CLIRepoPath }} From 7a0c285b6a72c5532c19cbb8fea77292488c3830 Mon Sep 17 00:00:00 2001 From: Hang Date: Mon, 24 Jul 2023 15:16:23 +0800 Subject: [PATCH 06/21] Fix test_parser_error_spellchecker --- .../azure/cli/core/tests/test_parser.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/azure-cli-core/azure/cli/core/tests/test_parser.py b/src/azure-cli-core/azure/cli/core/tests/test_parser.py index 13b8524e46b..65e372a5e21 100644 --- a/src/azure-cli-core/azure/cli/core/tests/test_parser.py +++ b/src/azure-cli-core/azure/cli/core/tests/test_parser.py @@ -196,6 +196,8 @@ def load_command_table(self, args): @mock.patch('azure.cli.core.extension.get_extension_modname', _mock_extension_modname) @mock.patch('azure.cli.core.extension.get_extensions', _mock_get_extensions) def test_parser_error_spellchecker(self): + import logging + import azure cli = DummyCli() main_loader = MainCommandsLoader(cli) cli.loader = main_loader @@ -224,8 +226,8 @@ def mock_add_extension(*args, **kwargs): pass # run multiple faulty commands and save error logs, as well as close matches - with mock.patch('logging.Logger.error', mock_log_error), \ - mock.patch('difflib.get_close_matches', mock_get_close_matches): + with mock.patch.object(logging.Logger, 'error', mock_log_error), \ + mock.patch.object(difflib, 'get_close_matches', mock_get_close_matches): faulty_cmd_args = [ 'test module1 --opt enum_1', 'test extension1 --opt enum_1', @@ -256,11 +258,14 @@ def mock_add_extension(*args, **kwargs): self.assertIn(choice, choices) # test dynamic extension install - with mock.patch('logging.Logger.error', mock_log_error), \ - mock.patch('azure.cli.core.extension.operations.add_extension', mock_add_extension), \ - mock.patch('azure.cli.core.extension.dynamic_install._get_extension_command_tree', mock_ext_cmd_tree_load), \ - mock.patch('azure.cli.core.extension.dynamic_install._get_extension_use_dynamic_install_config', return_value='yes_without_prompt'), \ - mock.patch('azure.cli.core.extension.dynamic_install._get_extension_run_after_dynamic_install_config', return_value=False): + with mock.patch.object(logging.Logger, 'error', mock_log_error), \ + mock.patch.object(azure.cli.core.extension.operations, 'add_extension', mock_add_extension), \ + mock.patch.object(azure.cli.core.extension.dynamic_install, '_get_extension_command_tree', + mock_ext_cmd_tree_load), \ + mock.patch.object(azure.cli.core.extension.dynamic_install, '_get_extension_use_dynamic_install_config', + return_value='yes_without_prompt'), \ + mock.patch.object(azure.cli.core.extension.dynamic_install, + '_get_extension_run_after_dynamic_install_config', return_value=False): with self.assertRaises(SystemExit): parser.parse_args('test new-ext create --opt enum_2'.split()) self.assertIn("Extension new-ext-name installed. Please rerun your command.", logger_msgs[5]) From 265fb6cb0a2e3fe5826cd0686568d6f3ed82ead7 Mon Sep 17 00:00:00 2001 From: Hang Date: Mon, 24 Jul 2023 16:48:44 +0800 Subject: [PATCH 07/21] Fix test_help_loads --- src/azure-cli-core/azure/cli/core/tests/test_help.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/azure-cli-core/azure/cli/core/tests/test_help.py b/src/azure-cli-core/azure/cli/core/tests/test_help.py index 990c94b79b6..17d8c9587cc 100644 --- a/src/azure-cli-core/azure/cli/core/tests/test_help.py +++ b/src/azure-cli-core/azure/cli/core/tests/test_help.py @@ -130,7 +130,6 @@ def test_help_loads(self): except SystemExit: pass cmd_tbl = cli.invocation.commands_loader.command_table - cli.invocation.parser.load_command_table(cli.invocation.commands_loader) for cmd in cmd_tbl: try: cmd_tbl[cmd].loader.command_name = cmd @@ -140,7 +139,6 @@ def test_help_loads(self): cli.register_event(events.EVENT_INVOKER_POST_CMD_TBL_CREATE, register_global_subscription_argument) cli.register_event(events.EVENT_INVOKER_POST_CMD_TBL_CREATE, register_ids_argument) cli.raise_event(events.EVENT_INVOKER_CMD_TBL_LOADED, command_table=cmd_tbl) - cli.invocation.parser.load_command_table(cli.invocation.commands_loader) _store_parsers(cli.invocation.parser, parser_dict) # TODO: do we want to update this as it doesn't actually load all help. From 70a89dc07d18b680188e33511c5f24cf492e36f6 Mon Sep 17 00:00:00 2001 From: Hang Date: Tue, 25 Jul 2023 10:45:45 +0800 Subject: [PATCH 08/21] Fix test_command_index_always_loaded_extension --- .../azure/cli/core/tests/test_command_registration.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/azure-cli-core/azure/cli/core/tests/test_command_registration.py b/src/azure-cli-core/azure/cli/core/tests/test_command_registration.py index afb635a0ffa..1bc3e87b566 100644 --- a/src/azure-cli-core/azure/cli/core/tests/test_command_registration.py +++ b/src/azure-cli-core/azure/cli/core/tests/test_command_registration.py @@ -395,6 +395,7 @@ def update_and_check_index(): @mock.patch('azure.cli.core.extension.get_extension_modname', _mock_get_extension_modname) @mock.patch('azure.cli.core.extension.get_extensions', _mock_get_extensions) def test_command_index_always_loaded_extensions(self): + import azure from azure.cli.core import CommandIndex cli = DummyCli() @@ -403,14 +404,14 @@ def test_command_index_always_loaded_extensions(self): index.invalidate() # Test azext_always_loaded is loaded when command index is rebuilt - with mock.patch('azure.cli.core.ALWAYS_LOADED_EXTENSIONS', ['azext_always_loaded']): + with mock.patch.object(azure.cli.core,'ALWAYS_LOADED_EXTENSIONS', ['azext_always_loaded']): loader.load_command_table(["hello", "mod-only"]) self.assertEqual(TestCommandRegistration.test_hook, "FAKE_HANDLER") TestCommandRegistration.test_hook = [] # Test azext_always_loaded is loaded when command index is used - with mock.patch('azure.cli.core.ALWAYS_LOADED_EXTENSIONS', ['azext_always_loaded']): + with mock.patch.object(azure.cli.core,'ALWAYS_LOADED_EXTENSIONS', ['azext_always_loaded']): loader.load_command_table(["hello", "mod-only"]) self.assertEqual(TestCommandRegistration.test_hook, "FAKE_HANDLER") From f2dc5e7c41bdcf6e2463af7c72fd5d10911ba137 Mon Sep 17 00:00:00 2001 From: Hang Date: Tue, 25 Jul 2023 14:14:00 +0800 Subject: [PATCH 09/21] Fix test_vm_defaults --- .../hybrid_2018_03_01/test_vm_defaults.py | 70 +++++++++++-------- .../hybrid_2019_03_01/test_vm_defaults.py | 70 +++++++++++-------- .../hybrid_2020_09_01/test_vm_defaults.py | 70 +++++++++++-------- 3 files changed, 117 insertions(+), 93 deletions(-) diff --git a/src/azure-cli/azure/cli/command_modules/vm/tests/hybrid_2018_03_01/test_vm_defaults.py b/src/azure-cli/azure/cli/command_modules/vm/tests/hybrid_2018_03_01/test_vm_defaults.py index c78e343285b..f6a92cd34a6 100644 --- a/src/azure-cli/azure/cli/command_modules/vm/tests/hybrid_2018_03_01/test_vm_defaults.py +++ b/src/azure-cli/azure/cli/command_modules/vm/tests/hybrid_2018_03_01/test_vm_defaults.py @@ -152,21 +152,25 @@ def setUp(self): ns.location = None self.ns = ns - @mock.patch('azure.cli.command_modules.vm.aaz.2018_03_01_hybrid.network.vnet.List', _mock_network_client_with_existing_vnet) def test_no_matching_vnet(self): - self._set_ns('emptyrg', 'eastus') - _validate_vm_vmss_create_vnet(_get_test_cmd(), self.ns) - self.assertIsNone(self.ns.vnet_name) - self.assertIsNone(self.ns.subnet) - self.assertEqual(self.ns.vnet_type, 'new') + from importlib import import_module + vnet = import_module('azure.cli.command_modules.vm.aaz.2018_03_01_hybrid.network.vnet') + with mock.patch.object(vnet, 'List', _mock_network_client_with_existing_vnet): + self._set_ns('emptyrg', 'eastus') + _validate_vm_vmss_create_vnet(_get_test_cmd(), self.ns) + self.assertIsNone(self.ns.vnet_name) + self.assertIsNone(self.ns.subnet) + self.assertEqual(self.ns.vnet_type, 'new') - @mock.patch('azure.cli.command_modules.vm.aaz.2018_03_01_hybrid.network.vnet.List', _mock_network_client_with_existing_vnet_location) def test_matching_vnet_specified_location(self): - self._set_ns('rg1', 'eastus') - _validate_vm_vmss_create_vnet(_get_test_cmd(), self.ns) - self.assertEqual(self.ns.vnet_name, 'vnet1') - self.assertEqual(self.ns.subnet, 'vnet1subnet') - self.assertEqual(self.ns.vnet_type, 'existing') + from importlib import import_module + vnet = import_module('azure.cli.command_modules.vm.aaz.2018_03_01_hybrid.network.vnet') + with mock.patch.object(vnet, 'List', _mock_network_client_with_existing_vnet_location): + self._set_ns('rg1', 'eastus') + _validate_vm_vmss_create_vnet(_get_test_cmd(), self.ns) + self.assertEqual(self.ns.vnet_name, 'vnet1') + self.assertEqual(self.ns.subnet, 'vnet1subnet') + self.assertEqual(self.ns.vnet_type, 'existing') class TestVMSSCreateDefaultVnet(unittest.TestCase): @@ -182,28 +186,32 @@ def _set_ns(rg, location=None): ns.disable_overprovision = None return ns - @mock.patch('azure.cli.command_modules.vm.aaz.2018_03_01_hybrid.network.vnet.List', _mock_network_client_with_existing_vnet_location) def test_matching_vnet_subnet_size_matching(self): - ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') - ns.instance_count = 5 - _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) - self.assertEqual(ns.vnet_name, 'vnet1') - self.assertEqual(ns.subnet, 'vnet1subnet') - self.assertEqual(ns.vnet_type, 'existing') + from importlib import import_module + vnet = import_module('azure.cli.command_modules.vm.aaz.2018_03_01_hybrid.network.vnet') + with mock.patch.object(vnet, 'List', _mock_network_client_with_existing_vnet_location): + ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') + ns.instance_count = 5 + _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) + self.assertEqual(ns.vnet_name, 'vnet1') + self.assertEqual(ns.subnet, 'vnet1subnet') + self.assertEqual(ns.vnet_type, 'existing') - @mock.patch('azure.cli.command_modules.vm.aaz.2018_03_01_hybrid.network.vnet.List', _mock_network_client_with_existing_subnet) def test_matching_vnet_no_subnet_size_matching(self): - ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') - ns.instance_count = 1000 - _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) - self.assertIsNone(ns.vnet_name) - self.assertIsNone(ns.subnet) - self.assertEqual(ns.vnet_type, 'new') - - ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') - ns.instance_count = 255 - _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) - self.assertEqual(ns.vnet_type, 'new') + from importlib import import_module + vnet = import_module('azure.cli.command_modules.vm.aaz.2018_03_01_hybrid.network.vnet') + with mock.patch.object(vnet, 'List', _mock_network_client_with_existing_subnet): + ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') + ns.instance_count = 1000 + _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) + self.assertIsNone(ns.vnet_name) + self.assertIsNone(ns.subnet) + self.assertEqual(ns.vnet_type, 'new') + + ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') + ns.instance_count = 255 + _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) + self.assertEqual(ns.vnet_type, 'new') def test_new_subnet_size_for_big_vmss_with_over_provision(self): ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') diff --git a/src/azure-cli/azure/cli/command_modules/vm/tests/hybrid_2019_03_01/test_vm_defaults.py b/src/azure-cli/azure/cli/command_modules/vm/tests/hybrid_2019_03_01/test_vm_defaults.py index ef347cae518..46c104f3827 100644 --- a/src/azure-cli/azure/cli/command_modules/vm/tests/hybrid_2019_03_01/test_vm_defaults.py +++ b/src/azure-cli/azure/cli/command_modules/vm/tests/hybrid_2019_03_01/test_vm_defaults.py @@ -154,21 +154,25 @@ def setUp(self): ns.location = None self.ns = ns - @mock.patch('azure.cli.command_modules.vm.aaz.2019_03_01_hybrid.network.vnet.List', _mock_network_client_with_existing_vnet) def test_no_matching_vnet(self): - self._set_ns('emptyrg', 'eastus') - _validate_vm_vmss_create_vnet(_get_test_cmd(), self.ns) - self.assertIsNone(self.ns.vnet_name) - self.assertIsNone(self.ns.subnet) - self.assertEqual(self.ns.vnet_type, 'new') + from importlib import import_module + vnet = import_module('azure.cli.command_modules.vm.aaz.2019_03_01_hybrid.network.vnet') + with mock.patch.object(vnet, 'List', _mock_network_client_with_existing_vnet): + self._set_ns('emptyrg', 'eastus') + _validate_vm_vmss_create_vnet(_get_test_cmd(), self.ns) + self.assertIsNone(self.ns.vnet_name) + self.assertIsNone(self.ns.subnet) + self.assertEqual(self.ns.vnet_type, 'new') - @mock.patch('azure.cli.command_modules.vm.aaz.2019_03_01_hybrid.network.vnet.List', _mock_network_client_with_existing_vnet_location) def test_matching_vnet_specified_location(self): - self._set_ns('rg1', 'eastus') - _validate_vm_vmss_create_vnet(_get_test_cmd(), self.ns) - self.assertEqual(self.ns.vnet_name, 'vnet1') - self.assertEqual(self.ns.subnet, 'vnet1subnet') - self.assertEqual(self.ns.vnet_type, 'existing') + from importlib import import_module + vnet = import_module('azure.cli.command_modules.vm.aaz.2019_03_01_hybrid.network.vnet') + with mock.patch.object(vnet, 'List', _mock_network_client_with_existing_vnet_location): + self._set_ns('rg1', 'eastus') + _validate_vm_vmss_create_vnet(_get_test_cmd(), self.ns) + self.assertEqual(self.ns.vnet_name, 'vnet1') + self.assertEqual(self.ns.subnet, 'vnet1subnet') + self.assertEqual(self.ns.vnet_type, 'existing') class TestVMSSCreateDefaultVnet(unittest.TestCase): @@ -184,28 +188,32 @@ def _set_ns(rg, location=None): ns.disable_overprovision = None return ns - @mock.patch('azure.cli.command_modules.vm.aaz.2019_03_01_hybrid.network.vnet.List', _mock_network_client_with_existing_vnet_location) def test_matching_vnet_subnet_size_matching(self): - ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') - ns.instance_count = 5 - _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) - self.assertEqual(ns.vnet_name, 'vnet1') - self.assertEqual(ns.subnet, 'vnet1subnet') - self.assertEqual(ns.vnet_type, 'existing') + from importlib import import_module + vnet = import_module('azure.cli.command_modules.vm.aaz.2019_03_01_hybrid.network.vnet') + with mock.patch.object(vnet, 'List', _mock_network_client_with_existing_vnet_location): + ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') + ns.instance_count = 5 + _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) + self.assertEqual(ns.vnet_name, 'vnet1') + self.assertEqual(ns.subnet, 'vnet1subnet') + self.assertEqual(ns.vnet_type, 'existing') - @mock.patch('azure.cli.command_modules.vm.aaz.2019_03_01_hybrid.network.vnet.List', _mock_network_client_with_existing_subnet) def test_matching_vnet_no_subnet_size_matching(self): - ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') - ns.instance_count = 1000 - _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) - self.assertIsNone(ns.vnet_name) - self.assertIsNone(ns.subnet) - self.assertEqual(ns.vnet_type, 'new') - - ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') - ns.instance_count = 255 - _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) - self.assertEqual(ns.vnet_type, 'new') + from importlib import import_module + vnet = import_module('azure.cli.command_modules.vm.aaz.2019_03_01_hybrid.network.vnet') + with mock.patch.object(vnet, 'List', _mock_network_client_with_existing_subnet): + ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') + ns.instance_count = 1000 + _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) + self.assertIsNone(ns.vnet_name) + self.assertIsNone(ns.subnet) + self.assertEqual(ns.vnet_type, 'new') + + ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') + ns.instance_count = 255 + _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) + self.assertEqual(ns.vnet_type, 'new') def test_new_subnet_size_for_big_vmss_with_over_provision(self): ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') diff --git a/src/azure-cli/azure/cli/command_modules/vm/tests/hybrid_2020_09_01/test_vm_defaults.py b/src/azure-cli/azure/cli/command_modules/vm/tests/hybrid_2020_09_01/test_vm_defaults.py index 26633388e34..ed4852143f8 100644 --- a/src/azure-cli/azure/cli/command_modules/vm/tests/hybrid_2020_09_01/test_vm_defaults.py +++ b/src/azure-cli/azure/cli/command_modules/vm/tests/hybrid_2020_09_01/test_vm_defaults.py @@ -172,21 +172,25 @@ def setUp(self): ns.location = None self.ns = ns - @mock.patch('azure.cli.command_modules.vm.aaz.2020_09_01_hybrid.network.vnet.List', _mock_network_client_with_existing_vnet) def test_no_matching_vnet(self): - self._set_ns('emptyrg', 'eastus') - _validate_vm_vmss_create_vnet(_get_test_cmd(), self.ns) - self.assertIsNone(self.ns.vnet_name) - self.assertIsNone(self.ns.subnet) - self.assertEqual(self.ns.vnet_type, 'new') + from importlib import import_module + vnet = import_module('azure.cli.command_modules.vm.aaz.2020_09_01_hybrid.network.vnet') + with mock.patch.object(vnet, 'List', _mock_network_client_with_existing_vnet): + self._set_ns('emptyrg', 'eastus') + _validate_vm_vmss_create_vnet(_get_test_cmd(), self.ns) + self.assertIsNone(self.ns.vnet_name) + self.assertIsNone(self.ns.subnet) + self.assertEqual(self.ns.vnet_type, 'new') - @mock.patch('azure.cli.command_modules.vm.aaz.2020_09_01_hybrid.network.vnet.List', _mock_network_client_with_existing_vnet_location) def test_matching_vnet_specified_location(self): - self._set_ns('rg1', 'eastus') - _validate_vm_vmss_create_vnet(_get_test_cmd(), self.ns) - self.assertEqual(self.ns.vnet_name, 'vnet1') - self.assertEqual(self.ns.subnet, 'vnet1subnet') - self.assertEqual(self.ns.vnet_type, 'existing') + from importlib import import_module + vnet = import_module('azure.cli.command_modules.vm.aaz.2020_09_01_hybrid.network.vnet') + with mock.patch.object(vnet, 'List', _mock_network_client_with_existing_vnet_location): + self._set_ns('rg1', 'eastus') + _validate_vm_vmss_create_vnet(_get_test_cmd(), self.ns) + self.assertEqual(self.ns.vnet_name, 'vnet1') + self.assertEqual(self.ns.subnet, 'vnet1subnet') + self.assertEqual(self.ns.vnet_type, 'existing') class TestVMSSCreateDefaultVnet(unittest.TestCase): @@ -202,28 +206,32 @@ def _set_ns(rg, location=None): ns.disable_overprovision = None return ns - @mock.patch('azure.cli.command_modules.vm.aaz.2020_09_01_hybrid.network.vnet.List', _mock_network_client_with_existing_vnet_location) def test_matching_vnet_subnet_size_matching(self): - ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') - ns.instance_count = 5 - _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) - self.assertEqual(ns.vnet_name, 'vnet1') - self.assertEqual(ns.subnet, 'vnet1subnet') - self.assertEqual(ns.vnet_type, 'existing') + from importlib import import_module + vnet = import_module('azure.cli.command_modules.vm.aaz.2020_09_01_hybrid.network.vnet') + with mock.patch.object(vnet, 'List', _mock_network_client_with_existing_vnet_location): + ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') + ns.instance_count = 5 + _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) + self.assertEqual(ns.vnet_name, 'vnet1') + self.assertEqual(ns.subnet, 'vnet1subnet') + self.assertEqual(ns.vnet_type, 'existing') - @mock.patch('azure.cli.command_modules.vm.aaz.2020_09_01_hybrid.network.vnet.List', _mock_network_client_with_existing_subnet) def test_matching_vnet_no_subnet_size_matching(self): - ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') - ns.instance_count = 1000 - _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) - self.assertIsNone(ns.vnet_name) - self.assertIsNone(ns.subnet) - self.assertEqual(ns.vnet_type, 'new') - - ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') - ns.instance_count = 255 - _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) - self.assertEqual(ns.vnet_type, 'new') + from importlib import import_module + vnet = import_module('azure.cli.command_modules.vm.aaz.2020_09_01_hybrid.network.vnet') + with mock.patch.object(vnet, 'List', _mock_network_client_with_existing_subnet): + ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') + ns.instance_count = 1000 + _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) + self.assertIsNone(ns.vnet_name) + self.assertIsNone(ns.subnet) + self.assertEqual(ns.vnet_type, 'new') + + ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') + ns.instance_count = 255 + _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) + self.assertEqual(ns.vnet_type, 'new') def test_new_subnet_size_for_big_vmss_with_over_provision(self): ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') From 890df6171cbb67d21eaa7f0657b7a627edffcf4c Mon Sep 17 00:00:00 2001 From: Hang Date: Wed, 26 Jul 2023 11:39:11 +0800 Subject: [PATCH 10/21] Revert "Test new knack" This reverts commit db4341ff00eb3e617cb44c4549214038b98610de. --- .azure-pipelines/templates/azdev_setup.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.azure-pipelines/templates/azdev_setup.yml b/.azure-pipelines/templates/azdev_setup.yml index 6265ec48385..10cb77e1c34 100644 --- a/.azure-pipelines/templates/azdev_setup.yml +++ b/.azure-pipelines/templates/azdev_setup.yml @@ -31,8 +31,6 @@ steps: if [ "${{ parameters.EnableCompactAAZ }}" == 'True' ]; then python $CLI_REPO_PATH/scripts/compact_aaz.py fi - pip uninstall -y knack - pip install git+https://github.com/jiasli/knack@py311 displayName: 'azdev setup' env: CLI_REPO_PATH: ${{ parameters.CLIRepoPath }} From 953224023b75c949fedcbb85b45193d808137570 Mon Sep 17 00:00:00 2001 From: Hang Date: Thu, 3 Aug 2023 16:20:40 +0800 Subject: [PATCH 11/21] Revert "Fix test_vm_defaults" --- .../hybrid_2018_03_01/test_vm_defaults.py | 70 ++++++++----------- .../hybrid_2019_03_01/test_vm_defaults.py | 70 ++++++++----------- .../hybrid_2020_09_01/test_vm_defaults.py | 70 ++++++++----------- 3 files changed, 93 insertions(+), 117 deletions(-) diff --git a/src/azure-cli/azure/cli/command_modules/vm/tests/hybrid_2018_03_01/test_vm_defaults.py b/src/azure-cli/azure/cli/command_modules/vm/tests/hybrid_2018_03_01/test_vm_defaults.py index f6a92cd34a6..c78e343285b 100644 --- a/src/azure-cli/azure/cli/command_modules/vm/tests/hybrid_2018_03_01/test_vm_defaults.py +++ b/src/azure-cli/azure/cli/command_modules/vm/tests/hybrid_2018_03_01/test_vm_defaults.py @@ -152,25 +152,21 @@ def setUp(self): ns.location = None self.ns = ns + @mock.patch('azure.cli.command_modules.vm.aaz.2018_03_01_hybrid.network.vnet.List', _mock_network_client_with_existing_vnet) def test_no_matching_vnet(self): - from importlib import import_module - vnet = import_module('azure.cli.command_modules.vm.aaz.2018_03_01_hybrid.network.vnet') - with mock.patch.object(vnet, 'List', _mock_network_client_with_existing_vnet): - self._set_ns('emptyrg', 'eastus') - _validate_vm_vmss_create_vnet(_get_test_cmd(), self.ns) - self.assertIsNone(self.ns.vnet_name) - self.assertIsNone(self.ns.subnet) - self.assertEqual(self.ns.vnet_type, 'new') + self._set_ns('emptyrg', 'eastus') + _validate_vm_vmss_create_vnet(_get_test_cmd(), self.ns) + self.assertIsNone(self.ns.vnet_name) + self.assertIsNone(self.ns.subnet) + self.assertEqual(self.ns.vnet_type, 'new') + @mock.patch('azure.cli.command_modules.vm.aaz.2018_03_01_hybrid.network.vnet.List', _mock_network_client_with_existing_vnet_location) def test_matching_vnet_specified_location(self): - from importlib import import_module - vnet = import_module('azure.cli.command_modules.vm.aaz.2018_03_01_hybrid.network.vnet') - with mock.patch.object(vnet, 'List', _mock_network_client_with_existing_vnet_location): - self._set_ns('rg1', 'eastus') - _validate_vm_vmss_create_vnet(_get_test_cmd(), self.ns) - self.assertEqual(self.ns.vnet_name, 'vnet1') - self.assertEqual(self.ns.subnet, 'vnet1subnet') - self.assertEqual(self.ns.vnet_type, 'existing') + self._set_ns('rg1', 'eastus') + _validate_vm_vmss_create_vnet(_get_test_cmd(), self.ns) + self.assertEqual(self.ns.vnet_name, 'vnet1') + self.assertEqual(self.ns.subnet, 'vnet1subnet') + self.assertEqual(self.ns.vnet_type, 'existing') class TestVMSSCreateDefaultVnet(unittest.TestCase): @@ -186,32 +182,28 @@ def _set_ns(rg, location=None): ns.disable_overprovision = None return ns + @mock.patch('azure.cli.command_modules.vm.aaz.2018_03_01_hybrid.network.vnet.List', _mock_network_client_with_existing_vnet_location) def test_matching_vnet_subnet_size_matching(self): - from importlib import import_module - vnet = import_module('azure.cli.command_modules.vm.aaz.2018_03_01_hybrid.network.vnet') - with mock.patch.object(vnet, 'List', _mock_network_client_with_existing_vnet_location): - ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') - ns.instance_count = 5 - _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) - self.assertEqual(ns.vnet_name, 'vnet1') - self.assertEqual(ns.subnet, 'vnet1subnet') - self.assertEqual(ns.vnet_type, 'existing') + ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') + ns.instance_count = 5 + _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) + self.assertEqual(ns.vnet_name, 'vnet1') + self.assertEqual(ns.subnet, 'vnet1subnet') + self.assertEqual(ns.vnet_type, 'existing') + @mock.patch('azure.cli.command_modules.vm.aaz.2018_03_01_hybrid.network.vnet.List', _mock_network_client_with_existing_subnet) def test_matching_vnet_no_subnet_size_matching(self): - from importlib import import_module - vnet = import_module('azure.cli.command_modules.vm.aaz.2018_03_01_hybrid.network.vnet') - with mock.patch.object(vnet, 'List', _mock_network_client_with_existing_subnet): - ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') - ns.instance_count = 1000 - _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) - self.assertIsNone(ns.vnet_name) - self.assertIsNone(ns.subnet) - self.assertEqual(ns.vnet_type, 'new') - - ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') - ns.instance_count = 255 - _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) - self.assertEqual(ns.vnet_type, 'new') + ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') + ns.instance_count = 1000 + _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) + self.assertIsNone(ns.vnet_name) + self.assertIsNone(ns.subnet) + self.assertEqual(ns.vnet_type, 'new') + + ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') + ns.instance_count = 255 + _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) + self.assertEqual(ns.vnet_type, 'new') def test_new_subnet_size_for_big_vmss_with_over_provision(self): ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') diff --git a/src/azure-cli/azure/cli/command_modules/vm/tests/hybrid_2019_03_01/test_vm_defaults.py b/src/azure-cli/azure/cli/command_modules/vm/tests/hybrid_2019_03_01/test_vm_defaults.py index 46c104f3827..ef347cae518 100644 --- a/src/azure-cli/azure/cli/command_modules/vm/tests/hybrid_2019_03_01/test_vm_defaults.py +++ b/src/azure-cli/azure/cli/command_modules/vm/tests/hybrid_2019_03_01/test_vm_defaults.py @@ -154,25 +154,21 @@ def setUp(self): ns.location = None self.ns = ns + @mock.patch('azure.cli.command_modules.vm.aaz.2019_03_01_hybrid.network.vnet.List', _mock_network_client_with_existing_vnet) def test_no_matching_vnet(self): - from importlib import import_module - vnet = import_module('azure.cli.command_modules.vm.aaz.2019_03_01_hybrid.network.vnet') - with mock.patch.object(vnet, 'List', _mock_network_client_with_existing_vnet): - self._set_ns('emptyrg', 'eastus') - _validate_vm_vmss_create_vnet(_get_test_cmd(), self.ns) - self.assertIsNone(self.ns.vnet_name) - self.assertIsNone(self.ns.subnet) - self.assertEqual(self.ns.vnet_type, 'new') + self._set_ns('emptyrg', 'eastus') + _validate_vm_vmss_create_vnet(_get_test_cmd(), self.ns) + self.assertIsNone(self.ns.vnet_name) + self.assertIsNone(self.ns.subnet) + self.assertEqual(self.ns.vnet_type, 'new') + @mock.patch('azure.cli.command_modules.vm.aaz.2019_03_01_hybrid.network.vnet.List', _mock_network_client_with_existing_vnet_location) def test_matching_vnet_specified_location(self): - from importlib import import_module - vnet = import_module('azure.cli.command_modules.vm.aaz.2019_03_01_hybrid.network.vnet') - with mock.patch.object(vnet, 'List', _mock_network_client_with_existing_vnet_location): - self._set_ns('rg1', 'eastus') - _validate_vm_vmss_create_vnet(_get_test_cmd(), self.ns) - self.assertEqual(self.ns.vnet_name, 'vnet1') - self.assertEqual(self.ns.subnet, 'vnet1subnet') - self.assertEqual(self.ns.vnet_type, 'existing') + self._set_ns('rg1', 'eastus') + _validate_vm_vmss_create_vnet(_get_test_cmd(), self.ns) + self.assertEqual(self.ns.vnet_name, 'vnet1') + self.assertEqual(self.ns.subnet, 'vnet1subnet') + self.assertEqual(self.ns.vnet_type, 'existing') class TestVMSSCreateDefaultVnet(unittest.TestCase): @@ -188,32 +184,28 @@ def _set_ns(rg, location=None): ns.disable_overprovision = None return ns + @mock.patch('azure.cli.command_modules.vm.aaz.2019_03_01_hybrid.network.vnet.List', _mock_network_client_with_existing_vnet_location) def test_matching_vnet_subnet_size_matching(self): - from importlib import import_module - vnet = import_module('azure.cli.command_modules.vm.aaz.2019_03_01_hybrid.network.vnet') - with mock.patch.object(vnet, 'List', _mock_network_client_with_existing_vnet_location): - ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') - ns.instance_count = 5 - _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) - self.assertEqual(ns.vnet_name, 'vnet1') - self.assertEqual(ns.subnet, 'vnet1subnet') - self.assertEqual(ns.vnet_type, 'existing') + ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') + ns.instance_count = 5 + _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) + self.assertEqual(ns.vnet_name, 'vnet1') + self.assertEqual(ns.subnet, 'vnet1subnet') + self.assertEqual(ns.vnet_type, 'existing') + @mock.patch('azure.cli.command_modules.vm.aaz.2019_03_01_hybrid.network.vnet.List', _mock_network_client_with_existing_subnet) def test_matching_vnet_no_subnet_size_matching(self): - from importlib import import_module - vnet = import_module('azure.cli.command_modules.vm.aaz.2019_03_01_hybrid.network.vnet') - with mock.patch.object(vnet, 'List', _mock_network_client_with_existing_subnet): - ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') - ns.instance_count = 1000 - _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) - self.assertIsNone(ns.vnet_name) - self.assertIsNone(ns.subnet) - self.assertEqual(ns.vnet_type, 'new') - - ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') - ns.instance_count = 255 - _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) - self.assertEqual(ns.vnet_type, 'new') + ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') + ns.instance_count = 1000 + _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) + self.assertIsNone(ns.vnet_name) + self.assertIsNone(ns.subnet) + self.assertEqual(ns.vnet_type, 'new') + + ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') + ns.instance_count = 255 + _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) + self.assertEqual(ns.vnet_type, 'new') def test_new_subnet_size_for_big_vmss_with_over_provision(self): ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') diff --git a/src/azure-cli/azure/cli/command_modules/vm/tests/hybrid_2020_09_01/test_vm_defaults.py b/src/azure-cli/azure/cli/command_modules/vm/tests/hybrid_2020_09_01/test_vm_defaults.py index ed4852143f8..26633388e34 100644 --- a/src/azure-cli/azure/cli/command_modules/vm/tests/hybrid_2020_09_01/test_vm_defaults.py +++ b/src/azure-cli/azure/cli/command_modules/vm/tests/hybrid_2020_09_01/test_vm_defaults.py @@ -172,25 +172,21 @@ def setUp(self): ns.location = None self.ns = ns + @mock.patch('azure.cli.command_modules.vm.aaz.2020_09_01_hybrid.network.vnet.List', _mock_network_client_with_existing_vnet) def test_no_matching_vnet(self): - from importlib import import_module - vnet = import_module('azure.cli.command_modules.vm.aaz.2020_09_01_hybrid.network.vnet') - with mock.patch.object(vnet, 'List', _mock_network_client_with_existing_vnet): - self._set_ns('emptyrg', 'eastus') - _validate_vm_vmss_create_vnet(_get_test_cmd(), self.ns) - self.assertIsNone(self.ns.vnet_name) - self.assertIsNone(self.ns.subnet) - self.assertEqual(self.ns.vnet_type, 'new') + self._set_ns('emptyrg', 'eastus') + _validate_vm_vmss_create_vnet(_get_test_cmd(), self.ns) + self.assertIsNone(self.ns.vnet_name) + self.assertIsNone(self.ns.subnet) + self.assertEqual(self.ns.vnet_type, 'new') + @mock.patch('azure.cli.command_modules.vm.aaz.2020_09_01_hybrid.network.vnet.List', _mock_network_client_with_existing_vnet_location) def test_matching_vnet_specified_location(self): - from importlib import import_module - vnet = import_module('azure.cli.command_modules.vm.aaz.2020_09_01_hybrid.network.vnet') - with mock.patch.object(vnet, 'List', _mock_network_client_with_existing_vnet_location): - self._set_ns('rg1', 'eastus') - _validate_vm_vmss_create_vnet(_get_test_cmd(), self.ns) - self.assertEqual(self.ns.vnet_name, 'vnet1') - self.assertEqual(self.ns.subnet, 'vnet1subnet') - self.assertEqual(self.ns.vnet_type, 'existing') + self._set_ns('rg1', 'eastus') + _validate_vm_vmss_create_vnet(_get_test_cmd(), self.ns) + self.assertEqual(self.ns.vnet_name, 'vnet1') + self.assertEqual(self.ns.subnet, 'vnet1subnet') + self.assertEqual(self.ns.vnet_type, 'existing') class TestVMSSCreateDefaultVnet(unittest.TestCase): @@ -206,32 +202,28 @@ def _set_ns(rg, location=None): ns.disable_overprovision = None return ns + @mock.patch('azure.cli.command_modules.vm.aaz.2020_09_01_hybrid.network.vnet.List', _mock_network_client_with_existing_vnet_location) def test_matching_vnet_subnet_size_matching(self): - from importlib import import_module - vnet = import_module('azure.cli.command_modules.vm.aaz.2020_09_01_hybrid.network.vnet') - with mock.patch.object(vnet, 'List', _mock_network_client_with_existing_vnet_location): - ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') - ns.instance_count = 5 - _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) - self.assertEqual(ns.vnet_name, 'vnet1') - self.assertEqual(ns.subnet, 'vnet1subnet') - self.assertEqual(ns.vnet_type, 'existing') + ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') + ns.instance_count = 5 + _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) + self.assertEqual(ns.vnet_name, 'vnet1') + self.assertEqual(ns.subnet, 'vnet1subnet') + self.assertEqual(ns.vnet_type, 'existing') + @mock.patch('azure.cli.command_modules.vm.aaz.2020_09_01_hybrid.network.vnet.List', _mock_network_client_with_existing_subnet) def test_matching_vnet_no_subnet_size_matching(self): - from importlib import import_module - vnet = import_module('azure.cli.command_modules.vm.aaz.2020_09_01_hybrid.network.vnet') - with mock.patch.object(vnet, 'List', _mock_network_client_with_existing_subnet): - ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') - ns.instance_count = 1000 - _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) - self.assertIsNone(ns.vnet_name) - self.assertIsNone(ns.subnet) - self.assertEqual(ns.vnet_type, 'new') - - ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') - ns.instance_count = 255 - _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) - self.assertEqual(ns.vnet_type, 'new') + ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') + ns.instance_count = 1000 + _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) + self.assertIsNone(ns.vnet_name) + self.assertIsNone(ns.subnet) + self.assertEqual(ns.vnet_type, 'new') + + ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') + ns.instance_count = 255 + _validate_vm_vmss_create_vnet(_get_test_cmd(), ns, for_scale_set=True) + self.assertEqual(ns.vnet_type, 'new') def test_new_subnet_size_for_big_vmss_with_over_provision(self): ns = TestVMSSCreateDefaultVnet._set_ns('rg1', 'eastus') From 957f19b4e0dda838378e1a577a64dbf0b31c7115 Mon Sep 17 00:00:00 2001 From: Hang Date: Fri, 4 Aug 2023 11:53:49 +0800 Subject: [PATCH 12/21] Use 3.11 in test --- azure-pipelines-full-tests.yml | 6 ++-- azure-pipelines.yml | 50 +++++++++++++++++----------------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/azure-pipelines-full-tests.yml b/azure-pipelines-full-tests.yml index e0a1f47c119..977cdb446ef 100644 --- a/azure-pipelines-full-tests.yml +++ b/azure-pipelines-full-tests.yml @@ -134,7 +134,7 @@ jobs: steps: - template: .azure-pipelines/templates/automation_test.yml parameters: - pythonVersion: '3.10' + pythonVersion: '3.11' profile: 'latest' instance_cnt: '8' instance_idx: '$(Instance_idx)' @@ -154,9 +154,9 @@ jobs: name: ${{ variables.ubuntu_pool }} steps: - task: UsePythonVersion@0 - displayName: 'Use Python 3.10' + displayName: 'Use Python 3.11' inputs: - versionSpec: 3.10 + versionSpec: 3.11 - task: AzureCLI@2 inputs: azureSubscription: 'Azure CLI' diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 428386fc001..ea449dd77b9 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -130,9 +130,9 @@ jobs: steps: - task: UsePythonVersion@0 - displayName: 'Use Python 3.10' + displayName: 'Use Python 3.11' inputs: - versionSpec: 3.10 + versionSpec: 3.11 - bash: ./scripts/ci/dependency_check.sh displayName: 'Verify src/azure-cli/requirements.py3.Linux.txt' @@ -145,9 +145,9 @@ jobs: steps: - task: UsePythonVersion@0 - displayName: 'Use Python 3.10' + displayName: 'Use Python 3.11' inputs: - versionSpec: 3.10 + versionSpec: 3.11 - bash: ./scripts/ci/dependency_check.sh displayName: 'Verify src/azure-cli/requirements.py3.Darwin.txt' @@ -160,9 +160,9 @@ jobs: steps: - task: UsePythonVersion@0 - displayName: 'Use Python 3.10' + displayName: 'Use Python 3.11' inputs: - versionSpec: 3.10 + versionSpec: 3.11 - task: BatchScript@1 inputs: @@ -177,9 +177,9 @@ jobs: name: ${{ variables.ubuntu_pool }} steps: - task: UsePythonVersion@0 - displayName: 'Use Python 3.10' + displayName: 'Use Python 3.11' inputs: - versionSpec: 3.10 + versionSpec: 3.11 - template: .azure-pipelines/templates/azdev_setup.yml - bash: | set -ev @@ -389,9 +389,9 @@ jobs: name: ${{ variables.ubuntu_pool }} steps: - task: UsePythonVersion@0 - displayName: 'Use Python 3.10' + displayName: 'Use Python 3.11' inputs: - versionSpec: 3.10 + versionSpec: 3.11 - script: | @@ -451,9 +451,9 @@ jobs: --rm -v $PYPI_FILES:/mnt/pypi python:3.9 \ /bin/bash -c "ls /mnt/pypi && pip install -f /mnt/pypi -q azure-cli==$CLI_VERSION.* && az self-test && az --version && sleep 5" - echo "== Testing pip install on Python 3.10 ==" + echo "== Testing pip install on Python 3.11 ==" docker run \ - --rm -v $PYPI_FILES:/mnt/pypi python:3.10 \ + --rm -v $PYPI_FILES:/mnt/pypi python:3.11 \ /bin/bash -c "ls /mnt/pypi && pip install -f /mnt/pypi -q azure-cli==$CLI_VERSION.* && az self-test && az --version && sleep 5" displayName: 'Test pip Install' @@ -570,7 +570,7 @@ jobs: -e CLI_VERSION=$CLI_VERSION \ -e HOMEBREW_UPSTREAM_URL=$HOMEBREW_UPSTREAM_URL \ --name azurecli \ - python:3.10 \ + python:3.11 \ /mnt/scripts/run.sh # clean up @@ -994,9 +994,9 @@ jobs: name: ${{ variables.ubuntu_pool }} steps: - task: UsePythonVersion@0 - displayName: 'Use Python 3.10' + displayName: 'Use Python 3.11' inputs: - versionSpec: 3.10 + versionSpec: 3.11 - template: .azure-pipelines/templates/azdev_setup.yml - bash: | set -ev @@ -1010,9 +1010,9 @@ jobs: name: ${{ variables.ubuntu_pool }} steps: - task: UsePythonVersion@0 - displayName: 'Use Python 3.10' + displayName: 'Use Python 3.11' inputs: - versionSpec: 3.10 + versionSpec: 3.11 - template: .azure-pipelines/templates/azdev_setup.yml - bash: | set -ev @@ -1056,9 +1056,9 @@ jobs: name: ${{ variables.ubuntu_pool }} steps: - task: UsePythonVersion@0 - displayName: 'Use Python 3.10' + displayName: 'Use Python 3.11' inputs: - versionSpec: 3.10 + versionSpec: 3.11 - template: .azure-pipelines/templates/azdev_setup.yml - bash: | set -ev @@ -1079,9 +1079,9 @@ jobs: name: ${{ variables.ubuntu_pool }} steps: - task: UsePythonVersion@0 - displayName: 'Use Python 3.10' + displayName: 'Use Python 3.11' inputs: - versionSpec: 3.10 + versionSpec: 3.11 - template: .azure-pipelines/templates/azdev_setup.yml - bash: | set -ev @@ -1117,9 +1117,9 @@ jobs: name: ${{ variables.ubuntu_pool }} steps: - task: UsePythonVersion@0 - displayName: 'Use Python 3.10' + displayName: 'Use Python 3.11' inputs: - versionSpec: 3.10 + versionSpec: 3.11 - bash: pip install --upgrade pip wheel displayName: "Install pip and wheel" - bash: ./scripts/ci/test_ref_doc.sh @@ -1166,9 +1166,9 @@ jobs: name: ${{ variables.ubuntu_pool }} steps: - task: UsePythonVersion@0 - displayName: 'Use Python 3.10' + displayName: 'Use Python 3.11' inputs: - versionSpec: 3.10 + versionSpec: 3.11 - task: AzureCLI@2 inputs: azureSubscription: 'Azure CLI' From 0e92cb26e993d82f8b81f05abfa9498c54242a44 Mon Sep 17 00:00:00 2001 From: Hang Date: Fri, 4 Aug 2023 17:28:02 +0800 Subject: [PATCH 13/21] Fix enum str change in 3.11 --- .../tests/latest/test_afd_custom_domain_scenarios.py | 4 ++-- .../cdn/tests/latest/test_afd_route_scenarios.py | 4 ++-- .../sql/tests/latest/test_sql_commands.py | 12 ++++++------ 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/azure-cli/azure/cli/command_modules/cdn/tests/latest/test_afd_custom_domain_scenarios.py b/src/azure-cli/azure/cli/command_modules/cdn/tests/latest/test_afd_custom_domain_scenarios.py index 91c788db69e..b03ca332d8a 100644 --- a/src/azure-cli/azure/cli/command_modules/cdn/tests/latest/test_afd_custom_domain_scenarios.py +++ b/src/azure-cli/azure/cli/command_modules/cdn/tests/latest/test_afd_custom_domain_scenarios.py @@ -38,8 +38,8 @@ def test_afd_custom_domain_crud(self, resource_group): custom_domain_name = self.create_random_name(prefix='customdomain', length=24) host_name = f"{custom_domain_name}.localdev.cdn.azure.cn" - certificate_type = AfdCertificateType.customer_certificate - minimum_tls_version = AfdMinimumTlsVersion.tls12 + certificate_type = AfdCertificateType.customer_certificate.value + minimum_tls_version = AfdMinimumTlsVersion.tls12.value azure_dns_zone = None checks = [JMESPathCheck('domainValidationState', 'Pending')] diff --git a/src/azure-cli/azure/cli/command_modules/cdn/tests/latest/test_afd_route_scenarios.py b/src/azure-cli/azure/cli/command_modules/cdn/tests/latest/test_afd_route_scenarios.py index d0c8e0d6b8e..dd823dc4d4f 100644 --- a/src/azure-cli/azure/cli/command_modules/cdn/tests/latest/test_afd_route_scenarios.py +++ b/src/azure-cli/azure/cli/command_modules/cdn/tests/latest/test_afd_route_scenarios.py @@ -68,8 +68,8 @@ def test_afd_route_crud(self, resource_group): profile_name, custom_domain_name, host_name, - AfdCertificateType.managed_certificate, - AfdMinimumTlsVersion.tls12, + AfdCertificateType.managed_certificate.value, + AfdMinimumTlsVersion.tls12.value, None, None) diff --git a/src/azure-cli/azure/cli/command_modules/sql/tests/latest/test_sql_commands.py b/src/azure-cli/azure/cli/command_modules/sql/tests/latest/test_sql_commands.py index 462d1e31412..bb435cd4e64 100644 --- a/src/azure-cli/azure/cli/command_modules/sql/tests/latest/test_sql_commands.py +++ b/src/azure-cli/azure/cli/command_modules/sql/tests/latest/test_sql_commands.py @@ -939,8 +939,8 @@ def test_sql_db_preferred_enclave_type(self, resource_group, resource_group_loca database_name_one = "cliautomationdb01" database_name_two = "cliautomationdb02" database_name_three = "cliautomationdb03" - preferred_enclave_type_default = AlwaysEncryptedEnclaveType.default - preferred_enclave_type_vbs = AlwaysEncryptedEnclaveType.vbs + preferred_enclave_type_default = AlwaysEncryptedEnclaveType.default.value + preferred_enclave_type_vbs = AlwaysEncryptedEnclaveType.vbs.value # test sql db is created with default enclave type @@ -1017,8 +1017,8 @@ class SqlServerServerlessDbMgmtScenarioTest(ScenarioTest): @AllowLargeResponse() def test_sql_db_serverless_mgmt(self, resource_group, resource_group_location, server): database_name = "cliautomationdb01" - compute_model_serverless = ComputeModelType.serverless - compute_model_provisioned = ComputeModelType.provisioned + compute_model_serverless = ComputeModelType.serverless.value + compute_model_provisioned = ComputeModelType.provisioned.value # Create database with vcore edition vcore_edition = 'GeneralPurpose' @@ -3538,8 +3538,8 @@ def test_sql_elastic_pools_preferred_enclave_type_mgmt(self, resource_group, res database_name_one = "cliautomationdb01" database_name_two = "cliautomationdb02" edition = 'GeneralPurpose' - preferred_enclave_type_default = AlwaysEncryptedEnclaveType.default - preferred_enclave_type_vbs = AlwaysEncryptedEnclaveType.vbs + preferred_enclave_type_default = AlwaysEncryptedEnclaveType.default.value + preferred_enclave_type_vbs = AlwaysEncryptedEnclaveType.vbs.value # Create general purpose pool with default enclave type self.cmd('sql elastic-pool create -g {} --server {} --name {} --edition {} --preferred-enclave-type {}' From 7e19a72776f5996e08005ec727b9494837d25164 Mon Sep 17 00:00:00 2001 From: Hang Date: Mon, 7 Aug 2023 09:50:09 +0800 Subject: [PATCH 14/21] Minor fix --- azure-pipelines.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index ea449dd77b9..7c6dd28efcd 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -1117,9 +1117,9 @@ jobs: name: ${{ variables.ubuntu_pool }} steps: - task: UsePythonVersion@0 - displayName: 'Use Python 3.11' + displayName: 'Use Python 3.10' inputs: - versionSpec: 3.11 + versionSpec: 3.10 - bash: pip install --upgrade pip wheel displayName: "Install pip and wheel" - bash: ./scripts/ci/test_ref_doc.sh From 36d8dc447cd151ae8181d3d885bc379737ca4cd0 Mon Sep 17 00:00:00 2001 From: Hang Date: Mon, 7 Aug 2023 11:16:48 +0800 Subject: [PATCH 15/21] Use inspect.signature() --- src/azure-cli-core/azure/cli/core/util.py | 10 ++-------- .../azure/cli/testsdk/scenario_tests/utilities.py | 3 ++- .../azure_keyvault_t1/key_vault_authentication.py | 4 ++-- 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/src/azure-cli-core/azure/cli/core/util.py b/src/azure-cli-core/azure/cli/core/util.py index 8a63201a4d7..f54239ee2c2 100644 --- a/src/azure-cli-core/azure/cli/core/util.py +++ b/src/azure-cli-core/azure/cli/core/util.py @@ -655,14 +655,8 @@ def in_cloud_console(): def get_arg_list(op): import inspect - - try: - # only supported in python3 - falling back to argspec if not available - sig = inspect.signature(op) - return sig.parameters - except AttributeError: - sig = inspect.getfullargspec(op) - return sig.args + sig = inspect.signature(op) + return sig.parameters def is_track2(client_class): diff --git a/src/azure-cli-testsdk/azure/cli/testsdk/scenario_tests/utilities.py b/src/azure-cli-testsdk/azure/cli/testsdk/scenario_tests/utilities.py index af7b7680dba..375978f0b24 100644 --- a/src/azure-cli-testsdk/azure/cli/testsdk/scenario_tests/utilities.py +++ b/src/azure-cli-testsdk/azure/cli/testsdk/scenario_tests/utilities.py @@ -70,7 +70,8 @@ def trim_kwargs_from_test_function(fn, kwargs): # the next function is the actual test function. the kwargs need to be trimmed so # that parameters which are not required will not be passed to it. if not is_preparer_func(fn): - args, _, kw, *_ = inspect.getfullargspec(fn) + args = [i for i in inspect.signature(fn).parameters if i not in {'args', 'kwargs'}] + kw = inspect.signature(fn).parameters.get('kwargs') if kw is None: args = set(args) for key in [k for k in kwargs if k not in args]: diff --git a/src/azure-cli/azure/cli/command_modules/keyvault/vendored_sdks/azure_keyvault_t1/key_vault_authentication.py b/src/azure-cli/azure/cli/command_modules/keyvault/vendored_sdks/azure_keyvault_t1/key_vault_authentication.py index 523c218545f..22ae8bfd067 100644 --- a/src/azure-cli/azure/cli/command_modules/keyvault/vendored_sdks/azure_keyvault_t1/key_vault_authentication.py +++ b/src/azure-cli/azure/cli/command_modules/keyvault/vendored_sdks/azure_keyvault_t1/key_vault_authentication.py @@ -58,8 +58,8 @@ def __init__(self, authorization_callback): # for backwards compatibility we need to support callbacks which don't accept the scheme def _auth_callback_compat(self, server, resource, scope, scheme): - return self._user_callback(server, resource, scope) \ - if len(inspect.getfullargspec(self._user_callback).args) == 3 \ + args = [i for i in inspect.signature(self._user_callback).parameters if i not in {'args', 'kwargs'}] + return self._user_callback(server, resource, scope) if len(args) == 3 \ else self._user_callback(server, resource, scope, scheme) def __call__(self, request): From 87d3e9007861c36f3732442d07de771c32e9c35b Mon Sep 17 00:00:00 2001 From: Hang Date: Mon, 7 Aug 2023 15:25:15 +0800 Subject: [PATCH 16/21] Ignore deprecated-method --- src/azure-cli-core/azure/cli/core/telemetry.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/azure-cli-core/azure/cli/core/telemetry.py b/src/azure-cli-core/azure/cli/core/telemetry.py index 9ecef53ebd5..c933d775856 100644 --- a/src/azure-cli-core/azure/cli/core/telemetry.py +++ b/src/azure-cli-core/azure/cli/core/telemetry.py @@ -191,7 +191,7 @@ def _get_azure_cli_properties(self): lambda: _get_config().get('core', 'output', fallback='unknown')) set_custom_properties(result, 'EnvironmentVariables', _get_env_string) set_custom_properties(result, 'Locale', - lambda: '{},{}'.format(locale.getdefaultlocale()[0], locale.getdefaultlocale()[1])) + lambda: '{},{}'.format(locale.getdefaultlocale()[0], locale.getdefaultlocale()[1])) # pylint:disable=deprecated-method set_custom_properties(result, 'StartTime', str(self.start_time)) set_custom_properties(result, 'EndTime', str(self.end_time)) set_custom_properties(result, 'InitTimeElapsed', str(self.init_time_elapsed)) From c8109ffbc7754eeb199ccb7e8bd9d78f63b348e1 Mon Sep 17 00:00:00 2001 From: Hang Lei Date: Fri, 25 Aug 2023 16:05:33 +0800 Subject: [PATCH 17/21] Rollback to inspect.getfullargspec --- .../azure/cli/testsdk/scenario_tests/utilities.py | 3 +-- .../azure_keyvault_t1/key_vault_authentication.py | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/azure-cli-testsdk/azure/cli/testsdk/scenario_tests/utilities.py b/src/azure-cli-testsdk/azure/cli/testsdk/scenario_tests/utilities.py index 375978f0b24..af7b7680dba 100644 --- a/src/azure-cli-testsdk/azure/cli/testsdk/scenario_tests/utilities.py +++ b/src/azure-cli-testsdk/azure/cli/testsdk/scenario_tests/utilities.py @@ -70,8 +70,7 @@ def trim_kwargs_from_test_function(fn, kwargs): # the next function is the actual test function. the kwargs need to be trimmed so # that parameters which are not required will not be passed to it. if not is_preparer_func(fn): - args = [i for i in inspect.signature(fn).parameters if i not in {'args', 'kwargs'}] - kw = inspect.signature(fn).parameters.get('kwargs') + args, _, kw, *_ = inspect.getfullargspec(fn) if kw is None: args = set(args) for key in [k for k in kwargs if k not in args]: diff --git a/src/azure-cli/azure/cli/command_modules/keyvault/vendored_sdks/azure_keyvault_t1/key_vault_authentication.py b/src/azure-cli/azure/cli/command_modules/keyvault/vendored_sdks/azure_keyvault_t1/key_vault_authentication.py index 09bf914cf7b..be90ae86bdc 100644 --- a/src/azure-cli/azure/cli/command_modules/keyvault/vendored_sdks/azure_keyvault_t1/key_vault_authentication.py +++ b/src/azure-cli/azure/cli/command_modules/keyvault/vendored_sdks/azure_keyvault_t1/key_vault_authentication.py @@ -58,8 +58,8 @@ def __init__(self, authorization_callback): # for backwards compatibility we need to support callbacks which don't accept the scheme def _auth_callback_compat(self, server, resource, scope, scheme): - args = [i for i in inspect.signature(self._user_callback).parameters if i not in {'args', 'kwargs'}] - return self._user_callback(server, resource, scope) if len(args) == 3 \ + return self._user_callback(server, resource, scope) \ + if len(inspect.getfullargspec(self._user_callback).args) == 3 \ else self._user_callback(server, resource, scope, scheme) def __call__(self, request): From ba4951acc066f2b1beead0cac3cedf9b9a092a79 Mon Sep 17 00:00:00 2001 From: Hang Date: Tue, 12 Sep 2023 10:34:07 +0800 Subject: [PATCH 18/21] Replace locale.getdefaultlocale with locale.getlocale --- src/azure-cli-core/azure/cli/core/telemetry.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/azure-cli-core/azure/cli/core/telemetry.py b/src/azure-cli-core/azure/cli/core/telemetry.py index c933d775856..380360f8d72 100644 --- a/src/azure-cli-core/azure/cli/core/telemetry.py +++ b/src/azure-cli-core/azure/cli/core/telemetry.py @@ -191,7 +191,7 @@ def _get_azure_cli_properties(self): lambda: _get_config().get('core', 'output', fallback='unknown')) set_custom_properties(result, 'EnvironmentVariables', _get_env_string) set_custom_properties(result, 'Locale', - lambda: '{},{}'.format(locale.getdefaultlocale()[0], locale.getdefaultlocale()[1])) # pylint:disable=deprecated-method + lambda: '{},{}'.format(locale.getlocale()[0], locale.getlocale()[1])) set_custom_properties(result, 'StartTime', str(self.start_time)) set_custom_properties(result, 'EndTime', str(self.end_time)) set_custom_properties(result, 'InitTimeElapsed', str(self.init_time_elapsed)) From f2baaba3eace794a5f88aa657500a09690d2fee3 Mon Sep 17 00:00:00 2001 From: Hang Date: Wed, 13 Sep 2023 11:44:23 +0800 Subject: [PATCH 19/21] Use 3.10 in CodegenCoverage --- azure-pipelines.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 9c2a04b90d6..9cb205a970a 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -1039,9 +1039,9 @@ jobs: name: ${{ variables.ubuntu_pool }} steps: - task: UsePythonVersion@0 - displayName: 'Use Python 3.11' + displayName: 'Use Python 3.10' inputs: - versionSpec: 3.11 + versionSpec: 3.10 - template: .azure-pipelines/templates/azdev_setup.yml - bash: | set -ev From 6936dc5388553ee79b9e429b7a86d5459268d96d Mon Sep 17 00:00:00 2001 From: Hang Date: Wed, 13 Sep 2023 15:30:36 +0800 Subject: [PATCH 20/21] Revert fix mock_get_extension --- .../azure/cli/core/tests/test_command_registration.py | 8 ++++---- src/azure-cli-core/azure/cli/core/tests/test_parser.py | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/azure-cli-core/azure/cli/core/tests/test_command_registration.py b/src/azure-cli-core/azure/cli/core/tests/test_command_registration.py index 1bc3e87b566..6e96ef57f13 100644 --- a/src/azure-cli-core/azure/cli/core/tests/test_command_registration.py +++ b/src/azure-cli-core/azure/cli/core/tests/test_command_registration.py @@ -160,10 +160,10 @@ def _mock_get_extension_modname(ext_name, ext_dir): return "azext_always_loaded" def _mock_get_extensions(): - MockExtension = namedtuple('Extension', ['name', 'preview', 'experimental', 'path', 'get_metadata', 'version', 'ext_type']) - return [MockExtension(name=__name__ + '.ExtCommandsLoader', preview=False, experimental=False, path=None, get_metadata=lambda: {}, version='0.0.1', ext_type='dev'), - MockExtension(name=__name__ + '.Ext2CommandsLoader', preview=False, experimental=False, path=None, get_metadata=lambda: {}, version='0.0.1', ext_type='dev'), - MockExtension(name=__name__ + '.ExtAlwaysLoadedCommandsLoader', preview=False, experimental=False, path=None, get_metadata=lambda: {}, version='0.0.1', ext_type='dev')] + MockExtension = namedtuple('Extension', ['name', 'preview', 'experimental', 'path', 'get_metadata']) + return [MockExtension(name=__name__ + '.ExtCommandsLoader', preview=False, experimental=False, path=None, get_metadata=lambda: {}), + MockExtension(name=__name__ + '.Ext2CommandsLoader', preview=False, experimental=False, path=None, get_metadata=lambda: {}), + MockExtension(name=__name__ + '.ExtAlwaysLoadedCommandsLoader', preview=False, experimental=False, path=None, get_metadata=lambda: {})] def _mock_load_command_loader(loader, args, name, prefix): diff --git a/src/azure-cli-core/azure/cli/core/tests/test_parser.py b/src/azure-cli-core/azure/cli/core/tests/test_parser.py index 65e372a5e21..36b1849f1ca 100644 --- a/src/azure-cli-core/azure/cli/core/tests/test_parser.py +++ b/src/azure-cli-core/azure/cli/core/tests/test_parser.py @@ -144,9 +144,9 @@ def _mock_extension_modname(ext_name, ext_dir): return ext_name def _mock_get_extensions(**kwargs): - MockExtension = namedtuple('Extension', ['name', 'preview', 'experimental', 'path', 'get_metadata', 'version', 'ext_type']) - return [MockExtension(name=__name__ + '.ExtCommandsLoader', preview=False, experimental=False, path=None, get_metadata=lambda: {}, version='0.0.1', ext_type='dev'), - MockExtension(name=__name__ + '.Ext2CommandsLoader', preview=False, experimental=False, path=None, get_metadata=lambda: {}, version='0.0.1', ext_type='dev')] + MockExtension = namedtuple('Extension', ['name', 'preview', 'experimental', 'path', 'get_metadata']) + return [MockExtension(name=__name__ + '.ExtCommandsLoader', preview=False, experimental=False, path=None, get_metadata=lambda: {}), + MockExtension(name=__name__ + '.Ext2CommandsLoader', preview=False, experimental=False, path=None, get_metadata=lambda: {})] def _mock_load_command_loader(loader, args, name, prefix): from enum import Enum From 8b7a8c3bfd61b6496ff88d0b3ab65aadbaf06663 Mon Sep 17 00:00:00 2001 From: Hang Date: Thu, 14 Sep 2023 11:11:56 +0800 Subject: [PATCH 21/21] Use 3.11 in CodegenCoverage --- azure-pipelines.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 9cb205a970a..9c2a04b90d6 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -1039,9 +1039,9 @@ jobs: name: ${{ variables.ubuntu_pool }} steps: - task: UsePythonVersion@0 - displayName: 'Use Python 3.10' + displayName: 'Use Python 3.11' inputs: - versionSpec: 3.10 + versionSpec: 3.11 - template: .azure-pipelines/templates/azdev_setup.yml - bash: | set -ev