def setUp(self): self.queue = Queue() self.running = True started = Event() def run(): ts = TestServer(self.queue) for s in listen("0.0.0.0", PORT, lambda: self.running, lambda: started.set()): conn = Connection(s, delegate=ts.connection) try: conn.start(5) except Closed: pass self.server = Thread(target=run) self.server.setDaemon(True) self.server.start() started.wait(3) assert started.isSet()
class ConnectionTest(TestCase): def setUp(self): self.queue = Queue() self.running = True started = Event() def run(): ts = TestServer(self.queue) for s in listen("0.0.0.0", PORT, lambda: self.running, lambda: started.set()): conn = Connection(s, delegate=ts.connection) try: conn.start(5) except Closed: pass self.server = Thread(target=run) self.server.setDaemon(True) self.server.start() started.wait(3) assert started.isSet() def tearDown(self): self.running = False connect("127.0.0.1", PORT).close() self.server.join(3) def connect(self, **kwargs): return Connection(connect("127.0.0.1", PORT), **kwargs) def test(self): c = self.connect() c.start(10) ssn1 = c.session("test1", timeout=10) ssn2 = c.session("test2", timeout=10) assert ssn1 == c.sessions["test1"] assert ssn2 == c.sessions["test2"] assert ssn1.channel != None assert ssn2.channel != None assert ssn1 in c.attached.values() assert ssn2 in c.attached.values() ssn1.close(5) assert ssn1.channel == None assert ssn1 not in c.attached.values() assert ssn2 in c.sessions.values() ssn2.close(5) assert ssn2.channel == None assert ssn2 not in c.attached.values() assert ssn2 not in c.sessions.values() ssn = c.session("session", timeout=10) assert ssn.channel != None assert ssn in c.sessions.values() destinations = ("one", "two", "three") for d in destinations: ssn.message_transfer(d) for d in destinations: cmd = self.queue.get(10) assert cmd.destination == d assert cmd.headers == None assert cmd.payload == None msg = Message("this is a test") ssn.message_transfer("four", message=msg) cmd = self.queue.get(10) assert cmd.destination == "four" assert cmd.headers == None assert cmd.payload == msg.body qq = ssn.queue_query("asdf") assert qq.queue == "asdf" c.close(5) def testCloseGet(self): c = self.connect() c.start(10) ssn = c.session("test", timeout=10) echos = ssn.incoming("echo") for i in range(10): ssn.message_transfer("echo", message=Message("test%d" % i)) ssn.auto_sync=False ssn.message_transfer("abort") for i in range(10): m = echos.get(timeout=10) assert m.body == "test%d" % i try: m = echos.get(timeout=10) assert False except Closed, e: pass
def test_close(self): q = Queue(0) q.put(1) q.put(2) q.put(3) q.close() assert q.get() == 1 assert q.get() == 2 assert q.get() == 3 for i in range(10): try: q.get() raise AssertionError("expected Closed") except Closed: pass
def test_listen(self): values = [] heard = threading.Event() def listener(x): values.append(x) heard.set() q = Queue(0) q.listen(listener) heard.clear() q.put(1) heard.wait() assert values[-1] == 1 heard.clear() q.put(2) heard.wait() assert values[-1] == 2 q.listen(None) q.put(3) assert q.get(3) == 3 q.listen(listener) heard.clear() q.put(4) heard.wait() assert values[-1] == 4
def test_close(self): q = Queue(0) q.put(1); q.put(2); q.put(3); q.close() assert q.get() == 1 assert q.get() == 2 assert q.get() == 3 for i in range(10): try: q.get() raise AssertionError("expected Closed") except Closed: pass
class ConnectionTest(TestCase): def setUp(self): self.queue = Queue() self.running = True started = Event() def run(): ts = TestServer(self.queue) for s in listen("0.0.0.0", PORT, lambda: self.running, lambda: started.set()): conn = Connection(s, delegate=ts.connection) try: conn.start(5) except Closed: pass self.server = Thread(target=run) self.server.setDaemon(True) self.server.start() started.wait(3) assert started.isSet() def tearDown(self): self.running = False connect("127.0.0.1", PORT).close() self.server.join(3) def connect(self, **kwargs): return Connection(connect("127.0.0.1", PORT), **kwargs) def test(self): c = self.connect() c.start(10) ssn1 = c.session("test1", timeout=10) ssn2 = c.session("test2", timeout=10) assert ssn1 == c.sessions["test1"] assert ssn2 == c.sessions["test2"] assert ssn1.channel != None assert ssn2.channel != None assert ssn1 in c.attached.values() assert ssn2 in c.attached.values() ssn1.close(5) assert ssn1.channel == None assert ssn1 not in c.attached.values() assert ssn2 in c.sessions.values() ssn2.close(5) assert ssn2.channel == None assert ssn2 not in c.attached.values() assert ssn2 not in c.sessions.values() ssn = c.session("session", timeout=10) assert ssn.channel != None assert ssn in c.sessions.values() destinations = ("one", "two", "three") for d in destinations: ssn.message_transfer(d) for d in destinations: cmd = self.queue.get(10) assert cmd.destination == d assert cmd.headers == None assert cmd.payload == None msg = Message("this is a test") ssn.message_transfer("four", message=msg) cmd = self.queue.get(10) assert cmd.destination == "four" assert cmd.headers == None assert cmd.payload == msg.body qq = ssn.queue_query("asdf") assert qq.queue == "asdf" c.close(5) def testCloseGet(self): c = self.connect() c.start(10) ssn = c.session("test", timeout=10) echos = ssn.incoming("echo") for i in range(10): ssn.message_transfer("echo", message=Message("test%d" % i)) ssn.auto_sync = False ssn.message_transfer("abort") for i in range(10): m = echos.get(timeout=10) assert m.body == "test%d" % i try: m = echos.get(timeout=10) assert False except Closed, e: pass