def test_thrifttype_sensitivity(self): thrift_obj = lsdb_types.PrefixDatabase() thrift_obj.thisNodeName = "some node" raw_msg = serializer.serialize_thrift_object(thrift_obj) recovered_obj = serializer.deserialize_thrift_object( raw_msg, lsdb_types.PrefixEntry) self.assertTrue(thrift_obj != recovered_obj)
def test_in_multi_processes(self): thrift_obj = lsdb_types.PrefixDatabase() thrift_obj.thisNodeName = "some node" def _send_recv(): req_socket = zmq_socket.ZmqSocket(zmq.Context(), zmq.REQ) req_socket.connect("tcp://localhost:5000") req_socket.send_thrift_obj(thrift_obj) print("request sent") recv_obj = req_socket.recv_thrift_obj(lsdb_types.PrefixDatabase) print("reply received") self.assertEqual(thrift_obj, recv_obj) def _recv_send(): rep_socket = zmq_socket.ZmqSocket(zmq.Context(), zmq.REP) rep_socket.bind("tcp://*:5000") recv_obj = rep_socket.recv_thrift_obj(lsdb_types.PrefixDatabase) print("request received") self.assertEqual(thrift_obj, recv_obj) rep_socket.send_thrift_obj(recv_obj) print("reply sent") q = Process(target=_recv_send) q.start() p = Process(target=_send_recv) p.start() p.join() q.join()
def test_exception_handling(self): thrift_obj = lsdb_types.PrefixDatabase() thrift_obj.thisNodeName = "some node" raw_msg = serializer.serialize_thrift_object(thrift_obj) # should raise exception due to inconsistency of protocol factor with self.assertRaises(Exception): serializer.deserialize_thrift_object(raw_msg, lsdb_types.PrefixDatabase, TJSONProtocolFactory)
def test_reverse_equality(self): for _ in range(100): thrift_obj = lsdb_types.PrefixDatabase() random_string = "".join( random.choice(string.digits) for _ in range(10)) thrift_obj.thisNodeName = random_string raw_msg = serializer.serialize_thrift_object(thrift_obj) recovered_obj = serializer.deserialize_thrift_object( raw_msg, lsdb_types.PrefixDatabase) self.assertEqual(thrift_obj, recovered_obj) for _ in range(100): thrift_obj = lsdb_types.PrefixDatabase() random_string = "".join( random.choice(string.digits) for _ in range(10)) thrift_obj.thisNodeName = random_string raw_msg = serializer.serialize_thrift_object( thrift_obj, TJSONProtocolFactory) recovered_obj = serializer.deserialize_thrift_object( raw_msg, lsdb_types.PrefixDatabase, TJSONProtocolFactory) self.assertEqual(thrift_obj, recovered_obj)
def test_pub_sub(self): zmq_ctx = zmq.Context() pub_socket = zmq_socket.ZmqSocket(zmq_ctx, zmq.PUB) pub_socket.bind("inproc://req_rep_test") sub_socket = zmq_socket.ZmqSocket(zmq_ctx, zmq.SUB) sub_socket.connect("inproc://req_rep_test") sub_socket.set_sock_opt(zmq.SUBSCRIBE, b"") thrift_obj = lsdb_types.PrefixDatabase() thrift_obj.thisNodeName = "some node" pub_socket.send_thrift_obj(thrift_obj) recv_obj = sub_socket.recv_thrift_obj(lsdb_types.PrefixDatabase) self.assertEqual(thrift_obj, recv_obj)
def test_dealer_dealer(self): zmq_ctx = zmq.Context() d_socket_1 = zmq_socket.ZmqSocket(zmq_ctx, zmq.DEALER) d_socket_1.bind("inproc://dealer_test") d_socket_2 = zmq_socket.ZmqSocket(zmq_ctx, zmq.DEALER) d_socket_2.connect("inproc://dealer_test") thrift_obj = lsdb_types.PrefixDatabase() thrift_obj.thisNodeName = "some node" d_socket_1.send_thrift_obj(thrift_obj) recv_obj = d_socket_2.recv_thrift_obj(lsdb_types.PrefixDatabase) self.assertEqual(thrift_obj, recv_obj) d_socket_2.send_thrift_obj(recv_obj) recv_obj = d_socket_1.recv_thrift_obj(lsdb_types.PrefixDatabase) self.assertEqual(thrift_obj, recv_obj)
def test_req_rep(self): zmq_ctx = zmq.Context() rep_socket = zmq_socket.ZmqSocket(zmq_ctx, zmq.REP) rep_socket.bind("inproc://req_rep_test") req_socket = zmq_socket.ZmqSocket(zmq_ctx, zmq.REQ) req_socket.connect("inproc://req_rep_test") thrift_obj = lsdb_types.PrefixDatabase() thrift_obj.thisNodeName = "some node" req_socket.send_thrift_obj(thrift_obj) recv_obj = rep_socket.recv_thrift_obj(lsdb_types.PrefixDatabase) self.assertEqual(thrift_obj, recv_obj) rep_socket.send_thrift_obj(recv_obj) recv_obj = req_socket.recv_thrift_obj(lsdb_types.PrefixDatabase) self.assertEqual(thrift_obj, recv_obj)
def test_parse_prefix_database(self): bgp1 = lsdb_types.PrefixEntry( prefix=ipnetwork.ip_str_to_prefix("1.0.0.0/8"), type=network_types.PrefixType.BGP, ) bgp2 = lsdb_types.PrefixEntry( prefix=ipnetwork.ip_str_to_prefix("2.0.0.0/8"), type=network_types.PrefixType.BGP, ) loop1 = lsdb_types.PrefixEntry( prefix=ipnetwork.ip_str_to_prefix("10.0.0.1/32"), type=network_types.PrefixType.LOOPBACK, ) prefix_db = lsdb_types.PrefixDatabase( thisNodeName="node1", prefixEntries=[bgp1, bgp2, loop1], deletePrefix=False, perfEvents=None, ) # No filter and ensure we receive everything back data = {} parse_prefix_database("", "", data, prefix_db) self.assertEqual(data["node1"].prefixEntries, [bgp1, bgp2, loop1]) # Filter on prefix data = {} parse_prefix_database("10.0.0.1/32", "", data, prefix_db) self.assertEqual(data["node1"].prefixEntries, [loop1]) # Filter on type data = {} parse_prefix_database("", "bgp", data, prefix_db) self.assertEqual(data["node1"].prefixEntries, [bgp1, bgp2]) # Filter on prefix and type both data = {} parse_prefix_database("2.0.0.0/8", "bgp", data, prefix_db) self.assertEqual(data["node1"].prefixEntries, [bgp2])
import zmq from openr.clients import decision_client from openr.Decision import ttypes as decision_types from openr.Fib import ttypes as fib_types from openr.Lsdb import ttypes as lsdb_types from openr.utils import socket route_db_cache = fib_types.RouteDatabase() route_db_cache.thisNodeName = "san jose 1" adj_db = lsdb_types.AdjacencyDatabase() adj_db.thisNodeName = "san jose 1" adj_dbs_cache = {"san jose 1": adj_db} prefix_db = lsdb_types.PrefixDatabase() prefix_db.thisNodeName = "san jose 1" prefix_dbs_cache = {"san jose 1": prefix_db} class Decision(object): def __init__(self, zmq_ctx, url): self._decision_server_socket = socket.Socket(zmq_ctx, zmq.REP) self._decision_server_socket.bind(url) self._route_db_cache = route_db_cache self._adj_db_cachee = adj_dbs_cache self._prefix_db_cache = prefix_dbs_cache def _get_route_db(self, reply): reply.routeDb = self._route_db_cache