Пример #1
0
    def test_nothingtosend(self):
        alice_0 = Channel(0, RTM_NONE)
        alice_1 = Channel(1, RTM_NONE)

        alice = Connection([alice_0, alice_1])

        self.assertRaises(NothingToSend, alice.on_sendable)
Пример #2
0
    def test_RTM_MANUAL_duplication(self):
        pk = Packet(bytearray('DUPA'), 0, 0)

        bob_0 = Channel(0, RTM_MANUAL)

        bob_0.on_received(pk)
        bob_0.on_received(pk)

        self.assertEquals(bob_0.read(), bytearray('DUPA'))
        self.assertRaises(NothingToRead, bob_0.read)
Пример #3
0
    def test_RTM_MANUAL_duplication(self):
        pk = Packet(bytearray('DUPA'), 0, 0)

        bob_0 = Channel(0, RTM_MANUAL)

        bob_0.on_received(pk)
        bob_0.on_received(pk)

        self.assertEquals(bob_0.read(), bytearray('DUPA'))        
        self.assertRaises(NothingToRead, bob_0.read)
Пример #4
0
    def test_RTM_NONE(self):
        alice_0 = Channel(0, RTM_NONE)
        bob_0 = Channel(0, RTM_NONE)

        alice_0.write(bytearray('DUPA'))

        pk = alice_0.on_sendable()

        bob_0.on_received(pk)

        self.assertEquals(bob_0.read(), bytearray('DUPA'))
Пример #5
0
    def test_misrouting(self):
        alice_0 = Channel(0, RTM_NONE)
        alice_1 = Channel(1, RTM_NONE)
        bob_1 = Channel(1, RTM_NONE)

        alice = Connection([alice_0, alice_1])
        bob = Connection([bob_1])

        alice[0].write(bytearray('DUPA1'))

        pk = alice.on_sendable()

        bob.on_received(pk)

        self.assertRaises(NothingToRead, bob[1].read)
        self.assertEquals(bob.has_new_data, False)
Пример #6
0
    def test_RTM_NONE(self):
        alice_0 = Channel(0, RTM_NONE)
        bob_0 = Channel(0, RTM_NONE)

        alice_0.write(bytearray('DUPA'))

        pk = alice_0.on_sendable()

        bob_0.on_received(pk)

        self.assertEquals(bob_0.read(), bytearray('DUPA'))
Пример #7
0
    def test_channels(self):
        alice_0 = Channel(0, RTM_NONE)
        bob_0 = Channel(0, RTM_NONE)

        alice_1 = Channel(1, RTM_NONE)
        bob_1 = Channel(1, RTM_NONE)

        alice = Connection([alice_0, alice_1])
        bob = Connection([bob_0, bob_1])

        alice[0].write(bytearray('DUPA1'))

        pk1 = alice.on_sendable()

        self.assertEquals(pk1.channel_id, 0)

        bob.on_received(pk1)

        self.assertEquals(bob[0].read(), bytearray('DUPA1'))
        self.assertEquals(bob.has_new_data, True)
Пример #8
0
    def test_RTM_MANUAL_ackduplication(self):
        alice_0 = Channel(0, RTM_MANUAL)
        bob_0 = Channel(0, RTM_MANUAL)

        alice_0.write(bytearray('DUPA'))
        pk = alice_0.on_sendable()

        bob_0.on_received(pk)

        self.assertEquals(bob_0.read(), bytearray('DUPA'))

        ack = bob_0.on_sendable()
        self.assertEquals(ack.is_ack, True)

        alice_0.on_received(ack)
        alice_0.on_received(ack)

        self.assertEquals(alice_0.is_tx_in_progress(), False)
Пример #9
0
 def test_RTM_MANUAL_more64randomed(self):
     alice_0 = Channel(0, RTM_MANUAL)
     bob_0 = Channel(0, RTM_MANUAL)
     
     for i in xrange(0, 500):
         dts = bytearray([randint(0, 255) for x in xrange(0, 20)])
         alice_0.write(dts)
         p = alice_0.on_sendable()
         bob_0.on_received(p)
         alice_0.on_received(bob_0.on_sendable())
         
         self.assertEquals(bob_0.read(), dts)
Пример #10
0
    def test_RTM_MANUAL_resend(self):
        alice_0 = Channel(0, RTM_MANUAL, 0.5)
        bob_0 = Channel(0, RTM_MANUAL, 0.5)

        alice_0.write(bytearray('DUPA'))
        pk = alice_0.on_sendable()

        sleep(0.6)

        pk = alice_0.on_sendable()

        bob_0.on_received(pk)

        ack = bob_0.on_sendable()
        self.assertEquals(ack.is_ack, True)

        alice_0.on_received(ack)

        self.assertEquals(alice_0.is_tx_in_progress(), False)
Пример #11
0
    def test_RTM_MANUAL_handover(self):
        """Tests an in-transmission packet content change"""
        alice_0 = Channel(0, RTM_MANUAL, 0.5)
        bob_0 = Channel(0, RTM_MANUAL, 0.5)

        alice_0.write(bytearray('DUPA'))
        pk = alice_0.on_sendable()

        sleep(0.6)

        alice_0.write(bytearray('STEFAN'))

        pk = alice_0.on_sendable()

        bob_0.on_received(pk)

        ack = bob_0.on_sendable()
        self.assertEquals(ack.is_ack, True)

        alice_0.on_received(ack)

        self.assertEquals(alice_0.is_tx_in_progress(), False)
        self.assertEquals(bob_0.read(), bytearray('STEFAN'))
Пример #12
0
    def test_RTM_AUTO_bundle_control_2(self):
        alice_0 = Channel(0, RTM_AUTO, 0.5, 2)
        bob_0 = Channel(0, RTM_AUTO, 0.5, 2)

        alice_0.write(bytearray('DUPA1'))
        alice_0.write(bytearray('DUPA2'))
        alice_0.write(bytearray('DUPA3'))

        pk1 = alice_0.on_sendable()
        pk2 = alice_0.on_sendable()

        self.assertRaises(NothingToSend, alice_0.on_sendable)

        bob_0.on_received(pk1)
        ack_win1 = bob_0.on_sendable()
        self.assertEquals(ack_win1.is_ack, True)
        self.assertEquals(ack_win1.window_id, 0)

        alice_0.on_received(ack_win1)    # Alice receives ACK for DUPA2

        self.assertEquals(bob_0.read(), bytearray('DUPA1'))

        pk3 = alice_0.on_sendable()
        self.assertEquals(pk3.data, bytearray('DUPA3'))
Пример #13
0
    def test_RTM_AUTO_ORDER_reordering(self):
        alice_0 = Channel(0, RTM_AUTO_ORDERED, 0.5, 5)
        bob_0 = Channel(0, RTM_AUTO_ORDERED, 0.5, 5)

        alice_0.write(bytearray('DUPA1'))
        alice_0.write(bytearray('DUPA2'))
        alice_0.write(bytearray('DUPA3'))

        dupa1 = alice_0.on_sendable()
        dupa2 = alice_0.on_sendable()
        dupa3 = alice_0.on_sendable()

        bob_0.on_received(dupa3)

        self.assertRaises(NothingToRead, bob_0.read)

        bob_0.on_received(dupa2)

        self.assertRaises(NothingToRead, bob_0.read)

        bob_0.on_received(dupa1)

        self.assertEquals(bob_0.read(), bytearray('DUPA1'))
        self.assertEquals(bob_0.read(), bytearray('DUPA2'))
        self.assertEquals(bob_0.read(), bytearray('DUPA3'))
Пример #14
0
    def test_RTM_MANUAL_normalsend(self):
        alice_0 = Channel(0, RTM_MANUAL)
        bob_0 = Channel(0, RTM_MANUAL)

        alice_0.write(bytearray('DUPA'))
        pk = alice_0.on_sendable()

        bob_0.on_received(pk)

        self.assertEquals(bob_0.read(), bytearray('DUPA'))

        ack = bob_0.on_sendable()
        self.assertEquals(ack.is_ack, True)

        alice_0.on_received(ack)

        self.assertEquals(len(alice_0.packs_in_transit), 0)
Пример #15
0
    def test_RTM_MANUAL_normalsend(self):
        alice_0 = Channel(0, RTM_MANUAL)
        bob_0 = Channel(0, RTM_MANUAL)

        alice_0.write(bytearray('DUPA'))
        pk = alice_0.on_sendable()

        bob_0.on_received(pk)

        self.assertEquals(bob_0.read(), bytearray('DUPA'))

        ack = bob_0.on_sendable()
        self.assertEquals(ack.is_ack, True)

        alice_0.on_received(ack)

        self.assertEquals(len(alice_0.packs_in_transit), 0)
Пример #16
0
    def test_RTM_AUTO_bundle_control_2(self):
        alice_0 = Channel(0, RTM_AUTO, 0.5, 2)
        bob_0 = Channel(0, RTM_AUTO, 0.5, 2)

        alice_0.write(bytearray('DUPA1'))
        alice_0.write(bytearray('DUPA2'))
        alice_0.write(bytearray('DUPA3'))

        pk1 = alice_0.on_sendable()
        pk2 = alice_0.on_sendable()

        self.assertRaises(NothingToSend, alice_0.on_sendable)

        bob_0.on_received(pk1)
        ack_win1 = bob_0.on_sendable()
        self.assertEquals(ack_win1.is_ack, True)
        self.assertEquals(ack_win1.window_id, 0)

        alice_0.on_received(ack_win1)  # Alice receives ACK for DUPA2

        self.assertEquals(bob_0.read(), bytearray('DUPA1'))

        pk3 = alice_0.on_sendable()
        self.assertEquals(pk3.data, bytearray('DUPA3'))
Пример #17
0
    def test_RTM_MANUAL_more64randomed(self):
        alice_0 = Channel(0, RTM_MANUAL)
        bob_0 = Channel(0, RTM_MANUAL)

        for i in xrange(0, 500):
            dts = bytearray([randint(0, 255) for x in xrange(0, 20)])
            alice_0.write(dts)
            p = alice_0.on_sendable()
            bob_0.on_received(p)
            alice_0.on_received(bob_0.on_sendable())

            self.assertEquals(bob_0.read(), dts)
Пример #18
0
    def test_RTM_MANUAL_ackduplication(self):
        alice_0 = Channel(0, RTM_MANUAL)
        bob_0 = Channel(0, RTM_MANUAL)

        alice_0.write(bytearray('DUPA'))
        pk = alice_0.on_sendable()

        bob_0.on_received(pk)

        self.assertEquals(bob_0.read(), bytearray('DUPA'))

        ack = bob_0.on_sendable()
        self.assertEquals(ack.is_ack, True)

        alice_0.on_received(ack)
        alice_0.on_received(ack)

        self.assertEquals(alice_0.is_tx_in_progress(), False)
Пример #19
0
    def test_RTM_AUTO_ORDER_reordering(self):
        alice_0 = Channel(0, RTM_AUTO_ORDERED, 0.5, 5)
        bob_0 = Channel(0, RTM_AUTO_ORDERED, 0.5, 5)

        alice_0.write(bytearray('DUPA1'))
        alice_0.write(bytearray('DUPA2'))
        alice_0.write(bytearray('DUPA3'))

        dupa1 = alice_0.on_sendable()
        dupa2 = alice_0.on_sendable()
        dupa3 = alice_0.on_sendable()

        bob_0.on_received(dupa3)

        self.assertRaises(NothingToRead, bob_0.read)

        bob_0.on_received(dupa2)

        self.assertRaises(NothingToRead, bob_0.read)

        bob_0.on_received(dupa1)

        self.assertEquals(bob_0.read(), bytearray('DUPA1'))
        self.assertEquals(bob_0.read(), bytearray('DUPA2'))
        self.assertEquals(bob_0.read(), bytearray('DUPA3'))
Пример #20
0
    def test_RTM_MANUAL_resend(self):
        alice_0 = Channel(0, RTM_MANUAL, 0.5)
        bob_0 = Channel(0, RTM_MANUAL, 0.5)

        alice_0.write(bytearray('DUPA'))
        pk = alice_0.on_sendable()

        sleep(0.6)

        pk = alice_0.on_sendable()

        bob_0.on_received(pk)

        ack = bob_0.on_sendable()
        self.assertEquals(ack.is_ack, True)

        alice_0.on_received(ack)

        self.assertEquals(alice_0.is_tx_in_progress(), False)
Пример #21
0
    def test_RTM_MANUAL_handover(self):
        """Tests an in-transmission packet content change"""
        alice_0 = Channel(0, RTM_MANUAL, 0.5)
        bob_0 = Channel(0, RTM_MANUAL, 0.5)

        alice_0.write(bytearray('DUPA'))
        pk = alice_0.on_sendable()

        sleep(0.6)

        alice_0.write(bytearray('STEFAN'))

        pk = alice_0.on_sendable()

        bob_0.on_received(pk)

        ack = bob_0.on_sendable()
        self.assertEquals(ack.is_ack, True)

        alice_0.on_received(ack)

        self.assertEquals(alice_0.is_tx_in_progress(), False)
        self.assertEquals(bob_0.read(), bytearray('STEFAN'))
Пример #22
0
from lnx2 import Packet, Connection, Channel, RTM_AUTO_ORDERED, RTM_NONE, ClientSocket, NothingToRead, RTM_MANUAL, RTM_AUTO
import sys, select, socket, hashlib, time, struct

# Prepare channel and connection
c_0 = Channel(0, RTM_AUTO_ORDERED, 10, 60)
c_1 = Channel(1, RTM_MANUAL, 5, 1)
c_2 = Channel(2, RTM_MANUAL, 5, 1) 
c_3 = Channel(3, RTM_AUTO, 10, 60)
c_4 = Channel(4, RTM_NONE, 5, 1) 
c_5 = Channel(5, RTM_AUTO, 5, 60)


conn = Connection([c_0, c_1, c_2, c_3, c_4, c_5], 15)

def wait_until_clear(chanid):
    """Waits until there is no tx activity on channel chanid"""
    while conn[chanid].is_tx_in_progress():
        rs, ws, xs = select.select([sock.socket], [sock.socket], [], 5)
        if len(ws) == 1:
            sock.on_sendable()
        if len(rs) == 1:
            sock.on_readable()

def packon(chanid):
    """Waits until a packet is received on channel chanid. Returns it"""
    while True:
        rs, ws, xs = select.select([sock.socket], [sock.socket], [], 5)
        if len(ws) == 1:
            sock.on_sendable()
        if len(rs) == 1:
            sock.on_readable()