def test_connect_attrs(self): addr = "tcp:127.0.0.1:%d" % random.randint(10000, 12000) server_process = echo_server(addr) time.sleep(0.5) attrs = { "xcm.local_addr": "tcp:127.0.0.2:0", "tcp.keepalive_interval": 99 } conn = xcm.connect(addr, attrs=attrs) self.assertTrue( conn.get_attr("xcm.local_addr").startswith("tcp:127.0.0.2")) self.assertEqual(conn.get_attr("tcp.keepalive_interval"), 99) conn.close() server_process.terminate() server_process.join()
def test_echo(self): for addr in TEST_ADDRS: server_process = echo_server(addr) time.sleep(0.5) conn = xcm.connect(addr, 0) conn.set_blocking(False) conn.finish() conn.set_blocking(True) if addr.startswith("tls") or addr.startswith("tcp"): conn.set_attr("tcp.keepalive_count", 99) self.assertEqual(conn.get_attr("tcp.keepalive_count"), 99) else: self.assertRaises(FileNotFoundError, conn.set_attr, "tcp.keepalive_count", 99) self.assertEqual(conn.get_attr("xcm.type"), "connection") with self.assertRaises(PermissionError): conn.set_attr("xcm.remote_addr", "ux:foo") if addr.startswith("tls") or addr.startswith("tcp"): self.assertGreater(conn.get_attr("tcp.rtt"), 0) if addr.startswith("tls"): key_id = bytes([ 0xC0, 0x6D, 0x73, 0x1C, 0x13, 0x25, 0xB3, 0x26, 0x10, 0x51, 0xFE, 0xAC, 0x98, 0xDB, 0x44, 0x35, 0xDE, 0xCD, 0x80, 0x8B ]) self.assertEqual(conn.get_attr("tls.peer_subject_key_id"), key_id) orig_msg = b'\x01\x02\x00\x03\x09\x02\x00\x04' conn.send(orig_msg) ret_msg = conn.receive() self.assertEqual(ret_msg, orig_msg) conn.close() server_process.terminate() server_process.join()
def test_connect_flags(self): for addr in TEST_ADDRS: server_process = echo_server(addr) time.sleep(0.5) conn = xcm.connect(addr, xcm.NONBLOCK) self.assertFalse(conn.is_blocking()) finished = False while not finished: try: conn.finish() finished = True except BlockingIOError: time.sleep(0.1) conn.close() server_process.terminate() server_process.join()
def test_echo(self): for addr in TEST_ADDRS: server_process = echo_server(addr) time.sleep(0.5) conn = xcm.connect(addr, 0) conn.set_blocking(False) conn.finish() conn.set_blocking(True) if addr.startswith("tls") or addr.startswith("tcp"): conn.set_attr("tcp.keepalive_count", 99) self.assertEqual(conn.get_attr("tcp.keepalive_count"), 99) else: self.assertRaises(FileNotFoundError, conn.set_attr, "tcp.keepalive_count", 99) self.assertEqual(conn.get_attr("xcm.type"), "connection") with self.assertRaises(PermissionError): conn.set_attr("xcm.remote_addr", "ux:foo") if addr.startswith("tls") or addr.startswith("tcp"): self.assertGreater(conn.get_attr("tcp.rtt"), 0) if addr.startswith("tls"): with open("%s/ski" % CERT_DIR, "rb") as f: key_id = f.read() self.assertEqual(conn.get_attr("tls.peer_subject_key_id"), key_id) orig_msg = b'\x01\x02\x00\x03\x09\x02\x00\x04' conn.send(orig_msg) ret_msg = conn.receive() self.assertEqual(ret_msg, orig_msg) conn.close() server_process.terminate() server_process.join()
def test_connection_enoent_legacy(self): with self.assertRaises(xcm.error) as cm: xcm.connect("tcp:nonexistentdomain:4711", 0) self.assertEqual(cm.exception.errno, errno.ENOENT)
def test_connection_enoent(self): with self.assertRaises(FileNotFoundError) as cm: xcm.connect("tcp:nonexistentdomain:4711") self.assertEqual(cm.exception.errno, errno.ENOENT)
def test_connection_refused(self): with self.assertRaises(ConnectionRefusedError) as cm: xcm.connect("ux:doesntexist") self.assertEqual(cm.exception.errno, errno.ECONNREFUSED)
#!/usr/bin/python3 import xcm import sys if len(sys.argv) == 3: raddr = sys.argv[1] msg = sys.argv[2] n = 1 elif len(sys.argv) == 4: raddr = sys.argv[1] msg = sys.argv[2] n = int(sys.argv[3]) if n < 1: print("Number of iterations needs to be > 0") sys.exit(1) else: print("Usage: %s <addr> <msg> [<iterations>]" % sys.argv[0]) sys.exit(1) conn = xcm.connect(raddr, 0) for i in range(0, n): conn.send(msg.encode('utf-8')) res = conn.receive() print(res.decode('utf-8'))