Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
    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()
Ejemplo n.º 3
0
 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)
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
    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)
Ejemplo n.º 7
0
    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)
Ejemplo n.º 8
0
    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])
Ejemplo n.º 9
0
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