Ejemplo n.º 1
0
def _test(timeout=1, disabled_loggers=None, level=None):
    # TODO: Use in separate file to test importing functionality.

    from testing import unittest, do_tests, process_events_with_timeout

    class Tests(object):
        class TestMainWindow(unittest.TestCase):
            def setUp(self):
                self.finished = False
            
            def tearDown(self):
                if self.finished:
                    process_events_with_timeout(timeout)

            def test_main(self):
                w = MainWindow()
                w.show()

                for i in xrange(2):
                    w.add_router()

                w.shake_routers()

                #w.send_image_router.send_data(range(100))

                self.finished = True

    do_tests(Tests, qt=True, disabled_loggers=disabled_loggers, level=level)
Ejemplo n.º 2
0
def _test(level=None, timeout=1):
    # TODO: Use in separate file to test importing functionality.

    from testing import unittest, do_tests, process_events_with_timeout
    
    from router_scene_item import RouterItem
    from image_transfer_router_scene_item import SendImageRouterItem, \
        ReceiveImageRouterItem

    class Tests(object):
        class TestLinkItem(unittest.TestCase):
            def setUp(self):
                self.view = QGraphicsView()
                self.scene = QGraphicsScene()
                self.scene.setSceneRect(-150, -105, 300, 210)
                self.scene.addRect(-150, -105, 300 - 1, 210 - 1, QPen(Qt.black))
                self.view.setScene(self.scene)

            def tearDown(self):
                self.view.show()

                process_events_with_timeout(timeout)

                self.li.terminate()
                self.ri1._stop_networking() # TODO
                self.ri2._stop_networking() # TODO

            def test_main(self):
                self.ri1 = RouterItem(1)
                self.ri2 = RouterItem(2)
                
                self.scene.addItem(self.ri1)
                self.scene.addItem(self.ri2)

                self.ri1.setPos(-100, -50)
                self.ri2.setPos(100, 50)

                self.li = LinkItem(self.ri1, self.ri2, enabled=True)
                self.scene.addItem(self.li)

                self.finished = True

            def test_image_transfer(self):
                self.ri1 = SendImageRouterItem(0, 1)
                self.ri2 = ReceiveImageRouterItem(1)

                self.scene.addItem(self.ri1)
                self.scene.addItem(self.ri2)

                self.ri1.setPos(-100, -50)
                self.ri2.setPos(100, 50)

                self.li = LinkItem(self.ri1, self.ri2, enabled=True)
                self.scene.addItem(self.li)

                self.ri1.send_data(range(100))

                self.finished = True

    do_tests(Tests, level=level, qt=True)
Ejemplo n.º 3
0
def _test():
    # TODO: Use in separate file to test importing functionality.

    from testing import unittest, do_tests
    
    class Tests(object):
        class TestConfig(unittest.TestCase):
            pass

    do_tests(Tests)
Ejemplo n.º 4
0
def _test():
    from testing import unittest, do_tests

    class Tests:
        class TestTotalOrdering(unittest.TestCase):
            def test_main(self):
                # TODO
                pass

    do_tests(Tests)
Ejemplo n.º 5
0
def _test():
    from testing import unittest, do_tests
    
    class Tests:
        class TestRecordtypeInheritance(unittest.TestCase):
            def setUp(self):
                class A(recordtype('A', 'a, b, c')):
                    def __init__(self, *args, **kwargs):
                        super(A, self).__init__(*args, **kwargs)

                self.A = A

            @unittest.expectedFailure
            def test_empty_args(self):
                a = self.A()

            def test_args(self):
                a = self.A(1, 2, 3)

            def test_kwargs(self):
                a = self.A(a=1, b=2, c=3)

        class TestRecordtypeInheritanceNested(unittest.TestCase):
            def setUp(self):
                class NestedClass(object):
                    class A(recordtype('A', 'a, b, c')):
                        def __init__(self, *args, **kwargs):
                            super(NestedClass.A, self).__init__(*args, **kwargs)

                self.A = NestedClass.A

            @unittest.expectedFailure
            def test_empty_args(self):
                a = self.A()

            def test_args(self):
                a = self.A(1, 2, 3)

            def test_kwargs(self):
                a = self.A(a=1, b=2, c=3)

        class TestRecordtypeDetuple(unittest.TestCase):
            def test_detuple(self):
                A = recordtype('A', 'a, b, c')
                a = A(1, 2, 3)

                x, y, z = a
                self.assertEqual(x, a.a)
                self.assertEqual(y, a.b)
                self.assertEqual(z, a.c)

    do_tests(Tests)
Ejemplo n.º 6
0
def _test(level=None):
    # TODO: Use in separate file to test importing functionality.

    from testing import unittest, do_tests

    class Tests(object):
        class TestRouter(unittest.TestCase):
            def test_constructor(self):
                name = 1
                rr = Router(name)

                self.assertEqual(rr.name, name)
                self.assertEqual(rr.link_manager.connected_routers(), [])

                rr.terminate()

    do_tests(Tests, level=level)
Ejemplo n.º 7
0
def _test():
    # TODO: Use in separate file to test importing functionality.

    from testing import unittest, do_tests, process_events_with_timeout

    class Tests(object):
        class TestPalette(unittest.TestCase):
            def test_main(self):
                p = Palette()
                p[10]

            def test_deterministic(self):
                p1 = Palette()
                p2 = Palette()
                p1[100]
                p2[200]
                self.assertEqual(p1[30], p2[30])

            def test_test(self):
                p1 = Palette()
                colors = [(p1[i].red(), p1[i].green(), p1[i].blue())
                    for i in xrange(10)]
                colors.sort()
                print "Must be random:", colors

        class TestFixedPalette(unittest.TestCase):
            def test_main(self):
                p = FixedPalette(4)
                p[10]

            def test_deterministic(self):
                p1 = FixedPalette(4)
                p2 = FixedPalette(4)
                p1[100]
                p2[200]
                self.assertEqual(p1[30], p2[30])

            def test_test(self):
                p1 = FixedPalette(4)
                colors = [(p1[i].red(), p1[i].green(), p1[i].blue())
                    for i in xrange(10)]
                colors.sort()
                print "Must be random:", colors

    do_tests(Tests, qt=True)
Ejemplo n.º 8
0
def _test(level=None):
    # TODO: Use in separate file to test importing functionality.

    from testing import unittest, do_tests

    class Tests(object):
        class TestRouterName(unittest.TestCase):
            def test_is_valid(self):
                self.assertTrue(is_valid(0))
                self.assertTrue(is_valid(1))
                self.assertTrue(is_valid(2**32 - 1))

                self.assertFalse(is_valid(-1))
                self.assertFalse(is_valid(-2**32 - 1))
                self.assertFalse(is_valid(2**32))
                self.assertFalse(is_valid(2**32 + 1))

    do_tests(Tests, level=level)
Ejemplo n.º 9
0
def _test(init_logging=True, level=None, disabled_loggers=None):
    # TODO: Use in separate file to test importing functionality.

    from testing import unittest, do_tests

    from duplex_link import FullDuplexLink, LossFunc
    from frame import SimpleFrameTransmitter
    from sliding_window import FrameTransmitter
    from link_manager import RouterLinkManager
    from datagram import DatagramRouter
    from service_manager import RouterServiceManager
    from routing_table import loopback_routing_table, LocalRoutingTable

    class Tests(object):
        class TestMain(unittest.TestCase):
            def test_main(self):
                pass


    do_tests(Tests, level=level, disabled_loggers=disabled_loggers)
Ejemplo n.º 10
0
def _test(timeout=1, disabled_loggers=None, level=None):
    # TODO: Use in separate file to test importing functionality.

    from testing import unittest, do_tests, process_events_with_timeout

    class Tests(object):
        class TestMainWindow(unittest.TestCase):
            def setUp(self):
                self.finished = False
            
            def tearDown(self):
                if self.finished:
                    process_events_with_timeout(timeout)

            def test_main(self):
                w = TransmissionWidget()
                w.show()

                self.finished = True

    do_tests(Tests, qt=True, disabled_loggers=disabled_loggers, level=level)
Ejemplo n.º 11
0
def _test(timeout=1):
    # TODO: Use in separate file to test importing functionality.

    from testing import unittest, do_tests, process_events_with_timeout

    import time
    
    from service_manager import Packet

    class Tests(object):
        class TestRIPPacketItemGUI(unittest.TestCase):
            def setUp(self):
                self.view = QGraphicsView()
                self.scene = QGraphicsScene()
                self.scene.setSceneRect(-150, -105, 300, 210)
                self.scene.addRect(-150, -105, 300 - 1, 210 - 1, QPen(Qt.black))
                self.view.setScene(self.scene)
                self.view.scale(10, 10)

                self.p = Packet(1, 2, "test", time.time())

                self.finished = False

            def tearDown(self):
                if self.finished:
                    self.view.show()

                    process_events_with_timeout(timeout)

            def test_main(self):
                rpi = RIPPacketItem(self.p)
                self.assertEqual(rpi._packet, self.p)

                self.scene.addItem(rpi)

                self.finished = True

    do_tests(Tests, qt=True)
Ejemplo n.º 12
0
def _test(timeout=1, level=None):
    # TODO: Use in separate file to test importing functionality.

    from testing import unittest, do_tests, process_events_with_timeout

    class Tests(object):
        class TestRouterItemGUI(unittest.TestCase):
            def setUp(self):
                self.view = QGraphicsView()
                self.scene = QGraphicsScene()
                self.scene.setSceneRect(-150, -105, 300, 210)
                self.scene.addRect(-150, -105, 300 - 1, 210 - 1, QPen(Qt.black))
                self.view.setScene(self.scene)

                self.finished = False

            def tearDown(self):
                if self.finished:
                    self.view.show()

                    process_events_with_timeout(timeout)

            def test_main(self):
                ri = RouterItem(1)
                self.assertEqual(ri.name, 1)
                self.scene.addItem(ri)

                self.finished = True

            def test_change_position(self):
                ri = RouterItem(1)
                self.scene.addItem(ri)

                ri.setPos(50, 50)

                self.finished = True

            def _test_add_link(self):
                ri = RouterItem(1)
                link = "dummy"
                ri.add_link(link)
                self.assertItemsEqual(ri.links, [link])

                self.finished = True

            def _test_add_link_with_adjustment(self):
                ri = RouterItem(1)

                class Link(object):
                    def __init__(self):
                        self.adjusted = False

                    def adjust(self):
                        self.adjusted = True

                link = Link()

                self.assertFalse(link.adjusted)
                ri.add_link(link)
                self.assertFalse(link.adjusted)
                self.assertItemsEqual(ri.links, [link])

                # TODO
                # ri.setPos(10, 10)
                # self.assertTrue(link.adjusted)

                self.finished = True

        class TestRouterItem(unittest.TestCase):
            def tearDown(self):
                process_events_with_timeout(timeout)

            def test_start_stop_networking(self):
                ri = RouterItem(1)

                # self.assertEqual(ri._rip_service, None)
                # ri.start_networking()
                self.assertNotEqual(ri._rip_service, None)
                # ri.stop_networking()
                # self.assertEqual(ri._rip_service, None)

        class TestRouterItemGUIMoving(unittest.TestCase):
            def setUp(self):
                self.view = QGraphicsView()
                self.scene = QGraphicsScene()
                self.scene.setSceneRect(-150, -105, 300, 210)
                self.scene.addRect(self.scene.sceneRect(), QPen(Qt.black))
                self.view.setScene(self.scene)

                self.finished = False

            def tearDown(self):
                if self.finished:
                    self.view.show()

                    self.lastUpdate = time.time()

                    def update():
                        t = time.time()
                        self.ri.advance(t - self.lastUpdate)
                        self.lastUpdate = t

                    process_events_with_timeout(timeout, callback=update)

            def test_main(self):
                self.ri = RouterItem(1)
                self.scene.addItem(self.ri)

                self.finished = True

    do_tests(Tests, qt=True, level=level)
Ejemplo n.º 13
0
def _test(level=None):
    # TODO: Use in separate file to test importing functionality.

    from testing import unittest, do_tests
    
    from duplex_link import FullDuplexLink, LossFunc

    class Tests(object):
        class TestFrame(unittest.TestCase):
            def test_frame(self):
                id = 13804
                data = "Some test data for Frame class (12334567890)."
                p = Frame(type=FrameType.data, id=id, is_last=True, data=data)
                s = p.serialize()
                np = Frame.deserialize(s)
                self.assertEqual(p.type, np.type)
                self.assertEqual(p.id, np.id)
                self.assertEqual(p.data, np.data)

                p = Frame(type=FrameType.data, id=id, is_last=True, data="")
                s = p.serialize()
                np = Frame.deserialize(s)
                self.assertEqual(p.type, np.type)
                self.assertEqual(p.id, np.id)
                self.assertEqual("", np.data)

        class TestFrameTransmitterConstructor(unittest.TestCase):
            def setUp(self):
                self.a, self.b = FullDuplexLink()

                self.at = SimpleFrameTransmitter(node=self.a)
                self.bt = SimpleFrameTransmitter(node=self.b)

            def test_constructor(self):
                aft = FrameTransmitter(simple_frame_transmitter=self.at,
                    debug_src=1, debug_dest=2)
                bft = FrameTransmitter(simple_frame_transmitter=self.bt,
                    debug_src=2, debug_dest=1)

                aft.terminate()
                bft.terminate()

            @unittest.expectedFailure
            def test_terminate(self):
                aft = FrameTransmitter(simple_frame_transmitter=self.at)
                aft.terminate()
                aft.terminate()

        class TestFrameTransmitter(unittest.TestCase):
            def setUp(self):
                self.a, self.b = FullDuplexLink()

                self.at = SimpleFrameTransmitter(node=self.a)
                self.bt = SimpleFrameTransmitter(node=self.b)

                self.aft = FrameTransmitter(simple_frame_transmitter=self.at,
                    debug_src=1, debug_dest=2)
                self.bft = FrameTransmitter(simple_frame_transmitter=self.bt,
                    debug_src=2, debug_dest=1)

            def tearDown(self):
                self.aft.terminate()
                self.bft.terminate()

            def test_transmit(self):
                text = "Test!"
                self.aft.send(text)
                self.assertEqual(self.bft.receive(), text)

                self.assertEqual(self.bft.receive(block=False), None)

                text2 = "".join(map(chr, xrange(256)))
                self.bft.send(text2)
                self.assertEqual(self.aft.receive(), text2)

                self.assertEqual(self.aft.receive(block=False), None)

                text3 = "test"
                self.bft.send(text3)

                text_a = text2
                text_b = "".join(reversed(text2))
                self.aft.send(text_a)
                self.aft.send(text_b)
                self.assertEqual(self.aft.receive(), text3)
                self.assertEqual(self.bft.receive(), text_a)
                self.assertEqual(self.bft.receive(), text_b)

                text4 = text2 * 10
                self.aft.send(text4)
                self.assertEqual(self.bft.receive(), text4)

                self.assertEqual(self.aft.receive(block=False), None)
                self.assertEqual(self.bft.receive(block=False), None)

            def test_enabled(self):
                self.assertTrue(self.aft.enabled)

                text = "Test!"
                self.aft.send(text)
                self.assertEqual(self.bft.receive(), text)

                self.aft.enabled = False
                self.assertFalse(self.aft.enabled)

                self.aft.send(text)
                self.assertEqual(self.bft.receive(block=False), None)

                self.aft.enabled = True

                self.aft.send(text)
                self.assertEqual(self.bft.receive(block=False), None)

                self.aft.send(text)
                self.aft.enabled = False
                self.assertFalse(self.aft.enabled)

                self.aft.enabled = True
                self.assertEqual(self.bft.receive(block=False), None)
                
        class TestFrameTransmitterWithLosses(unittest.TestCase):
            def setUp(self):
                self.a, self.b = FullDuplexLink(
                    loss_func=LossFunc(0.001, 0.001, 0.001))

                self.at = SimpleFrameTransmitter(node=self.a)
                self.bt = SimpleFrameTransmitter(node=self.b)

                self.aft = FrameTransmitter(simple_frame_transmitter=self.at,
                    debug_src=1, debug_dest=2)
                self.bft = FrameTransmitter(simple_frame_transmitter=self.bt,
                    debug_src=2, debug_dest=1)

            def tearDown(self):
                self.aft.terminate()
                self.bft.terminate()

            def test_transmit_with_losses(self):
                text = "Test!"
                self.aft.send(text)
                self.assertEqual(self.bft.receive(), text)

                self.assertEqual(self.bft.receive(block=False), None)

                text2 = "".join(map(chr, xrange(256)))
                self.bft.send(text2)
                self.assertEqual(self.aft.receive(), text2)

                self.assertEqual(self.aft.receive(block=False), None)

                text3 = "test"
                self.bft.send(text3)

                text_a = text2
                text_b = "".join(reversed(text2))
                self.aft.send(text_a)
                self.aft.send(text_b)
                self.assertEqual(self.aft.receive(), text3)
                self.assertEqual(self.bft.receive(), text_a)
                self.assertEqual(self.bft.receive(), text_b)

                #text4 = text2 * 10
                #self.aft.send(text4)
                #self.assertEqual(self.bft.receive(), text4)

                self.assertEqual(self.aft.receive(block=False), None)
                self.assertEqual(self.bft.receive(block=False), None)

        class TestExperiment(unittest.TestCase):
            def test_main(self):
                time_, sent = experiment(100, 100, ["data"], loss_prob=None)
                # TODO: Assume that computer is not very slow.
                self.assertLess(time_, 5.0)
                self.assertEqual(sent, 2)

                time_, sent = experiment(100, 100, ["data", "another"],
                    loss_prob=None)

                # TODO: Assume that computer is not very slow.
                self.assertLess(time_, 5.0)
                self.assertEqual(sent, 4)

    do_tests(Tests, level=level)
Ejemplo n.º 14
0
def _test(level=None):
    # TODO: Use in separate file to test importing functionality.

    from testing import unittest, do_tests
    
    from duplex_link import FullDuplexLink, LossFunc
    from frame import SimpleFrameTransmitter
    from sliding_window import FrameTransmitter
    from link_manager import RouterLinkManager
    from routing_table import loopback_routing_table, LocalRoutingTable
    from datagram import DatagramRouter

    class Tests(object):
        class TestPacket(unittest.TestCase):
            def test_main(self):
                t = time.time()
                p1 = Packet(    1,      2,      "3", 4, t)
                p2 = Packet(src=1, dest=2, data="3", delivered_from=4, time=t)
                self.assertEqual(p1, p2)
                self.assertEqual(p1.src,  1)
                self.assertEqual(p1.dest, 2)
                self.assertEqual(p1.data, "3")
                self.assertEqual(p1.time, t)

                d1 = packet_to_datagram(p1, 30)
                self.assertEqual(d1,
                    datagram(30, p1.src, p1.dest, p1.data +
                        struct.pack("d", t)))

                d1_type, p1_ = datagram_to_packet(d1, 4)
                self.assertEqual(d1_type, d1.type)
                self.assertEqual(p1_, p1)
                self.assertEqual(p1_.time, p1.time)

        class Test_ServiceInfo(unittest.TestCase):
            def test_main(self):
                sm = RouterServiceManager.ServiceInfo(0, 1, 2)
                self.assertEqual(sm.name, 0)
                self.assertEqual(sm.receive_queue, 1)
                self.assertEqual(sm.send_queue, 2)

        class TestRouterServiceManagerBasic(unittest.TestCase):
            def setUp(self):
                self.lm1 = RouterLinkManager()

                self.dt1 = DatagramRouter(
                    router_name=1,
                    link_manager=self.lm1)

            def test_constructor(self):
                sm = RouterServiceManager(self.dt1)

                sm.terminate()

            def test_main(self):
                sm = RouterServiceManager(self.dt1)

                s10 = sm.register_service(10)

                sm.terminate()
                
            def tearDown(self):
                self.dt1.terminate()

        class TestRouterServiceManager1(unittest.TestCase):
            def setUp(self):
                self.lm1 = RouterLinkManager()

                self.dt1 = DatagramRouter(
                    router_name=1,
                    link_manager=self.lm1)

                self.sm1 = RouterServiceManager(self.dt1)

            def test_send_receive_data(self):
                self.s30 = self.sm1.register_service(30)

                text = "Some text text."
                self.s30.send_data(1, text)
                self.assertEqual(self.s30.receive_data(), (1, text))
                self.assertEqual(self.s30.receive_data(False), None)

            def test_main(self):
                s10 = self.sm1.register_service(10)

                s15 = self.sm1.register_service(15)

                unreach_p10 = Packet(1, 2, "unreachable test (10)", 1)
                s10.send(unreach_p10)

                p10_1 = Packet(1, 1, "test (10)", 1)
                s10.send(p10_1)

                self.assertEqual(s10.receive(), p10_1)

                self.assertEqual(s10.receive(block=False), None)

                p15_1 = Packet(1, 1, "test (15)", 1)
                p10_2 = Packet(1, 1, "test 2 (10)", 1)

                s10.send(p10_1)
                s15.send(p15_1)
                s10.send(p10_2)

                self.assertEqual(s15.receive(), p15_1)
                self.assertEqual(s15.receive(block=False), None)
                self.assertEqual(s10.receive(), p10_1)
                self.assertEqual(s10.receive(), p10_2)
                self.assertEqual(s10.receive(block=False), None)

                text = "".join(map(chr, xrange(256)))
                p15_2 = Packet(1, 1, text * 10, 1)
                s15.send(p15_2)
                s10.send(p10_1)
                self.assertEqual(s10.receive(), p10_1)
                self.assertEqual(s15.receive(), p15_2)

            def tearDown(self):
                self.sm1.terminate()
                self.dt1.terminate()

        class TestRouterServiceManager2(unittest.TestCase):
            def setUp(self):
                l1, l2 = FullDuplexLink()

                sft1 = SimpleFrameTransmitter(node=l1)
                sft2 = SimpleFrameTransmitter(node=l2)

                self.ft1 = FrameTransmitter(simple_frame_transmitter=sft1,
                    debug_src=1, debug_dest=2)
                self.ft2 = FrameTransmitter(simple_frame_transmitter=sft2,
                    debug_src=2, debug_dest=1)

                rlm1 = RouterLinkManager()
                rlm2 = RouterLinkManager()

                self.dr1 = DatagramRouter(
                    router_name=1,
                    link_manager=rlm1,
                    routing_table=LocalRoutingTable(1, rlm1))
                self.dr2 = DatagramRouter(
                    router_name=2,
                    link_manager=rlm2,
                    routing_table=LocalRoutingTable(2, rlm2))

                rlm1.add_link(2, self.ft1)
                rlm2.add_link(1, self.ft2)

                self.sm1 = RouterServiceManager(self.dr1)
                self.sm2 = RouterServiceManager(self.dr2)

                self.s1_100 = self.sm1.register_service(100)
                self.s2_100 = self.sm2.register_service(100)

            def _test_transmit(self):
                s1_77 = self.sm1.register_service(77)
                s2_77 = self.sm2.register_service(77)

                d12 = Packet(1, 2, "test")
                s1_77.send(d12)
                self.assertEqual(s2_77.receive(), d12)
                s2_77.send(d12)
                self.assertEqual(s2_77.receive(), d12)

                s1_33 = self.sm1.register_service(33)
                s2_33 = self.sm2.register_service(33)

                d21 = Packet(2, 1, "test 2")
                s2_33.send(d21)
                self.assertEqual(s1_33.receive(), d21)
                s1_33.send(d21)
                self.assertEqual(s1_33.receive(), d21)

                text = "".join(map(chr, xrange(256)))
                d_big = Packet(1, 2, text * 5)
                s1_33.send(d_big)
                self.assertEqual(s2_33.receive(), d_big)

                d12_2 = Packet(1, 2, "test 2")
                d12_3 = Packet(1, 2, "test 3")

                s1_33.send(d12)
                s1_33.send(d12_2)
                self.assertEqual(s2_33.receive(), d12)
                s1_77.send(d12_3)
                self.assertEqual(s2_77.receive(), d12_3)
                self.assertEqual(s2_33.receive(), d12_2)

            def test_time(self):
                data = "test"
                self.s1_100.send_data(2, data)
                p = self.s2_100.receive()
                self.assertEqual(p.data, data)
                # TODO: Assume computer is not slow.
                self.assertLess(p.time, 5.0)
                self.assertGreaterEqual(p.time, 0)

            def tearDown(self):
                self.sm1.terminate()
                self.sm2.terminate()

                self.dr1.terminate()
                self.dr2.terminate()

                self.ft1.terminate()
                self.ft2.terminate()

        class _TestRouterServiceManager2WithLosses(unittest.TestCase):
            def setUp(self):
                l1, l2 = FullDuplexLink(loss_func=LossFunc(0.001, 0.001, 0.001))

                sft1 = SimpleFrameTransmitter(node=l1)
                sft2 = SimpleFrameTransmitter(node=l2)

                self.ft1 = FrameTransmitter(simple_frame_transmitter=sft1,
                    debug_src=1, debug_dest=2)
                self.ft2 = FrameTransmitter(simple_frame_transmitter=sft2,
                    debug_src=2, debug_dest=1)

                rlm1 = RouterLinkManager()
                rlm2 = RouterLinkManager()

                self.dr1 = DatagramRouter(
                    router_name=1,
                    link_manager=rlm1,
                    routing_table=LocalRoutingTable(1, rlm1))
                self.dr2 = DatagramRouter(
                    router_name=2,
                    link_manager=rlm2,
                    routing_table=LocalRoutingTable(2, rlm2))

                rlm1.add_link(2, self.ft1)
                rlm2.add_link(1, self.ft2)

                self.sm1 = RouterServiceManager(self.dr1)
                self.sm2 = RouterServiceManager(self.dr2)

            def test_transmit(self):
                s1_77 = self.sm1.register_service(77)
                s2_77 = self.sm2.register_service(77)

                d12 = Packet(1, 2, "test")
                s1_77.send(d12)
                self.assertEqual(s2_77.receive(), d12)
                s2_77.send(d12)
                self.assertEqual(s2_77.receive(), d12)

                s1_33 = self.sm1.register_service(33)
                s2_33 = self.sm2.register_service(33)

                d21 = Packet(2, 1, "test 2")
                s2_33.send(d21)
                self.assertEqual(s1_33.receive(), d21)
                s1_33.send(d21)
                self.assertEqual(s1_33.receive(), d21)

                text = "".join(map(chr, xrange(256)))
                d_big = Packet(1, 2, text * 5)
                s1_33.send(d_big)
                self.assertEqual(s2_33.receive(), d_big)

                d12_2 = Packet(1, 2, "test 2")
                d12_3 = Packet(1, 2, "test 3")

                s1_33.send(d12)
                s1_33.send(d12_2)
                self.assertEqual(s2_33.receive(), d12)
                s1_77.send(d12_3)
                self.assertEqual(s2_77.receive(), d12_3)
                self.assertEqual(s2_33.receive(), d12_2)

            def tearDown(self):
                self.sm1.terminate()
                self.sm2.terminate()

                self.dr1.terminate()
                self.dr2.terminate()

                self.ft1.terminate()
                self.ft2.terminate()

    do_tests(Tests, level=level)
Ejemplo n.º 15
0
def _test(init_logging=True, level=None, disabled_loggers=None):
    # TODO: Use in separate file to test importing functionality.

    from testing import unittest, do_tests

    from duplex_link import FullDuplexLink, LossFunc
    from frame import SimpleFrameTransmitter
    from sliding_window import FrameTransmitter
    from link_manager import RouterLinkManager
    from datagram import DatagramRouter
    from service_manager import RouterServiceManager
    from routing_table import loopback_routing_table, LocalRoutingTable

    class Tests(object):
        class TestRIPData(unittest.TestCase):
            def test_main(self):
                distances = [(1, 1), (2, 2)]
                rd = RIPData(distances)
                self.assertEqual(rd.distances, distances)

                raw_rd = rd.serialize()
                new_rd = RIPData.deserialize(raw_rd)

                self.assertEqual(rd, new_rd)
                self.assertEqual(new_rd.distances, distances)

        class TestRIPServiceBasic(unittest.TestCase):
            def setUp(self):
                self.lm1 = RouterLinkManager()

                self.dt1 = DatagramRouter(
                    router_name=1,
                    link_manager=self.lm1)

                self.sm1 = RouterServiceManager(self.dt1)
                self.rip_st1 = self.sm1.register_service(RIPService.protocol)

            def test_constructor(self):
                rs1 = RIPService(1, self.lm1, self.rip_st1)

                rs1.terminate()

            def test_main(self):
                rs1 = RIPService(1, self.lm1, self.rip_st1)

                self.assertEqual(rs1.dynamic_routing_table().next_router(1), 1)
                self.assertEqual(rs1.dynamic_routing_table().next_router(2),
                    None)

                rs1.terminate()

            def tearDown(self):
                self.sm1.terminate()
                self.dt1.terminate()

        class TestRIPService1(unittest.TestCase):
            def setUp(self):
                self.lm1 = RouterLinkManager()

                self.dt1 = DatagramRouter(
                    router_name=1,
                    link_manager=self.lm1)

                self.sm1 = RouterServiceManager(self.dt1)
                self.rip_st1 = self.sm1.register_service(RIPService.protocol)

                self.rs1 = RIPService(1, self.lm1, self.rip_st1,
                    update_period=0.3, inf_timeout=0.6, remove_timeout=1)

            def test_dynamic_routing(self):
                self.dt1.set_routing_table(self.rs1.dynamic_routing_table())

                time.sleep(5)

            def test_dynamic_routing_transfer(self):
                self.dt1.set_routing_table(self.rs1.dynamic_routing_table())
                #time.sleep(0.5)

                s10 = self.sm1.register_service(10)
                s15 = self.sm1.register_service(15)

                unreach_p10 = Packet(1, 2, "unreachable test (10)")
                s10.send(unreach_p10)

                p10_1 = Packet(1, 1, "test (10)")
                s10.send(p10_1)

                self.assertEqual(s10.receive(), p10_1)

                self.assertEqual(s10.receive(block=False), None)

                p15_1 = Packet(1, 1, "test (15)")
                p10_2 = Packet(1, 1, "test 2 (10)")

                s10.send(p10_1)
                s15.send(p15_1)
                s10.send(p10_2)

                self.assertEqual(s15.receive(), p15_1)
                self.assertEqual(s15.receive(block=False), None)
                self.assertEqual(s10.receive(), p10_1)
                self.assertEqual(s10.receive(), p10_2)
                self.assertEqual(s10.receive(block=False), None)

                text = "".join(map(chr, xrange(256)))
                p15_2 = Packet(1, 1, text * 10)
                s15.send(p15_2)
                s10.send(p10_1)
                self.assertEqual(s10.receive(), p10_1)
                self.assertEqual(s15.receive(), p15_2)

            def tearDown(self):
                self.rs1.terminate()
                self.sm1.terminate()
                self.dt1.terminate()

        class TestRIPService2(unittest.TestCase):
            def setUp(self):
                l1, l2 = FullDuplexLink()

                sft1 = SimpleFrameTransmitter(node=l1)
                sft2 = SimpleFrameTransmitter(node=l2)

                self.ft1 = FrameTransmitter(simple_frame_transmitter=sft1,
                    debug_src=1, debug_dest=2)
                self.ft2 = FrameTransmitter(simple_frame_transmitter=sft2,
                    debug_src=2, debug_dest=1)

                rlm1 = RouterLinkManager()
                rlm2 = RouterLinkManager()

                self.dr1 = DatagramRouter(
                    router_name=1,
                    link_manager=rlm1,
                    routing_table=LocalRoutingTable(1, rlm1))
                self.dr2 = DatagramRouter(
                    router_name=2,
                    link_manager=rlm2,
                    routing_table=LocalRoutingTable(2, rlm2))

                rlm1.add_link(2, self.ft1)
                rlm2.add_link(1, self.ft2)

                self.sm1 = RouterServiceManager(self.dr1)
                self.sm2 = RouterServiceManager(self.dr2)

                self.rip_st1 = self.sm1.register_service(RIPService.protocol)
                self.rip_st2 = self.sm2.register_service(RIPService.protocol)

                self.rs1 = RIPService(1, rlm1, self.rip_st1,
                    update_period=0.5, inf_timeout=0.9, remove_timeout=1.6)
                self.rs2 = RIPService(2, rlm2, self.rip_st2,
                    update_period=0.5, inf_timeout=0.9, remove_timeout=1.6)

                self.dr1.set_routing_table(self.rs1.dynamic_routing_table())
                self.dr2.set_routing_table(self.rs2.dynamic_routing_table())

            def test_transmit(self):
                s1_77 = self.sm1.register_service(77)
                s2_77 = self.sm2.register_service(77)

                d12 = Packet(1, 2, "test")
                s1_77.send(d12)
                self.assertEqual(s2_77.receive(), d12)
                s2_77.send(d12)
                self.assertEqual(s2_77.receive(), d12)

                s1_33 = self.sm1.register_service(33)
                s2_33 = self.sm2.register_service(33)

                d21 = Packet(2, 1, "test 2")
                s2_33.send(d21)
                self.assertEqual(s1_33.receive(), d21)
                s1_33.send(d21)
                self.assertEqual(s1_33.receive(), d21)

                text = "".join(map(chr, xrange(256)))
                d_big = Packet(1, 2, text * 5)
                s1_33.send(d_big)
                self.assertEqual(s2_33.receive(), d_big)

                d12_2 = Packet(1, 2, "test 2")
                d12_3 = Packet(1, 2, "test 3")

                s1_33.send(d12)
                s1_33.send(d12_2)
                self.assertEqual(s2_33.receive(), d12)
                s1_77.send(d12_3)
                self.assertEqual(s2_77.receive(), d12_3)
                self.assertEqual(s2_33.receive(), d12_2)

            def tearDown(self):
                self.rs1.terminate()
                self.rs2.terminate()

                self.sm1.terminate()
                self.sm2.terminate()

                self.dr1.terminate()
                self.dr2.terminate()

                self.ft1.terminate()
                self.ft2.terminate()

        class TestRIPService2WithLosses(TestRIPService2):
            def setUp(self):
                l1, l2 = FullDuplexLink(
                    loss_func=LossFunc(0.0008, 0.0008, 0.0008))

                sft1 = SimpleFrameTransmitter(node=l1)
                sft2 = SimpleFrameTransmitter(node=l2)

                self.ft1 = FrameTransmitter(simple_frame_transmitter=sft1,
                    debug_src=1, debug_dest=2)
                self.ft2 = FrameTransmitter(simple_frame_transmitter=sft2,
                    debug_src=2, debug_dest=1)

                rlm1 = RouterLinkManager()
                rlm2 = RouterLinkManager()

                self.dr1 = DatagramRouter(
                    router_name=1,
                    link_manager=rlm1,
                    routing_table=LocalRoutingTable(1, rlm1))
                self.dr2 = DatagramRouter(
                    router_name=2,
                    link_manager=rlm2,
                    routing_table=LocalRoutingTable(2, rlm2))

                rlm1.add_link(2, self.ft1)
                rlm2.add_link(1, self.ft2)

                self.sm1 = RouterServiceManager(self.dr1)
                self.sm2 = RouterServiceManager(self.dr2)

                self.rip_st1 = self.sm1.register_service(RIPService.protocol)
                self.rip_st2 = self.sm2.register_service(RIPService.protocol)

                self.rs1 = RIPService(1, rlm1, self.rip_st1,
                    update_period=0.5, inf_timeout=0.9, remove_timeout=1.6)
                self.rs2 = RIPService(2, rlm2, self.rip_st2,
                    update_period=0.5, inf_timeout=0.9, remove_timeout=1.6)

                self.dr1.set_routing_table(self.rs1.dynamic_routing_table())
                self.dr2.set_routing_table(self.rs2.dynamic_routing_table())

    do_tests(Tests, level=level, disabled_loggers=disabled_loggers)
Ejemplo n.º 16
0
def _test(level=None):
    # TODO: Use in separate file to test importing functionality.

    from testing import unittest, do_tests
    
    from duplex_link import FullDuplexLink, LossFunc
    from frame import SimpleFrameTransmitter
    from link_manager import RouterLinkManager
    from routing_table import loopback_routing_table, LocalRoutingTable

    class Tests(object):
        class TestDatagram(unittest.TestCase):
            def test_datagram(self):
                id = 13804
                data = "Some test data for Datagram class (12334567890)."
                p = Datagram(type=12, src=100, dest=200, data=data)
                s = p.serialize()
                np = Datagram.deserialize(s)
                self.assertEqual(p.type, np.type)
                self.assertEqual(p.src, np.src)
                self.assertEqual(p.dest, np.dest)
                self.assertEqual(p.data, np.data)

                p = Datagram(type=12, src=100, dest=200, data="")
                s = p.serialize()
                np = Datagram.deserialize(s)
                self.assertEqual(p.type, np.type)
                self.assertEqual(p.src, np.src)
                self.assertEqual(p.dest, np.dest)
                self.assertEqual("", np.data)

            def test_datagram_func(self):
                d = datagram(1, 2, 3, "test")
                self.assertEqual(d.type, 1)
                self.assertEqual(d.src, 2)
                self.assertEqual(d.dest, 3)
                self.assertEqual(d.data, "test")

        class TestDatagramRouterBasic(unittest.TestCase):
            def test_basic(self):
                lm = RouterLinkManager()

                dt10 = DatagramRouter(
                    router_name=10,
                    link_manager=lm)

                dt10.terminate()

        class TestDatagramRouter1(unittest.TestCase):
            def setUp(self):
                self.lm1 = RouterLinkManager()

                self.dt1 = DatagramRouter(
                    router_name=1,
                    link_manager=self.lm1)

            def test_set_routing_table(self):
                self.dt1.set_routing_table(loopback_routing_table(1))
                self.dt1.set_routing_table(LocalRoutingTable(1, self.lm1))

            def test_name(self):
                self.assertEqual(self.dt1.name, 1)

            def test_transmit(self):
                self.dt1.send(datagram(1, 1, 2, "unreachable test"))

                self.assertEqual(self.dt1.receive(block=False)[1], None)

                self.dt1.send(datagram(13, 1, 1, "test"))
                d = self.dt1.receive()[1]
                self.assertEqual(d.type, 13)
                self.assertEqual(d.src, 1)
                self.assertEqual(d.dest, 1)
                self.assertEqual(d.data, "test")

                self.dt1.send(datagram(14, 1, 1, "test 1"))
                self.dt1.send(datagram(15, 1, 1, "test 2"))

                d = self.dt1.receive()[1]
                self.assertEqual(d.type, 14)
                self.assertEqual(d.src, 1)
                self.assertEqual(d.dest, 1)
                self.assertEqual(d.data, "test 1")

                d = self.dt1.receive()[1]
                self.assertEqual(d.type, 15)
                self.assertEqual(d.src, 1)
                self.assertEqual(d.dest, 1)
                self.assertEqual(d.data, "test 2")

            def tearDown(self):
                self.dt1.terminate()

        class TestDatagramRouter2(unittest.TestCase):
            def setUp(self):
                l1, l2 = FullDuplexLink()

                sft1 = SimpleFrameTransmitter(node=l1)
                sft2 = SimpleFrameTransmitter(node=l2)

                self.ft1 = FrameTransmitter(simple_frame_transmitter=sft1,
                    debug_src=1, debug_dest=2)
                self.ft2 = FrameTransmitter(simple_frame_transmitter=sft2,
                    debug_src=2, debug_dest=1)

                rlm1 = RouterLinkManager()
                rlm2 = RouterLinkManager()
                
                self.dr1 = DatagramRouter(
                    router_name=1,
                    link_manager=rlm1,
                    routing_table=LocalRoutingTable(1, rlm1))
                self.dr2 = DatagramRouter(
                    router_name=2,
                    link_manager=rlm2,
                    routing_table=LocalRoutingTable(2, rlm2))

                rlm1.add_link(2, self.ft1)
                rlm2.add_link(1, self.ft2)

            def test_transmit(self):
                d12 = datagram(12, 1, 2, "test")
                self.dr1.send(d12)
                self.assertEqual(self.dr2.receive()[1], d12)

                self.dr2.send(d12)
                self.assertEqual(self.dr2.receive()[1], d12)

                d21 = datagram(13, 2, 1, "test 2")
                self.dr2.send(d21)
                self.assertEqual(self.dr1.receive()[1], d21)

                self.dr1.send(d21)
                self.assertEqual(self.dr1.receive()[1], d21)

                text = "".join(map(chr, xrange(256)))
                d_big = datagram(130, 1, 2, text * 5)
                self.dr1.send(d_big)
                self.assertEqual(self.dr2.receive()[1], d_big)

                d12_2 = datagram(14, 1, 2, "test 2")
                d12_3 = datagram(14, 1, 2, "test 3")

                self.dr1.send(d12)
                self.dr1.send(d12_2)
                self.assertEqual(self.dr2.receive()[1], d12)
                self.dr1.send(d12_3)
                self.assertEqual(self.dr2.receive()[1], d12_2)
                self.assertEqual(self.dr2.receive()[1], d12_3)

            def test_invalid_datagram(self):
                self.ft1.send("raw test!")
                self.assertEqual(self.dr2.receive(block=False)[1], None)

                d12 = datagram(12, 1, 2, "test")
                self.dr1.send(d12)
                self.assertEqual(self.dr2.receive()[1], d12)

            def tearDown(self):
                self.dr1.terminate()
                self.dr2.terminate()

                self.ft1.terminate()
                self.ft2.terminate()

        class TestDatagramRouter2WithLosses(unittest.TestCase):
            def setUp(self):
                l1, l2 = FullDuplexLink(loss_func=LossFunc(0.001, 0.001, 0.001))

                sft1 = SimpleFrameTransmitter(node=l1)
                sft2 = SimpleFrameTransmitter(node=l2)

                self.ft1 = FrameTransmitter(simple_frame_transmitter=sft1,
                    debug_src=1, debug_dest=2)
                self.ft2 = FrameTransmitter(simple_frame_transmitter=sft2,
                    debug_src=2, debug_dest=1)

                rlm1 = RouterLinkManager()
                rlm2 = RouterLinkManager()

                self.dr1 = DatagramRouter(
                    router_name=1,
                    link_manager=rlm1,
                    routing_table=LocalRoutingTable(1, rlm1))
                self.dr2 = DatagramRouter(
                    router_name=2,
                    link_manager=rlm2,
                    routing_table=LocalRoutingTable(2, rlm2))

                rlm1.add_link(2, self.ft1)
                rlm2.add_link(1, self.ft2)

            def test_transmit(self):
                d12 = datagram(12, 1, 2, "test")
                self.dr1.send(d12)
                self.assertEqual(self.dr2.receive()[1], d12)

                self.dr2.send(d12)
                self.assertEqual(self.dr2.receive()[1], d12)

                d21 = datagram(13, 2, 1, "test 2")
                self.dr2.send(d21)
                self.assertEqual(self.dr1.receive()[1], d21)

                self.dr1.send(d21)
                self.assertEqual(self.dr1.receive()[1], d21)

                text = "".join(map(chr, xrange(256)))
                d_big = datagram(130, 1, 2, text * 3)
                self.dr1.send(d_big)
                self.assertEqual(self.dr2.receive()[1], d_big)

                d12_2 = datagram(14, 1, 2, "test 2")
                d12_3 = datagram(14, 1, 2, "test 3")

                self.dr1.send(d12)
                self.dr1.send(d12_2)
                self.assertEqual(self.dr2.receive()[1], d12)
                self.dr1.send(d12_3)
                self.assertEqual(self.dr2.receive()[1], d12_2)
                self.assertEqual(self.dr2.receive()[1], d12_3)

            def tearDown(self):
                self.dr1.terminate()
                self.dr2.terminate()

                self.ft1.terminate()
                self.ft2.terminate()

    do_tests(Tests, level=level)
def _test(level=None, timeout=None):
    # TODO: Use in separate file to test importing functionality.

    from testing import unittest, do_tests, process_events_with_timeout

    from duplex_link import FullDuplexLink, LossFunc
    from sliding_window import SimpleFrameTransmitter
    from service_manager import packet_to_datagram
    
    class Tests(object):
        class TestControllableFrameTransmitterConstructor(unittest.TestCase):
            def setUp(self):
                self.a, self.b = FullDuplexLink()

                self.at = SimpleFrameTransmitter(node=self.a)
                self.bt = SimpleFrameTransmitter(node=self.b)

            def tearDown(self):
                process_events_with_timeout(timeout)

            def test_constructor(self):
                aft = ControllableFrameTransmitter(
                    src_name=1, dest_name=2,
                    simple_frame_transmitter=self.at,
                    debug_src=1, debug_dest=2)
                bft = ControllableFrameTransmitter(
                    src_name=2, dest_name=1,
                    simple_frame_transmitter=self.bt,
                    debug_src=2, debug_dest=1)

                aft.terminate()
                bft.terminate()

        class TestControllableFrameTransmitter(unittest.TestCase):
            def setUp(self):
                self.a, self.b = FullDuplexLink()

                self.at = SimpleFrameTransmitter(node=self.a)
                self.bt = SimpleFrameTransmitter(node=self.b)

                self.aft = ControllableFrameTransmitter(
                    src_name=1, dest_name=2,
                    simple_frame_transmitter=self.at,
                    debug_src=1, debug_dest=2)
                self.bft = ControllableFrameTransmitter(
                    src_name=2, dest_name=1,
                    simple_frame_transmitter=self.bt,
                    debug_src=2, debug_dest=1)

            def tearDown(self):
                self.aft.terminate()
                self.bft.terminate()

            def test_transmission(self):
                text = "Test!"
                self.aft.send(text)
                self.assertEqual(self.bft.receive(), text)

                self.assertEqual(self.bft.receive(block=False), None)

                text2 = "".join(map(chr, xrange(256)))
                self.bft.send(text2)
                self.assertEqual(self.aft.receive(), text2)

                self.assertEqual(self.aft.receive(block=False), None)

                text3 = "test"
                self.bft.send(text3)

                text_a = text2
                text_b = "".join(reversed(text2))
                self.aft.send(text_a)
                self.aft.send(text_b)
                self.assertEqual(self.aft.receive(), text3)
                self.assertEqual(self.bft.receive(), text_a)
                self.assertEqual(self.bft.receive(), text_b)

                text4 = text2 * 10
                self.aft.send(text4)
                self.assertEqual(self.bft.receive(), text4)

                self.assertEqual(self.aft.receive(block=False), None)
                self.assertEqual(self.bft.receive(block=False), None)

            def test_packet_transmission(self):
                packet = Packet(1, 2, "test", 1)
                datagram = packet_to_datagram(packet, 100)

                self.aft.send(datagram.serialize())

                self.assertEqual(self.bft.receive(), datagram.serialize())
                self.assertEqual(self.bft.receive(block=False), None)

            # TODO: Test signals.

    do_tests(Tests, level=level, qt=True)
Ejemplo n.º 18
0
 def _test(self, tst):
     return testing.do_tests(tst, self.name, self.sdir, self.logfile)
Ejemplo n.º 19
0
 def _test(self, tst):
     return testing.do_tests(tst, self.name, self.sdir, self.logfile)