예제 #1
0
    def test_get_stream_new_when_sess_hard_closing(self):
        node_a, node_b = MockNode(), MockNode()

        session_mock = MockSession(MockNetwork())
        session_mock._id = "1"
        session_mock.closed = False
        session_mock.closing_mode = ZeroSession.HARD_CLOSING_MODE

        pipe = ZeroPipe(node_a, node_b)

        with pytest.raises(TethysSessionClosed):
            pipe.get_stream(session_mock)
예제 #2
0
    def test_get_stream_new_when_sess_closed(self):
        node_a, node_b = MockNode(), MockNode()

        session_mock = MockSession(MockNetwork())
        session_mock._id = "1"
        session_mock.closed = True
        session_mock.closing_mode = None

        pipe = ZeroPipe(node_a, node_b)

        with pytest.raises(TethysSessionClosed):
            pipe.get_stream(session_mock)
예제 #3
0
    def test_push_many_return_piece_of_data(self):
        node_a, node_b = MockNode(), MockNode()

        session_mock = MockSession(MockNetwork())
        session_mock._id = "1"

        stream_mock = mock.MagicMock()

        def get_stream(_):
            return stream_mock

        def lambda_dummy(x, *_, **__):
            return x

        pipe = ZeroPipe(node_a,
                        node_b,
                        filters=[FNFilter(lambda_dummy)],
                        filters_threshold=2)
        pipe.get_stream = mock.MagicMock(side_effect=get_stream)

        res = pipe.push(list(range(5)), session_mock, many=True, test_kw=1)

        assert res is True
        pipe.get_stream.assert_called_once_with(session_mock)
        stream_mock.write.assert_called_once_with(list(range(2, 5)),
                                                  many=True,
                                                  test_kw=1)
예제 #4
0
    def test_get_stream_new_without_transport(self):
        node_a, node_b = MockNode(), MockNode()

        session_mock = MockSession(MockNetwork())
        session_mock._id = "1"
        session_mock.closed = False
        session_mock.closing_mode = None

        transport_mock = ZeroTransport(MockConnector())

        def transport_factory(_):
            return transport_mock

        transport_factory_mock = mock.MagicMock(side_effect=transport_factory)

        ZeroPipe.set_transport_factory(transport_factory_mock)

        pipe = ZeroPipe(node_a, node_b)

        ZeroStream.load = load
        ZeroStream.save = mock.MagicMock()

        stream = pipe.get_stream(session_mock)

        ZeroStream.save.assert_called_once_with(save_dependency=False)
        ZeroPipe._transport_factory.assert_called_once_with(pipe)
        assert stream.transport == transport_mock
예제 #5
0
    def test_get_stream_exists(self):
        node_a, node_b = MockNode(), MockNode()
        session_mock = mock.MagicMock(spec=ZeroSession)
        session_mock.id = "1"
        session_mock.closed = False
        session_mock.closing_mode = None

        stream_mock = mock.MagicMock()
        stream_cls_mock = mock.MagicMock(
            side_effect=lambda *_, **__: stream_mock)
        stream_cls_mock.load = mock.MagicMock(
            side_effect=lambda *_, **__: stream_mock)

        pipe = ZeroPipe(node_a, node_b)

        @contextmanager
        def patch():
            old_load = ZeroStream.load
            old_new = ZeroStream.__new__

            try:
                ZeroStream.load = lambda *_, **__: stream_mock
                ZeroStream.__new__ = lambda *_, **__: stream_mock
                yield ZeroStream
            finally:
                ZeroStream.load = old_load
                ZeroStream.__new__ = old_new

        with patch():
            assert pipe.get_stream(session_mock) == stream_mock
예제 #6
0
    def test_push_many(self):
        node_a, node_b = MockNode(), MockNode()

        session_mock = MockSession(MockNetwork())
        session_mock._id = "1"

        stream_mock = mock.MagicMock()

        def get_stream(_):
            return stream_mock

        pipe = ZeroPipe(node_a, node_b)
        pipe.get_stream = mock.MagicMock(side_effect=get_stream)

        res = pipe.push([...], session_mock, many=True, test_kw=1)

        assert res is True
        pipe.get_stream.assert_called_once_with(session_mock)
        stream_mock.write.assert_called_once_with([...], many=True, test_kw=1)
예제 #7
0
    def test_get_stream_new_with_transport(self):
        node_a, node_b = MockNode(), MockNode()

        session_mock = MockSession(MockNetwork())
        session_mock._id = "1"
        session_mock.closed = False
        session_mock.closing_mode = None

        transport_mock = ZeroTransport(MockConnector())

        pipe = ZeroPipe(node_a, node_b, transport=transport_mock)

        ZeroStream.load = load
        ZeroStream.save = mock.MagicMock()

        stream = pipe.get_stream(session_mock)

        ZeroStream.save.assert_called_once_with(save_dependency=False)
        assert stream.transport == transport_mock
예제 #8
0
    def test_push_many_return_empty(self):
        node_a, node_b = MockNode(), MockNode()

        session_mock = MockSession(MockNetwork())
        session_mock._id = "1"

        stream_mock = mock.MagicMock()

        def get_stream(_):
            return stream_mock

        def lambda_null(*_, **__):
            return 0

        pipe = ZeroPipe(node_a, node_b, filters=[FNFilter(lambda_null)])
        pipe.get_stream = mock.MagicMock(side_effect=get_stream)

        res = pipe.push(list(range(5)), session_mock, many=True, test_kw=1)

        assert res is False
        pipe.get_stream.assert_not_called()
        stream_mock.write.assert_not_called()
예제 #9
0
    def test_pull(self):
        node_a, node_b = MockNode(), MockNode()

        session_mock = MockSession(MockNetwork())
        session_mock._id = "1"
        session_mock.closed = False
        session_mock.closing_mode = ZeroSession.HARD_CLOSING_MODE

        stream_mock = mock.MagicMock()
        stream_mock.read = mock.MagicMock(
            side_effect=lambda *_, **__: iter([("key", "value")]))

        def get_stream(_):
            return stream_mock

        pipe = ZeroPipe(node_a, node_b)
        pipe.get_stream = mock.MagicMock(side_effect=get_stream)

        assert next(pipe.pull(session_mock, test_kw=1)) == "value"

        pipe.get_stream.assert_called_once_with(session_mock)
        stream_mock.read.assert_called_once_with(test_kw=1)