def __init__(self, name_prefix='clitest.vn', parameter_name='subnet', resource_group_name=None, resource_group_key=KEY_RESOURCE_GROUP, vnet_name=None, vnet_key=KEY_VIRTUAL_NETWORK, address_prefixes="11.0.0.0/24", dev_setting_name='AZURE_CLI_TEST_DEV_VNET_SUBNET_NAME', random_name_length=24, key=KEY_VNET_SUBNET): if ' ' in name_prefix: raise CliTestError('Error: Space character in name prefix \'%s\'' % name_prefix) super(VnetSubnetPreparer, self).__init__(name_prefix, random_name_length) self.cli_ctx = get_dummy_cli() self.parameter_name = parameter_name self.key = key self.resource_group_name = resource_group_name self.resource_group_key = resource_group_key self.vnet_name = vnet_name self.vnet_key = vnet_key self.address_prefixes = address_prefixes self.dev_setting_name = os.environ.get(dev_setting_name, None)
def __init__( self, resource_group_key="rg", key="vn", name_prefix="clitest.vn", random_name_length=24, ): super(VirtualNetworkPreparer, self).__init__(name_prefix, random_name_length) self.cli_ctx = get_dummy_cli() self.key = key self.resource_group_key = resource_group_key self.name_prefix = name_prefix self.random_name_length = random_name_length
def _run_cmd(self, command, checks=None, expect_failure=False): cli_ctx = get_dummy_cli() cli_ctx.logging.command_log_dir = self.temp_command_log_dir result = execute(cli_ctx, command, expect_failure=expect_failure).assert_with_checks(checks) # manually handle error logging as azure.cli.core.util's handle_exception function is mocked out in testsdk / patches # this logged error tests that we can properly parse errors from command log file. with CommandLoggerContext(logger): if result.exit_code != 0: logger.error("There was an error during execution.") cli_ctx.logging.end_cmd_metadata_logging(result.exit_code) return result
def __init__(self, name_prefix='clitest.nic', parameter_name='subnet', resource_group_key=KEY_RESOURCE_GROUP, vnet_key=KEY_VIRTUAL_NETWORK, dev_setting_name='AZURE_CLI_TEST_DEV_VNET_NIC_NAME', key=KEY_VNET_NIC): if ' ' in name_prefix: raise CliTestError( 'Error: Space character in name prefix \'%s\'' % name_prefix) super(VnetNicPreparer, self).__init__(name_prefix, 15) self.cli_ctx = get_dummy_cli() self.parameter_name = parameter_name self.key = key self.resource_group = [resource_group_key, None] self.vnet = [vnet_key, None] self.dev_setting_name = os.environ.get(dev_setting_name, None)
def __init__(self, name_prefix='clitest.vn', parameter_name='virtual_network', resource_group_name=None, resource_group_key=KEY_RESOURCE_GROUP, dev_setting_name='AZURE_CLI_TEST_DEV_VIRTUAL_NETWORK_NAME', random_name_length=24, key=KEY_VIRTUAL_NETWORK): if ' ' in name_prefix: raise CliTestError( 'Error: Space character in name prefix \'%s\'' % name_prefix) super(VirtualNetworkPreparer, self).__init__( name_prefix, random_name_length) self.cli_ctx = get_dummy_cli() self.parameter_name = parameter_name self.key = key self.resource_group_name = resource_group_name self.resource_group_key = resource_group_key self.dev_setting_name = os.environ.get(dev_setting_name, None)
def _run_cmd(self, command, checks=None, expect_failure=False): cli_ctx = get_dummy_cli() cli_ctx.logging.command_log_dir = self.temp_command_log_dir # azure.cli.core.util.handle_exception is mocked by azure.cli.testsdk.patches.patch_main_exception_handler # Patch it again so that errors are properly written to command log file. from azure.cli.core.util import handle_exception original_handle_exception = handle_exception def _handle_exception_with_log(ex, *args, **kwargs): with CommandLoggerContext(logger): logger.error(ex) original_handle_exception(*args, **kwargs) with mock.patch('azure.cli.core.util.handle_exception', _handle_exception_with_log): result = execute( cli_ctx, command, expect_failure=expect_failure).assert_with_checks(checks) return result
def __init__( self, name_prefix='clitest', location='Global', data_location='United States', length=24, parameter_name='communication_resource', resource_group_parameter_name='resource_group', skip_delete=True, dev_setting_name='AZURE_CLI_TEST_DEV_COMMUNICATION_RESOURCE_NAME', key='cr'): super(CommunicationResourcePreparer, self).__init__(name_prefix, length) self.cli_ctx = get_dummy_cli() self.location = location self.data_location = data_location self.resource_group_parameter_name = resource_group_parameter_name self.skip_delete = skip_delete self.parameter_name = parameter_name self.key = key self.dev_setting_name = os.environ.get(dev_setting_name, None)
def __init__(self, name_prefix='clitest.rg', parameter_name='resource_group', parameter_name_for_location='resource_group_location', location='westus', dev_setting_name='AZURE_CLI_TEST_DEV_RESOURCE_GROUP_NAME', dev_setting_location='AZURE_CLI_TEST_DEV_RESOURCE_GROUP_LOCATION', random_name_length=75, key='rg'): if ' ' in name_prefix: raise CliTestError( 'Error: Space character in resource group name prefix \'%s\'' % name_prefix) super(AKSCustomResourceGroupPreparer, self).__init__( name_prefix, random_name_length) self.cli_ctx = get_dummy_cli() self.location = location self.parameter_name = parameter_name self.parameter_name_for_location = parameter_name_for_location self.key = key self.dev_setting_name = os.environ.get(dev_setting_name, None) # use environment variable to modify the default value of location self.dev_setting_location = os.environ.get(dev_setting_location, None) if self.dev_setting_location is not None and self.dev_setting_location != "": self.location = self.dev_setting_location
def _run_cmd(self, command, checks=None, expect_failure=False): cli_ctx = get_dummy_cli() cli_ctx.logging.command_log_dir = self.temp_command_log_dir # hotfix here for untouch feedback's code to avoid introducing possible break change. # unregister the event for auto closing CLI's file logging after execute() is done cli_ctx.unregister_event(EVENT_CLI_POST_EXECUTE, cli_ctx.logging.deinit_cmd_metadata_logging) # manually handle error logging as azure.cli.core.util's handle_exception function is mocked out in testsdk / patches # this logged error tests that we can properly parse errors from command log file. with CommandLoggerContext(logger): result = execute( cli_ctx, command, expect_failure=expect_failure).assert_with_checks(checks) if result.exit_code != 0: logger.error("There was an error during execution.") # close it manually because we unregister the deinit_cmd_metadata_logging # callback from EVENT_CLI_POST_EXECUTE event cli_ctx.logging.end_cmd_metadata_logging(result.exit_code) return result
def test_containerapp_ssh(self, resource_group=None, *args): # containerapp_name = self.create_random_name(prefix='capp', length=24) # env_name = self.create_random_name(prefix='env', length=24) # self.cmd(f'containerapp env create -g {resource_group} -n {env_name}') # self.cmd(f'containerapp create -g {resource_group} -n {containerapp_name} --environment {env_name} --min-replicas 1 --ingress external') # TODO remove hardcoded app info (currently the SSH feature is only enabled in stage) # these are only in my sub so they won't work on the CI / other people's machines containerapp_name = "stage" resource_group = "sca" stdout_buff = [] def mock_print(*args, end="\n", **kwargs): out = " ".join([str(a) for a in args]) if not stdout_buff: stdout_buff.append(out) elif end != "\n": stdout_buff[-1] = f"{stdout_buff[-1]}{out}" else: stdout_buff.append(out) commands = "\n".join( ["whoami", "pwd", "ls -l | grep index.js", "exit\n"]) expected_output = [ "root", "/usr/src/app", "-rw-r--r-- 1 root root 267 Oct 15 00:21 index.js" ] idx = [0] def mock_getch(): ch = commands[idx[0]].encode("utf-8") idx[0] = (idx[0] + 1) % len(commands) return ch cmd = mock.MagicMock() cmd.cli_ctx = get_dummy_cli() from azext_containerapp._validators import validate_ssh from azext_containerapp.custom import containerapp_ssh class Namespace: pass namespace = Namespace() setattr(namespace, "name", containerapp_name) setattr(namespace, "resource_group_name", resource_group) setattr(namespace, "revision", None) setattr(namespace, "replica", None) setattr(namespace, "container", None) validate_ssh(cmd=cmd, namespace=namespace ) # needed to set values for container, replica, revision mock_lib = "tty.setcbreak" if platform.system() == "Windows": mock_lib = "azext_containerapp._ssh_utils.enable_vt_mode" with mock.patch("builtins.print", side_effect=mock_print), mock.patch(mock_lib): with mock.patch("azext_containerapp._ssh_utils._getch_unix", side_effect=mock_getch), mock.patch( "azext_containerapp._ssh_utils._getch_windows", side_effect=mock_getch): containerapp_ssh( cmd=cmd, resource_group_name=namespace.resource_group_name, name=namespace.name, container=namespace.container, revision=namespace.revision, replica=namespace.replica, startup_command="sh") for line in expected_output: self.assertIn(line, expected_output)