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)
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)
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'))
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)
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)
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)
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)
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)
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'))
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'))
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'))
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)
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()