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)
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())
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()