Esempio n. 1
0
    def read_with_wire(self, writes):
        wire_xport, thread_xport = LocalXport.create()

        def thd():
            for wr in writes:
                thread_xport.write(wr)
            thread_xport.close()
        self.thread = threading.Thread(target=thd)
        self.thread.setDaemon(1)
        self.thread.start()

        self.wire = Wire(wire_xport)
        return self.wire
Esempio n. 2
0
class TestWireReading(unittest.TestCase):
    """

    test reading packets from the xport layer

    """

    def read_with_wire(self, writes):
        wire_xport, thread_xport = LocalXport.create()

        def thd():
            for wr in writes:
                thread_xport.write(wr)
            thread_xport.close()
        self.thread = threading.Thread(target=thd)
        self.thread.setDaemon(1)
        self.thread.start()

        self.wire = Wire(wire_xport)
        return self.wire

    def stop(self):
        if self.thread:
            self.thread.join()
        self.thread = None
        if self.wire:
            self.wire.close()

    def setUp(self):
        self.wire = None
        self.thread = None

    def tearDown(self):
        self.stop()

    ## tests

    def test_short_box(self):
        data = [
            """\x00\x05hello\x00\x05world\x00\x00""",
        ]
        wire = self.read_with_wire(data)
        self.failUnlessEqual(wire.read_box(), {'hello': 'world'})
        self.failUnlessEqual(wire.read_box(), None)

    def test_box_in_pieces(self):
        # short timeouts here are to defeat nagle's algorithm, which would like
        # to reassemble the separate writes into a single read
        data = [
            """\x00\x05he"""
            """llo\x00"""
            """\x05world\x00\x00""",
        ]
        wire = self.read_with_wire(data)
        self.failUnlessEqual(wire.read_box(), {'hello': 'world'})
        self.failUnlessEqual(wire.read_box(), None)

    def test_multiple_keys(self):
        data = [
            """\x00\x06orange\x00\x05fruit"""
            + """\x00\x06carrot\x00\x09vegetable\x00\x00""",
        ]
        wire = self.read_with_wire(data)
        self.failUnlessEqual(wire.read_box(),
            {'orange': 'fruit', 'carrot': 'vegetable'})
        self.failUnlessEqual(wire.read_box(), None)

    def test_multiple_boxes(self):
        data = [
            """\x00\x06orange\x00\x05fruit\x00\x00"""
            + """\x00\x06carrot\x00\x09vegetable\x00\x00""",
        ]
        wire = self.read_with_wire(data)
        self.failUnlessEqual(wire.read_box(), {'orange': 'fruit'})
        self.failUnlessEqual(wire.read_box(), {'carrot': 'vegetable'})
        self.failUnlessEqual(wire.read_box(), None)

    def test_multiple_boxes_in_pieces(self):
        data = [
            """\x00\x06orange\x00""",
            """\x05fruit""",
            """\x00\x06carrot\x00\x09""",
            """veget""",
            """able\x00""",
            """\x00\x00\x06barley\x00\x05""",
            """grain\x00\x00""",
        ]
        wire = self.read_with_wire(data)
        self.failUnlessEqual(wire.read_box(),
            {'orange': 'fruit', 'carrot': 'vegetable'})
        self.failUnlessEqual(wire.read_box(),
            {'barley': 'grain'})
        self.failUnlessEqual(wire.read_box(),
            None)
Esempio n. 3
0
 def thd():
     wire = Wire(thread_xport)
     for box in boxes:
         wire.send_box(box)
     wire.close()