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
Beispiel #3
0
    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
Beispiel #4
0
 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)
Beispiel #6
0
    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)
Beispiel #8
0
    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
Beispiel #9
0
    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
Beispiel #10
0
    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)