Example #1
0
 def test_compose_epilog_returns_epilog(self):
     epilog = factory.make_name("epi")
     self.assertEqual(
         "\n\n%s" % epilog,
         "\n".join(
             api.ActionHelp.compose_epilog(ArgumentParser(epilog=epilog))),
     )
Example #2
0
 def test_compose_epilog_explains_documented_keyword_args(self):
     epilog = ":param foo: The amount of foo."
     self.assertEqual(
         "\n\n%s\n%s" % (api.ActionHelp.keyword_args_help, epilog),
         "\n".join(
             api.ActionHelp.compose_epilog(ArgumentParser(epilog=epilog))),
     )
Example #3
0
 def test_get_positional_args_includes_other_arg(self):
     parser = ArgumentParser()
     parser.add_argument("data")
     option = factory.make_name("opt", sep="_")
     parser.add_argument(option)
     self.assertEqual(["data", option],
                      api.ActionHelp.get_positional_args(parser))
Example #4
0
 def test_get_optional_args_returns_optional_args(self):
     option = "--%s" % factory.make_name("opt")
     parser = ArgumentParser(add_help=False)
     parser.add_argument(option)
     args = api.ActionHelp.get_optional_args(parser)
     self.assertEqual([[option]],
                      [action.option_strings for action in args])
Example #5
0
 def test_subparsers_have_appropriate_execute_defaults(self):
     parser = ArgumentParser()
     cli.register_cli_commands(parser)
     self.assertIsInstance(
         parser.subparsers.choices["login"].get_default("execute"),
         cli.cmd_login,
     )
Example #6
0
 def test_load_init_command_no_snap(self):
     environ = {}
     self.patch(os, "environ", environ)
     parser = ArgumentParser()
     cli.register_cli_commands(parser)
     subparser = parser.subparsers.choices.get("init")
     self.assertIsInstance(subparser.get_default("execute"), cli.cmd_init)
Example #7
0
 def test_requires_root(self):
     parser = ArgumentParser()
     cmd = snappy.cmd_status(parser)
     self.patch(os, "getuid").return_value = 1000
     error = self.assertRaises(SystemExit, cmd, parser.parse_args([]))
     self.assertEqual(str(error),
                      "The 'status' command must be run by root.")
Example #8
0
 def test_compose_optional_args_returns_empty_if_none_defined(self):
     self.assertEqual(
         [],
         api.ActionHelp.compose_optional_args(
             ArgumentParser(add_help=False)
         ),
     )
Example #9
0
 def test_registers_subparsers(self):
     profile_name = list(self.make_profile().keys())[0]
     parser = ArgumentParser()
     self.assertIsNone(parser._subparsers)
     api.register_api_commands(parser)
     self.assertIsNotNone(parser._subparsers)
     self.assertIsNotNone(parser.subparsers.choices[profile_name])
Example #10
0
 def test_compose_epilog_preserves_indentation(self):
     indent = ' ' * 8
     epilog = indent + factory.make_name('epi')
     self.assertEqual(
         "\n\n%s" % epilog,
         '\n'.join(
             api.ActionHelp.compose_epilog(ArgumentParser(epilog=epilog))))
Example #11
0
 def test_compose_positional_args_does_not_end_with_newline(self):
     arg = factory.make_name('arg', sep='_')
     parser = ArgumentParser()
     parser.add_argument(arg)
     self.assertThat(
         '\n'.join(api.ActionHelp.compose_positional_args(parser)),
         Not(EndsWith('\n')))
Example #12
0
 def setUp(self):
     super().setUp()
     self.parser = ArgumentParser()
     init.add_create_admin_options(self.parser)
     self.mock_call = self.patch(init.subprocess, 'call')
     self.mock_print_msg = self.patch(init, 'print_msg')
     self.maas_region_path = init.get_maas_region_bin_path()
Example #13
0
 def test_load_init_command_snap(self):
     environ = {'SNAP': 'snap-path'}
     self.patch(os, 'environ', environ)
     parser = ArgumentParser()
     cli.register_cli_commands(parser)
     subparser = parser.subparsers.choices.get('init')
     self.assertIsInstance(subparser.get_default('execute'),
                           snappy.cmd_init)
Example #14
0
 def test_doesnt_call_load_regiond_commands_if_no_management(self):
     self.patch(cli, "get_django_management").return_value = None
     self.patch(cli,
                "is_maasserver_available").return_value = sentinel.pkg_util
     mock_load_regiond_commands = self.patch(cli, "load_regiond_commands")
     parser = ArgumentParser()
     cli.register_cli_commands(parser)
     mock_load_regiond_commands.assert_not_called()
Example #15
0
 def test_get_positional_args_includes_other_arg(self):
     parser = ArgumentParser()
     parser.add_argument('data')
     option = factory.make_name('opt', sep='_')
     parser.add_argument(option)
     self.assertEqual(
         ['data', option],
         api.ActionHelp.get_positional_args(parser))
Example #16
0
 def test_doesnt_call_load_regiond_commands_if_no_maasserver(self):
     self.patch(cli,
                "get_django_management").return_value = sentinel.management
     self.patch(cli, "is_maasserver_available").return_value = None
     mock_load_regiond_commands = self.patch(cli, "load_regiond_commands")
     parser = ArgumentParser()
     cli.register_cli_commands(parser)
     self.assertThat(mock_load_regiond_commands, MockNotCalled())
Example #17
0
 def test_compose_positional_args_does_not_end_with_newline(self):
     arg = factory.make_name("arg", sep="_")
     parser = ArgumentParser()
     parser.add_argument(arg)
     self.assertThat(
         "\n".join(api.ActionHelp.compose_positional_args(parser)),
         Not(EndsWith("\n")),
     )
Example #18
0
 def test_load_init_command_no_snap_no_maasserver(self):
     environ = {}
     self.patch(os, "environ", environ)
     self.patch(cli, "is_maasserver_available").return_value = None
     parser = ArgumentParser()
     cli.register_cli_commands(parser)
     subparser = parser.subparsers.choices.get("init")
     self.assertIsNone(subparser)
Example #19
0
    def test_call_shows_full_enchilada(self):
        usage = factory.make_name("usage")
        description = factory.make_name("description")
        epilog = dedent("""\
            More detailed description here.
            Typically more than one line.
            :param foo: The amount of foo.
            """).rstrip()
        arg = factory.make_name("arg", sep="_")
        parser = ArgumentParser(usage=usage,
                                description=description,
                                epilog=epilog,
                                add_help=False)
        parser.add_argument(arg)
        option = "--%s" % factory.make_name("opt")
        option_help = factory.make_name("help")
        parser.add_argument(option, help=option_help)
        params = {
            "usage": usage,
            "description": description,
            "arg": arg,
            "keyword_args_help": api.ActionHelp.keyword_args_help.rstrip(),
            "epilog": epilog,
            "option": option,
            "option_help": option_help,
        }
        expected_text = (dedent("""\
            usage: %(usage)s

            %(description)s


            Positional arguments:
            \t%(arg)s


            %(keyword_args_help)s

            %(epilog)s


            Common command-line options:
                %(option)s
            \t%(option_help)s
            """).rstrip() % params)
        action_help = self.make_help()
        self.patch(sys, "exit")
        self.patch(api, "print")

        # Invoke ActionHelp.__call__, so we can see what it prints.
        action_help(
            parser,
            self.make_namespace(),
            self.make_values(),
            self.make_option_string(),
        )

        self.assertThat(api.print, MockCalledOnceWith(expected_text))
Example #20
0
 def test_call_exits(self):
     parser = ArgumentParser(description=factory.make_string())
     action_help = self.make_help()
     self.patch(sys, 'exit')
     self.patch(api, 'print')
     action_help(
         parser, self.make_namespace(), self.make_values(),
         self.make_option_string())
     self.assertThat(sys.exit, MockCalledOnceWith(0))
Example #21
0
    def test_not_a_subparser(self):
        top_parser = ArgumentParser()
        foo = top_parser.subparsers.add_parser("foo", help="foo help")
        bar = foo.subparsers.add_parser("bar", help="bar help")

        assert (
            get_deepest_subparser(top_parser, ["foo", "bar", "--help"]) is bar
        )
        assert get_deepest_subparser(top_parser, ["--random"]) is top_parser
Example #22
0
 def setUp(self):
     super().setUp()
     self.parser = ArgumentParser()
     self.cmd = snappy.cmd_config(self.parser)
     self.patch(os, "getuid").return_value = 0
     snap_common = self.make_dir()
     snap_data = self.make_dir()
     self.useFixture(EnvironmentVariableFixture("SNAP_COMMON", snap_common))
     self.useFixture(EnvironmentVariableFixture("SNAP_DATA", snap_data))
Example #23
0
 def setUp(self):
     super().setUp()
     self.parser = ArgumentParser()
     self.cmd = cli.cmd_init(self.parser)
     self.maas_region_path = init.get_maas_region_bin_path()
     self.call_mock = self.patch(init.subprocess, 'call')
     self.check_output_mock = self.patch(init.subprocess, 'check_output')
     self.check_output_mock.return_value = json.dumps(
         {'external_auth_url': ''})
Example #24
0
 def test_cmd_configure_supervisord(self):
     self.patch(snappy, "get_current_mode").return_value = "region+rack"
     mock_render_supervisord = self.patch(snappy, "render_supervisord")
     mock_sighup_supervisord = self.patch(snappy, "sighup_supervisord")
     parser = ArgumentParser()
     cmd = snappy.cmd_reconfigure_supervisord(parser)
     cmd(parser.parse_args([]))
     mock_render_supervisord.assert_called_once_with("region+rack")
     mock_sighup_supervisord.assert_called_once()
Example #25
0
 def test_hidden_commands(self):
     environ = {"SNAP": "snap-path", "SNAP_COMMON": "snap-common"}
     self.patch(os, "environ", environ)
     stdout = self.patch(sys, "stdout", StringIO())
     parser = ArgumentParser()
     cli.register_cli_commands(parser)
     error = self.assertRaises(SystemExit, parser.parse_args, ["--help"])
     self.assertEqual(error.code, 0)
     self.assertNotIn("reconfigure-supervisord", stdout.getvalue())
Example #26
0
 def setUp(self):
     super().setUp()
     self.maas_bin_path = 'snap-path/bin/maas-region'
     self.mock_subprocess = self.patch(init, 'subprocess')
     self.mock_environ = patch.dict(init.os.environ, {'SNAP': 'snap-path'},
                                    clear=True)
     self.mock_environ.start()
     self.parser = ArgumentParser()
     init.add_idm_options(self.parser)
Example #27
0
 def test_loads_all_regiond_commands(self):
     parser = ArgumentParser()
     cli.register_cli_commands(parser)
     for name, app, help_text in cli.regiond_commands:
         subparser = parser.subparsers.choices.get(name)
         klass = management.load_command_class(app, name)
         if help_text is None:
             help_text = klass.help
         self.assertIsNotNone(subparser)
         self.assertEqual(help_text, subparser.description)
Example #28
0
 def test_cmd_login_raises_unexpected_error_when_validating_apikey(self):
     parser = ArgumentParser()
     options = make_options()
     check_key = self.patch(cli, "check_valid_apikey")
     check_key_error_message = factory.make_name("error")
     check_key_error = UnexpectedResponse(check_key_error_message)
     check_key.side_effect = check_key_error
     login = cli.cmd_login(parser)
     error = self.assertRaises(SystemExit, login, options)
     self.assertEqual(check_key_error_message, str(error))
Example #29
0
 def test_calls_load_regiond_commands_when_management_and_maasserver(self):
     self.patch(cli,
                "get_django_management").return_value = sentinel.management
     self.patch(cli,
                "is_maasserver_available").return_value = sentinel.pkg_util
     mock_load_regiond_commands = self.patch(cli, "load_regiond_commands")
     parser = ArgumentParser()
     cli.register_cli_commands(parser)
     mock_load_regiond_commands.assert_called_once_with(
         sentinel.management, parser)
Example #30
0
 def setUp(self):
     super().setUp()
     self.maas_bin_path = "snap-path/bin/maas-region"
     self.mock_subprocess = self.patch(init, "subprocess")
     self.mock_environ = patch.dict(init.os.environ, {"SNAP": "snap-path"},
                                    clear=True)
     self.mock_environ.start()
     self.parser = ArgumentParser()
     init.add_rbac_options(self.parser)
     init.add_candid_options(self.parser)