Ejemplo n.º 1
0
    def test_get_account_skey(self):
        config = {'account': {'skey': 'PASSWORD'}}

        Config.set_config(config)
        skey = Config.get_account_skey()

        self.assertEqual(skey, 'PASSWORD')
Ejemplo n.º 2
0
    def test_create_tasks_one_server_multiple_endpoints(self, mock, _):

        server_to_writer = {'Main': 'writer_1'}
        config = {
            'dls_settings': {
                'proxy': {
                    'proxy_server': 'test.com',
                    'proxy_port': 1234
                }
            },
            'account': {
                'ikey': 'a', 'skey': 'a', 'hostname': 'a',
                'endpoint_server_mappings': [
                    {
                        'endpoints': ['adminaction', 'auth', 'telephony', 'trustmonitor'],
                        'server': 'Main'
                    }
                ],
                'is_msp': False
            }
        }
        Config.set_config(config)

        create_tasks(server_to_writer)

        calls = [
            call('adminaction', 'writer_1', 'duo_admin'),
            call('auth', 'writer_1', 'duo_admin'),
            call('telephony', 'writer_1', 'duo_admin'),
            call('trustmonitor', 'writer_1', 'duo_admin')
        ]

        self.assertEquals(mock.call_count, 4)
        mock.assert_has_calls(calls, any_order=True)
Ejemplo n.º 3
0
    def test_create_tasks_multiple_servers_multiple_endpoints(self, mock, _):
        server_to_writer = {'Main': 'writer_1', 'Backup': 'writer_2'}
        config = {
            'account': {
                'ikey':
                'a',
                'skey':
                'a',
                'hostname':
                'a',
                'endpoint_server_mappings': [{
                    'endpoints': ['auth', 'telephony'],
                    'server': 'Main'
                }, {
                    'endpoints': ['adminaction'],
                    'server': 'Backup'
                }]
            }
        }
        Config.set_config(config)

        create_tasks(server_to_writer)

        calls = [
            call('adminaction', 'writer_2', 'duo_admin'),
            call('auth', 'writer_1', 'duo_admin'),
            call('telephony', 'writer_1', 'duo_admin')
        ]

        self.assertEquals(mock.call_count, 3)
        mock.assert_has_calls(calls, any_order=True)
Ejemplo n.º 4
0
    def test_create_tasks_one_server_multiple_endpoints_msp(self, mock, mock_childaccount,
                                                            mock_createadmin):
        server_to_writer = {'Main': 'writer_1'}
        config = {
            'account': {
                'ikey': 'a', 'skey': 'a', 'hostname': 'a',
                'endpoint_server_mappings': [
                    {
                        'endpoints': ['adminaction', 'auth', 'telephony'],
                        'server': 'Main'
                    }
                ],
                'is_msp': True
            }
        }
        Config.set_config(config)

        create_tasks(server_to_writer)

        calls = [
            call('adminaction', 'writer_1', duo_client.Accounts, '12345'),
            call('auth', 'writer_1', duo_client.Accounts, '12345'),
            call('telephony', 'writer_1', duo_client.Accounts, '12345'),
            call('adminaction', 'writer_1', duo_client.Accounts, '56789'),
            call('auth', 'writer_1', duo_client.Accounts, '56789'),
            call('telephony', 'writer_1', duo_client.Accounts, '56789')
        ]

        self.assertEqual(mock_childaccount.call_count, 1)
        self.assertEqual(mock.call_count, 6)
        mock.assert_has_calls(calls, any_order=True)
Ejemplo n.º 5
0
    def test_get_account_hostname(self):
        config = {'account': {'hostname': 'internet.com'}}

        Config.set_config(config)
        hostname = Config.get_account_hostname()

        self.assertEqual(hostname, 'internet.com')
Ejemplo n.º 6
0
    def test_set_config_normal(self):
        config = {'field_one': {'nested_field': True}, 'field_two': 100}

        Config.set_config(config)

        self.assertEqual(Config._config['field_one']['nested_field'], True)
        self.assertEqual(Config._config['field_two'], 100)
Ejemplo n.º 7
0
def main():
    """
    Kicks off DuoLogSync by setting important variables, creating and running
    a Producer-Consumer pair for each log-type defined in a config file passed
    to the program.
    """

    arg_parser = argparse.ArgumentParser(prog='duologsync',
                                         description="Path to config file")
    arg_parser.add_argument('ConfigPath', metavar='config-path', type=str,
                            help='Config to start application')
    args = arg_parser.parse_args()

    # Handle shutting down the program via Ctrl-C
    signal.signal(signal.SIGINT, sigint_handler)

    # Create a config Dictionary from a YAML file located at args.ConfigPath
    config = Config.create_config(args.ConfigPath)
    Config.set_config(config)

    Program.setup_logging(Config.get_log_filepath())

    # Dict of writers (server id: writer) to be used for consumer tasks
    server_to_writer = Writer.create_writers(Config.get_servers())

    # List of Producer/Consumer objects as asyncio tasks to be run
    tasks = create_tasks(server_to_writer)

    # Run the Producers and Consumers
    asyncio.get_event_loop().run_until_complete(asyncio.gather(*tasks))
    asyncio.get_event_loop().close()

    if Program.is_logging_set():
        print(f"DuoLogSync: shutdown successfully. Check "
              f"{Config.get_log_filepath()} for program logs")
Ejemplo n.º 8
0
    def test_get_servers(self):
        config = {'servers': ['item1', 'item2']}

        Config.set_config(config)
        servers = Config.get_servers()

        self.assertEqual(servers, ['item1', 'item2'])
Ejemplo n.º 9
0
    def test_get_account_ikey(self):
        config = {'account': {'ikey': 'ASDFF'}}

        Config.set_config(config)
        ikey = Config.get_account_ikey()

        self.assertEqual(ikey, 'ASDFF')
Ejemplo n.º 10
0
    def test_get_checkpointing_enabled(self):
        config = {'dls_settings': {'checkpointing': {'enabled': False}}}

        Config.set_config(config)
        checkpointing_enabled = Config.get_checkpointing_enabled()

        self.assertEqual(checkpointing_enabled, False)
Ejemplo n.º 11
0
    def test_get_checkpoint_dir(self):
        config = {'dls_settings': {'checkpointing': {'directory': '/tmp'}}}

        Config.set_config(config)
        checkpoint_dir = Config.get_checkpoint_dir()

        self.assertEqual(checkpoint_dir, '/tmp')
Ejemplo n.º 12
0
    def test_get_log_filepath(self):
        config = {'dls_settings': {'log_filepath': '/dev/null'}}

        Config.set_config(config)
        log_filepath = Config.get_log_filepath()

        self.assertEqual(log_filepath, '/dev/null')
Ejemplo n.º 13
0
    def test_get_log_format(self):
        config = {'dls_settings': {'log_format': 'JSON'}}

        Config.set_config(config)
        log_format = Config.get_log_format()

        self.assertEqual(log_format, 'JSON')
Ejemplo n.º 14
0
    def test_set_config_twice(self):
        config = {'field_one': {'nested_field': True}, 'field_two': 100}

        Config.set_config(config)

        with self.assertRaises(RuntimeError):
            Config.set_config(config)
Ejemplo n.º 15
0
    def test_get_value_with_invalid_keys(self):
        config = {'field_one': {'nested_field': True}, 'field_two': 100}

        Config.set_config(config)

        with self.assertRaises(ValueError):
            Config.get_value(['house_key', 'car_key'])
Ejemplo n.º 16
0
    def test_get_account_block_list(self):
        config = {'account': {'block_list': ['thing1', 'blue fish']}}

        Config.set_config(config)
        block_list = Config.get_account_block_list()

        self.assertEqual(block_list, ['thing1', 'blue fish'])
Ejemplo n.º 17
0
    def test_account_is_msp(self):
        config = {'account': {'is_msp': False}}

        Config.set_config(config)
        is_msp = Config.account_is_msp()

        self.assertEqual(is_msp, False)
Ejemplo n.º 18
0
    def test_get_account_endpoint_server_mappings(self):
        config = {'account': {'endpoint_server_mappings': {'auth': 'ha.com'}}}

        Config.set_config(config)
        endpoint_server_mappings = Config.get_account_endpoint_server_mappings(
        )

        self.assertEqual(endpoint_server_mappings, {'auth': 'ha.com'})
Ejemplo n.º 19
0
    def test_get_value_normal(self):
        config = {'field_one': {'nested_field': True}, 'field_two': 100}

        Config.set_config(config)
        value_one = Config.get_value(['field_one', 'nested_field'])
        value_two = Config.get_value(['field_two'])

        self.assertEqual(value_one, True)
        self.assertEqual(value_two, 100)
Ejemplo n.º 20
0
def main():
    """
    Kicks off DuoLogSync by setting important variables, creating and running
    a Producer-Consumer pair for each log-type defined in a config file passed
    to the program.
    """

    arg_parser = argparse.ArgumentParser(prog='duologsync',
                                         description="Path to config file")
    arg_parser.add_argument('ConfigPath',
                            metavar='config-path',
                            type=str,
                            help='Config to start application')
    args = arg_parser.parse_args()

    # Handle shutting down the program via Ctrl-C
    signal.signal(signal.SIGINT, sigint_handler)

    # Create a config Dictionary from a YAML file located at args.ConfigPath
    config = Config.create_config(args.ConfigPath)
    Config.set_config(config)

    # Do extra checks for Trust Monitor support
    is_dtm_in_config = check_for_specific_endpoint('trustmonitor', config)
    log_format = Config.get_log_format()
    is_msp = Config.account_is_msp()

    if (is_dtm_in_config and log_format != 'JSON'):
        Program.log(f"DuoLogSync: Trust Monitor endpoint only supports JSON",
                    logging.WARNING)
        return

    if (is_dtm_in_config and is_msp):
        Program.log(
            f"DuoLogSync: Trust Monitor endpoint only supports non-msp",
            logging.WARNING)
        return

    Program.setup_logging(Config.get_log_filepath())

    # Dict of writers (server id: writer) to be used for consumer tasks
    server_to_writer = Writer.create_writers(Config.get_servers())

    # List of Producer/Consumer objects as asyncio tasks to be run
    tasks = create_tasks(server_to_writer)

    # Run the Producers and Consumers
    asyncio.get_event_loop().run_until_complete(asyncio.gather(*tasks))
    asyncio.get_event_loop().close()

    if Program.is_logging_set():
        print(f"DuoLogSync: shutdown successfully. Check "
              f"{Config.get_log_filepath()} for program logs")
Ejemplo n.º 21
0
    def test_create_tasks_one_server_per_endpoint(self, mock, _):
        server_to_writer = {'AuthServer': 'writer_1',
                            'AdminServer': 'writer_2',
                            'TelephonyServer': 'writer_3'}
        config = {
            'account': {
                'ikey': 'a', 'skey': 'a', 'hostname': 'a',
                'endpoint_server_mappings': [
                    {
                        'endpoints': ['auth'],
                        'server': 'AuthServer'
                    },
                    {
                        'endpoints': ['adminaction'],
                        'server': 'AdminServer'
                    },
                    {
                        'endpoints': ['telephony'],
                        'server': 'TelephonyServer'
                    }
                ],
                'is_msp': False
            }
        }
        Config.set_config(config)

        create_tasks(server_to_writer)

        calls = [
            call('adminaction', 'writer_2', 'duo_admin'),
            call('auth', 'writer_1', 'duo_admin'),
            call('telephony', 'writer_3', 'duo_admin')
        ]

        self.assertEquals(mock.call_count, 3)
        mock.assert_has_calls(calls, any_order=True)