예제 #1
0
    def setUp(self) -> None:
        self.middlewares = ConfigBuilder.build_from(
            TEST_MIDDLEWARES_CONFIG_PATH).get('middlewares')

        self.session_storage = Storage()
        self.server_storage = Storage()
        self.global_storage = Storage()
예제 #2
0
class TestInfiniteLoopBuilder(TestCase):
    def setUp(self) -> None:
        self.middlewares = ConfigBuilder.build_from(
            TEST_MIDDLEWARES_CONFIG_PATH).get('middlewares')

        self.session_storage = Storage()
        self.server_storage = Storage()
        self.global_storage = Storage()

    def test_infinite_loop_building(self):
        infinite_loop: partial = InfiniteLoopBuilder.build_from(
            self.middlewares.get('only_infinite_loop'))
        self.assertEqual(infinite_loop.func.__name__, 'infinite_loop')

    @async_test
    async def test_infinite_loop_processing(self):
        infinite_loop: partial = InfiniteLoopBuilder.build_from(
            self.middlewares.get('only_infinite_loop'))

        middlewares_amount = len(
            self.middlewares.get('only_infinite_loop')[0].args[0].args[0])

        iterations_amount = (
            ITERATIONS_LIMIT // middlewares_amount +
            (1 if ITERATIONS_LIMIT % middlewares_amount else 0))
        self.session_storage.set_items([{
            'break_after': {
                'value': ITERATIONS_LIMIT,
                'flags': ItemFlag.PERSISTENT
            }
        }])

        await infinite_loop(session_storage=self.session_storage,
                            server_storage=self.server_storage,
                            global_storage=self.global_storage)

        self.assertEqual(
            self.session_storage, {
                'break_after': {
                    'value': ITERATIONS_LIMIT,
                    'flags': ItemFlag.PERSISTENT
                },
                'mock_value': {
                    'value': middlewares_amount * iterations_amount,
                    'flags': ItemFlag.PERSISTENT
                },
                'should_break': {
                    'value': True,
                    'flags': ItemFlag.PERSISTENT
                }
            })
예제 #3
0
class TestPipeBuilder(TestCase):
    def setUp(self) -> None:
        self.middlewares = ConfigBuilder.build_from(
            TEST_MIDDLEWARES_CONFIG_PATH).get('middlewares')

        self.session_storage = Storage()
        self.server_storage = Storage()
        self.global_storage = Storage()

    def test_pipe_building(self):
        pipe: partial = PipeBuilder.build_from(self.middlewares.get('only_fn'))
        self.assertEqual(pipe.func.__name__, 'pipe')

    @async_test
    async def test_pipe_processing(self):
        pipe: partial = PipeBuilder.build_from(self.middlewares.get('only_fn'))

        await pipe(session_storage=self.session_storage,
                   server_storage=self.server_storage,
                   global_storage=self.global_storage)

        self.assertEqual(
            self.session_storage,
            {'mock_value': {
                'value': 2,
                'flags': ItemFlag.PERSISTENT
            }})
        self.assertEqual(self.session_storage.get_value('mock_value'), 2)
예제 #4
0
    def _init_session_storage(self, *args, **kwargs) -> Storage:
        sender = args[0] if args else kwargs.pop('sender')

        return Storage(is_debug=self.is_debug,
                       debug_name=f'Session Storage | '
                       f'{self.server_name} | '
                       f'{sender}')
예제 #5
0
    async def test_function_processing(self):
        function: Callable = FunctionBuilder.build_from(TEST_MIDDLEWARE_PATH)
        session_storage = Storage()

        await function(session_storage=session_storage)

        self.assertEqual(
            session_storage,
            {
                'mock_value': {
                    'value': 1,
                    'flags': ItemFlag.PERSISTENT
                }
            }
        )
예제 #6
0
    def __init__(self, **kwargs):
        # connection
        self.host: str = kwargs.pop('host')
        self.port: int = kwargs.pop('port')
        self.connection_type: str = kwargs.pop('connection_type')
        # proxy
        self.proxy: Optional[BaseProxy] = kwargs.pop('proxy', None)
        # server options
        self.server_name: str = kwargs.pop('server_name')
        self.is_debug: bool = kwargs.pop('is_debug')
        # middlewares
        self.middlewares_entry: Callable = kwargs.pop('middlewares_entry')
        # storages
        self.global_storage: Storage = kwargs.pop('global_storage')
        self.server_storage: Storage = Storage(
            is_debug=self.is_debug,
            debug_name=f'Server Storage | {self.server_name}',
        )

        self._instance: Optional[Generator] = None
예제 #7
0
class TestRouterBuilder(TestCase):
    def setUp(self) -> None:
        self.middlewares = ConfigBuilder.build_from(
            TEST_MIDDLEWARES_CONFIG_PATH).get('middlewares')

        self.session_storage = Storage()
        self.server_storage = Storage()
        self.global_storage = Storage()

    def test_infinite_loop_building(self):
        router: partial = RouterBuilder.build_from(
            self.middlewares.get('only_router'))
        self.assertEqual(router.func.__name__, 'router')

    @async_test
    async def test_inline_route_processing(self):
        router: partial = RouterBuilder.build_from(
            self.middlewares.get('only_router'))

        self.session_storage.set_items([{
            'route': {
                'value': 'TEST_ROUTE_INLINE'
            }
        }])

        await router(session_storage=self.session_storage,
                     server_storage=self.server_storage,
                     global_storage=self.global_storage)

        self.assertEqual(
            self.session_storage,
            {'mock_value': {
                'value': 1,
                'flags': ItemFlag.PERSISTENT
            }})

    @async_test
    async def test_unexpected_route(self):
        router: partial = RouterBuilder.build_from(
            self.middlewares.get('only_router'))

        self.session_storage.set_items([{
            'route': {
                'value': 'NOT_EXISTED_ROUTE'
            }
        }])

        with self.assertRaises(ValueError) as context:
            await router(session_storage=self.session_storage,
                         server_storage=self.server_storage,
                         global_storage=self.global_storage)

        self.assertTrue(isinstance(context.exception, ValueError))
        self.assertTrue('Unexpected route' in context.exception.args[0])

    @async_test
    async def test_list_route_processing(self):
        router: partial = RouterBuilder.build_from(
            self.middlewares.get('only_router'))

        self.session_storage.set_items([{
            'route': {
                'value': 'TEST_ROUTE_LIST'
            }
        }])

        await router(session_storage=self.session_storage,
                     server_storage=self.server_storage,
                     global_storage=self.global_storage)

        self.assertEqual(
            self.session_storage,
            {'mock_value': {
                'value': 3,
                'flags': ItemFlag.PERSISTENT
            }})
예제 #8
0
 def setUp(self) -> None:
     self.storage = Storage()
예제 #9
0
class TestStorage(TestCase):
    def setUp(self) -> None:
        self.storage = Storage()

    def test_set_and_get_item(self):
        self.storage.set_items([{TEST_KEY: {'value': TEST_VALUE}}])

        self.assertEqual(self.storage.get_value(TEST_KEY), TEST_VALUE)

    def test_clean_temporary_fields(self):
        self.storage.set_items([{TEST_KEY: {'value': TEST_VALUE}}])
        self.storage.clean_temporary_fields()

        self.assertIsNone(self.storage.get_value(TEST_KEY))

    def test_not_clean_persistent_fields(self):
        self.storage.set_items([{
            TEST_KEY: {
                'value': TEST_VALUE,
                'flags': ItemFlag.PERSISTENT
            }
        }])
        self.storage.clean_temporary_fields()

        self.assertIsNotNone(self.storage.get_value(TEST_KEY))
        self.assertEqual(self.storage.get_value(TEST_KEY), TEST_VALUE)

    def test_cannot_change_frozen_field(self):
        self.storage.set_items([{
            TEST_KEY: {
                'value': TEST_VALUE,
                'flags': ItemFlag.FROZEN
            }
        }])

        with self.assertRaises(OverwriteFrozenFieldError):
            self.storage._set_item(TEST_KEY, TEST_ANOTHER_VALUE)

        self.assertEqual(self.storage.get_value(TEST_KEY), TEST_VALUE)

    def test_get_non_existent_value(self):
        self.assertIsNone(self.storage.get_value(TEST_NON_EXISTENT_KEY))