示例#1
0
    def test_user_json_data_can_be_parsed(self, module):
        """Ensure that user json data can be parsed.

        From version 3.7 onwards `rabbitmqctl` can output the user data in proper json format. Check that parsing
        works correctly.
        """
        def side_effect(args):
            self.assertTrue('-q' in args)
            self.assertTrue('--formatter' in args)
            self.assertTrue('json' in args)
            if 'status' in args:
                return 0, rabbitmq_3_8_status.replace('version_num',
                                                      '3.8.1'), ''
            if 'list_users' in args:
                return 0, '''[
{"user":"******","tags":["administrator","management"]}
]''', ''
            if 'list_user_permissions' in args:
                return 0, '''[
{"vhost":"/test","configure":"^$","write":"^$","read":"^$"}
,{"vhost":"/","configure":"^$","write":"^$","read":"^$"}
]''', ''
            return 100, '', ''

        module.run_command.side_effect = side_effect
        user_controller = rabbitmq_user.RabbitMqUser(module,
                                                     'someuser',
                                                     'somepassword',
                                                     list(), [{
                                                         'vhost': '/',
                                                         'configure': '^$',
                                                         'write': '^$',
                                                         'read': '^$'
                                                     }],
                                                     'rabbit',
                                                     bulk_permissions=True)
        self.assertTrue(user_controller.get())
        self.assertTrue(user_controller._version,
                        distutils.version.StrictVersion('3.8.1'))
        self.assertTrue(user_controller.existing_tags,
                        ["administrator", "management"])
        self.assertTrue(
            user_controller.existing_permissions == {
                '/test': {
                    'vhost': '/test',
                    'configure': '^$',
                    'write': '^$',
                    'read': '^$'
                },
                '/': {
                    'vhost': '/',
                    'configure': '^$',
                    'write': '^$',
                    'read': '^$'
                }
            })
        self.assertEqual(module.run_command.call_count, 3)
示例#2
0
    def test_non_bulk_permissions_are_parsed_and_set(self, _check_version,
                                                     _exec, module):
        """Test that non bulk permissions are parsed correctly.

        Non-bulk permissions mean that only the permissions of the VHost specified will be changed if needed.
        If the same user has permissions in other VHosts, these will not be modified.
        """
        module.get_bin_path.return_value = '/rabbitmqctl'
        module.check_mode = False
        _check_version.return_value = distutils.version.StrictVersion('3.8.0')

        def side_effect(args):
            self.assertTrue('--formatter' in args, args)
            self.assertTrue('json' in args, args)
            if 'list_users' in args:
                return '''[
{"user":"******","tags":["administrator","management"]}
]'''
            if 'list_user_permissions' in args:
                self.assertTrue('someuser' in args, args)
                return '''[
{"vhost":"/test","configure":"^$","write":"^$","read":"^$"}
,{"vhost":"/","configure":"^$","write":"^$","read":"^$"}
]'''
            raise Exception('wrong command: ' + str(args))

        _exec.side_effect = side_effect
        user_controller = rabbitmq_user.RabbitMqUser(
            module, 'someuser', 'somepassword', list(), [{
                'vhost': '/',
                'configure_priv': '.*',
                'write_priv': '.*',
                'read_priv': '.*'
            }], 'rabbit')
        user_controller.get()

        self.assertEqual(_exec.call_count, 2)
        self.assertListEqual(list(user_controller.existing_permissions.keys()),
                             ['/'])
        self.assertEqual(user_controller.existing_permissions['/']['write'],
                         '^$')
        self.assertEqual(user_controller.existing_permissions['/']['read'],
                         '^$')
        self.assertEqual(
            user_controller.existing_permissions['/']['configure'], '^$')
        self.assertTrue(user_controller.has_permissions_modifications())
示例#3
0
    def test_status_can_be_parsed(self, module):
        """Test correct parsing of the output of the status command."""
        module.get_bin_path.return_value = '/rabbitmqctl'
        module.check_mode = False

        versions = ['3.6.10', '3.6.16']
        for version_num in versions:

            def side_effect(args):
                assert '-q' in args
                if '--formatter' in args:
                    return 64, '', ''
                return 0, rabbitmq_3_6_status.replace('version_num',
                                                      version_num), ''

            module.run_command.side_effect = side_effect
            user_controller = rabbitmq_user.RabbitMqUser(
                module, 'someuser', 'somepassword', list(), list(), 'rabbit')
            self.assertEqual(len(module.run_command.call_args_list), 2)
            last_call_args = flatten(module.run_command.call_args_list[-1][0])
            self.assertTrue('-q' in last_call_args)
            self.assertTrue('--formatter' not in last_call_args)
            self.assertEqual(user_controller._version,
                             distutils.version.StrictVersion(version_num))
            module.run_command.reset_mock()

        versions = [
            '3.7.6', '3.7.7', '3.7.8', '3.7.9', '3.7.10', '3.7.11', '3.7.12',
            '3.7.13', '3.7.14', '3.7.15', '3.7.16', '3.7.17', '3.7.18',
            '3.7.19', '3.7.20', '3.7.21', '3.7.22', '3.7.23'
        ]
        for version_num in versions:

            def side_effect(args):
                self.assertTrue('-q' in args)
                self.assertTrue('--formatter' in args)
                self.assertTrue('json' in args)
                return 0, rabbitmq_3_7_status.replace(
                    'version_num', str([ord(c) for c in version_num])), ''

            module.run_command.side_effect = side_effect
            user_controller = rabbitmq_user.RabbitMqUser(
                module, 'someuser', 'somepassword', list(), list(), 'rabbit')
            self.assertEqual(1, module.run_command.call_count)
            self.assertEqual(user_controller._version,
                             distutils.version.StrictVersion(version_num))
            module.run_command.reset_mock()

        versions = ['3.8.0', '3.8.1', '3.8.2']
        for version_num in versions:

            def side_effect(args):
                self.assertTrue('-q' in args)
                self.assertTrue('--formatter' in args)
                self.assertTrue('json' in args)
                return 0, rabbitmq_3_8_status.replace('version_num',
                                                      version_num), ''

            module.run_command.side_effect = side_effect
            user_controller = rabbitmq_user.RabbitMqUser(
                module, 'someuser', 'somepassword', list(), list(), 'rabbit')
            self.assertEqual(1, module.run_command.call_count)
            self.assertEqual(user_controller._version,
                             distutils.version.StrictVersion(version_num))
            module.run_command.reset_mock()