def setUp(self):
     link1 = Link('Link', '1', 'LinkId1', 'NodeId1', 'PortId1', 'NodeId2',
                  'PortId3', {})
     link2 = Link('Link', '1', 'LinkId2', 'NodeId2', 'PortId4', 'NodeId1',
                  'PortId2', {})
     self.target = LinkChanged('ID', LinkChanged.Action.UPDATE, '1', link1,
                               link2)
 def setUp(self):
     link1 = Link('Link', '1', 'LinkId1', 'NodeId1', 'PortId1', 'NodeId2',
                  'PortId3', {})
     link2 = Link('Link', '1', 'LinkId2', 'NodeId2', 'PortId4', 'NodeId1',
                  'PortId2', {})
     node1 = Node('Node', '1', 'NodeId1', {}, {})
     node2 = Node('Node', '1', 'NodeId2', {}, {})
     topology1 = Topology('Topology', 'version', {'NodeId1': node1},
                          {'LinkId1': link1})
     topology2 = Topology('Topology', 'version', {'NodeId2': node2},
                          {'LinkId2': link2})
     self.target = TopologyChanged('1', topology1, topology2)
Esempio n. 3
0
    def _delete_link_conversion(self, network_id, link):
        logging.debug(">> %s", stack()[0][3])
        resp_list = {}
        if network_id is None or link is None:
            return resp_list

        dst_links = self._conversion_table.get_link(network_id,
                                                    link.link_id)

        for dst_link in dst_links:
            link_id = dst_link.split("::")

            if link_id[0] not in self._network_interfaces:
                continue

            network_if = self._network_interfaces[link_id[0]]

            resp = network_if.del_link(link_id[1])
            resp_link = None
            if resp.body is not None:
                try:
                    resp_link = Link.create_from_packed(resp.body)
                except KeyError, err:
                    logging.error("DELETE Link Invalid Response Message"
                                  + " KeyError: " + str(err))
                    return None

            resp_list[dst_link] = resp_link
Esempio n. 4
0
    def create_from_packed(cls, packed):
        action = packed[cls.ACTION]
        version = ""
        prev = None
        curr = None

        if action == cls.Action.ADD:
            version = packed[cls.VERSION]
            curr = Link.create_from_packed(packed[cls.CURR])
        elif action == cls.Action.DELETE:
            prev = Link.create_from_packed(packed[cls.PREV])
        elif action == cls.Action.UPDATE:
            version = packed[cls.VERSION]
            prev = Link.create_from_packed(packed[cls.PREV])
            curr = Link.create_from_packed(packed[cls.CURR])

        return cls(packed[cls.ID], action, version, prev, curr)
Esempio n. 5
0
    def create_from_packed(cls, packed):
        action = packed[cls.ACTION]
        version = ""
        prev = None
        curr = None

        if action == cls.Action.ADD:
            version = packed[cls.VERSION]
            curr = Link.create_from_packed(packed[cls.CURR])
        elif action == cls.Action.DELETE:
            prev = Link.create_from_packed(packed[cls.PREV])
        elif action == cls.Action.UPDATE:
            version = packed[cls.VERSION]
            prev = Link.create_from_packed(packed[cls.PREV])
            curr = Link.create_from_packed(packed[cls.CURR])

        return cls(packed[cls.ID], action,
                   version, prev, curr)
Esempio n. 6
0
 def setUp(self):
     port1 = Port('Port', '1', 'PortId1', 'NodeId1', 'LinkId1', None, {})
     port2 = Port('Port', '1', 'PortId2', 'NodeId1', None, 'LinkId2', {})
     port3 = Port('Port', '1', 'PortId3', 'NodeId2', None, 'LinkId1', {})
     port4 = Port('Port', '1', 'PortId4', 'NodeId2', 'LinkId2', None, {})
     node1 = Node('Node', '1', 'NodeId1', {
         'PortId1': port1,
         'PortId2': port2
     }, {})
     node2 = Node('Node', '1', 'NodeId2', {
         'PortId3': port3,
         'PortId4': port4
     }, {})
     link1 = Link('Link', '1', 'LinkId1', 'NodeId1', 'PortId1', 'NodeId2',
                  'PortId3', {})
     link2 = Link('Link', '1', 'LinkId2', 'NodeId2', 'PortId4', 'NodeId1',
                  'PortId2', {})
     self.nodes = {'NodeId1': node1, 'NodeId2': node2}
     self.links = {'LinkId1': link1, 'LinkId2': link2}
     self.target = Topology('Topology', '1', self.nodes, self.links)
Esempio n. 7
0
 def test_create_from_packed(self):
     packed = self.target.packed_object()
     result = Link.create_from_packed(packed)
     self.assertEqual(result.type, 'Link')
     self.assertEqual(result.version, '1')
     self.assertEqual(result.link_id, 'LinkId')
     self.assertEqual(result.src_node, 'SrcNodeId')
     self.assertEqual(result.src_port, 'SrcPortId')
     self.assertEqual(result.dst_node, 'DstNodeId')
     self.assertEqual(result.dst_port, 'DstPortId')
     self.assertEqual(len(result.attributes), 1)
     self.assertEqual(result.attributes['Key'], 'Val')
Esempio n. 8
0
 def test_create_from_packed(self):
     packed = self.target.packed_object()
     result = Link.create_from_packed(packed)
     self.assertEqual(result.type, 'Link')
     self.assertEqual(result.version, '1')
     self.assertEqual(result.link_id, 'LinkId')
     self.assertEqual(result.src_node, 'SrcNodeId')
     self.assertEqual(result.src_port, 'SrcPortId')
     self.assertEqual(result.dst_node, 'DstNodeId')
     self.assertEqual(result.dst_port, 'DstPortId')
     self.assertEqual(len(result.attributes), 1)
     self.assertEqual(result.attributes['Key'], 'Val')
Esempio n. 9
0
    def _update_link_conversion(self, network_id,
                                link_prev, link_curr, attributes):
        logging.debug(">> %s", stack()[0][3])
        resp_list = {}
        if network_id is None or link_curr is None:
            return resp_list

        attributes_list = []
        if attributes is None:
            attributes_list = []
        else:
            attributes_list = attributes

        # get ignore list
        link_ignore_attributes = self.__get_ignore_keys(self.attributes_link,
                                                        attributes_list)

        for dst_link in self._conversion_table.get_link(network_id,
                                                        link_curr.link_id):
            link_id = dst_link.split("::")

            if link_id[0] not in self._network_interfaces:
                continue
            network_if = self._network_interfaces[link_id[0]]

            # get link
            link = network_if.get_link(link_id[1])
            if link is None:
                continue

            # attr copy (curr -> body)
            updated = False
            curr_attr = link_curr.attributes
            for attr_key in curr_attr:
                if (attr_key in link_ignore_attributes or
                    (attr_key in link.attributes and
                     link.attributes[attr_key] == curr_attr[attr_key])):
                    continue
                updated = True
                link.attributes[attr_key] = \
                    link_curr.attributes[attr_key]

            # put link
            if updated:
                resp = network_if.put_link(link)
                try:
                    resp_link = Link.create_from_packed(resp.body)
                    resp_list[dst_link] = resp_link
                except KeyError, err:
                    logging.error("PUT Link Invalid Response Message"
                                  + " KeyError: " + str(err))
Esempio n. 10
0
    def get_links(self):
        logging.debug("GET Links NetworkID:" + self.network_id)
        resp = self._get_object_to_remote_object(self.LINKS_PATH)
        if resp.is_error(Request.Method.GET):
            return None

        links = {}
        try:
            for link_id, link in resp.body.items():
                links[link_id] = Link.create_from_packed(link)
        except KeyError, err:
            logging.error("GET Links Invalid Response Message" +
                          " KeyError: " + str(err))
            return None
Esempio n. 11
0
    def create_from_packed(cls, packed):
        version = None
        if cls.VERSION in packed:
            version = packed[cls.VERSION]

        nodes = {}
        for node_id, node in packed[cls.NODES].items():
            nodes[node_id] = Node.create_from_packed(node)

        links = {}
        for link_id, link in packed[cls.LINKS].items():
            links[link_id] = Link.create_from_packed(link)

        return cls(packed[cls.TYPE], version, nodes, links)
Esempio n. 12
0
    def get_links(self):
        logging.debug("GET Links NetworkID:" + self.network_id)
        resp = self._get_object_to_remote_object(self.LINKS_PATH)
        if resp.is_error(Request.Method.GET):
            return None

        links = {}
        try:
            for link_id, link in resp.body.items():
                links[link_id] = Link.create_from_packed(link)
        except KeyError, err:
            logging.error("GET Links Invalid Response Message"
                          + " KeyError: " + str(err))
            return None
Esempio n. 13
0
    def create_from_packed(cls, packed):
        version = None
        if cls.VERSION in packed:
            version = packed[cls.VERSION]

        nodes = {}
        for node_id, node in packed[cls.NODES].items():
            nodes[node_id] = Node.create_from_packed(node)

        links = {}
        for link_id, link in packed[cls.LINKS].items():
            links[link_id] = Link.create_from_packed(link)

        return cls(packed[cls.TYPE], version,
                   nodes, links)
Esempio n. 14
0
    def get_link(self, link_id):
        logging.debug("GET Link NetworkID:" + self.network_id +
                      " LinkID:" + link_id)
        path = self.LINK_PATH % link_id
        resp = self._get_object_to_remote_object(path)
        if resp.is_error(Request.Method.GET):
            return None

        link = None
        try:
            link = Link.create_from_packed(resp.body)
        except KeyError, err:
            logging.error("GET Link Invalid Response Message"
                          + " KeyError: " + str(err))
            return None
Esempio n. 15
0
    def get_link(self, link_id):
        logging.debug("GET Link NetworkID:" + self.network_id + " LinkID:" +
                      link_id)
        path = self.LINK_PATH % link_id
        resp = self._get_object_to_remote_object(path)
        if resp.is_error(Request.Method.GET):
            return None

        link = None
        try:
            link = Link.create_from_packed(resp.body)
        except KeyError, err:
            logging.error("GET Link Invalid Response Message" + " KeyError: " +
                          str(err))
            return None
Esempio n. 16
0
 def test_create_from_packed_without_version(self):
     packed = {'type': 'Link', 'link_id': 'LinkId',
               'src_node': 'SrcNodeId', 'src_port': 'SrcPortId',
               'dst_node': 'DstNodeId', 'dst_port': 'DstPortId',
               'attributes': {'Key': 'Val'}}
     result = Link.create_from_packed(packed)
     self.assertEqual(result.type, 'Link')
     self.assertEqual(result.version, None)
     self.assertEqual(result.link_id, 'LinkId')
     self.assertEqual(result.src_node, 'SrcNodeId')
     self.assertEqual(result.src_port, 'SrcPortId')
     self.assertEqual(result.dst_node, 'DstNodeId')
     self.assertEqual(result.dst_port, 'DstPortId')
     self.assertEqual(len(result.attributes), 1)
     self.assertEqual(result.attributes['Key'], 'Val')
Esempio n. 17
0
    def _add_link_conversion(self, network_id, link):
        logging.debug(">> %s", stack()[0][3])
        resp_list = {}

        for nw_id in self._conversion_table.get_network(network_id):
            if nw_id not in self._network_interfaces:
                continue

            network_if = self._network_interfaces[nw_id]
            resp = network_if.put_link(link)
            resp_list[nw_id] = resp
            try:
                resp_link = Link.create_from_packed(resp.body)
                self._conversion_table.add_entry_link(network_id,
                                                      link.link_id,
                                                      nw_id,
                                                      resp_link.link_id)
            except KeyError, err:
                logging.error("PUT Link Invalid Response Message"
                              + " KeyError: " + str(err))
Esempio n. 18
0
 def test_create_from_packed_without_version(self):
     packed = {
         'type': 'Link',
         'link_id': 'LinkId',
         'src_node': 'SrcNodeId',
         'src_port': 'SrcPortId',
         'dst_node': 'DstNodeId',
         'dst_port': 'DstPortId',
         'attributes': {
             'Key': 'Val'
         }
     }
     result = Link.create_from_packed(packed)
     self.assertEqual(result.type, 'Link')
     self.assertEqual(result.version, None)
     self.assertEqual(result.link_id, 'LinkId')
     self.assertEqual(result.src_node, 'SrcNodeId')
     self.assertEqual(result.src_port, 'SrcPortId')
     self.assertEqual(result.dst_node, 'DstNodeId')
     self.assertEqual(result.dst_port, 'DstPortId')
     self.assertEqual(len(result.attributes), 1)
     self.assertEqual(result.attributes['Key'], 'Val')
Esempio n. 19
0
 def setUp(self):
     self.target = Link('Link', '1', 'LinkId', 'SrcNodeId', 'SrcPortId',
                        'DstNodeId', 'DstPortId', {'Key': 'Val'})
Esempio n. 20
0
class LinkTest(unittest.TestCase):
    def setUp(self):
        self.target = Link('Link', '1', 'LinkId', 'SrcNodeId', 'SrcPortId',
                           'DstNodeId', 'DstPortId', {'Key': 'Val'})

    def tearDown(self):
        pass

    def test_constructor(self):
        self.assertEqual(self.target._body[Link.TYPE], 'Link')
        self.assertEqual(self.target._body[Link.VERSION], '1')
        self.assertEqual(self.target._body[Link.LINK_ID], 'LinkId')
        self.assertEqual(self.target._body[Link.SRC_NODE], 'SrcNodeId')
        self.assertEqual(self.target._body[Link.SRC_PORT], 'SrcPortId')
        self.assertEqual(self.target._body[Link.DST_NODE], 'DstNodeId')
        self.assertEqual(self.target._body[Link.DST_PORT], 'DstPortId')
        self.assertEqual(self.target._body[Link.ATTRIBUTES]['Key'], 'Val')

    def test_type(self):
        self.assertEqual(self.target.type, 'Link')

    def test_version(self):
        self.assertEqual(self.target.version, '1')

    def test_link_id(self):
        self.assertEqual(self.target.link_id, 'LinkId')

    def test_src_node(self):
        self.assertEqual(self.target.src_node, 'SrcNodeId')

    def test_src_port(self):
        self.assertEqual(self.target.src_port, 'SrcPortId')

    def test_dst_node(self):
        self.assertEqual(self.target.dst_node, 'DstNodeId')

    def test_dst_port(self):
        self.assertEqual(self.target.dst_port, 'DstPortId')

    def test_attributes(self):
        result = self.target.attributes
        self.assertEqual(len(result), 1)
        self.assertEqual(result['Key'], 'Val')

    def test_create_from_packed(self):
        packed = self.target.packed_object()
        result = Link.create_from_packed(packed)
        self.assertEqual(result.type, 'Link')
        self.assertEqual(result.version, '1')
        self.assertEqual(result.link_id, 'LinkId')
        self.assertEqual(result.src_node, 'SrcNodeId')
        self.assertEqual(result.src_port, 'SrcPortId')
        self.assertEqual(result.dst_node, 'DstNodeId')
        self.assertEqual(result.dst_port, 'DstPortId')
        self.assertEqual(len(result.attributes), 1)
        self.assertEqual(result.attributes['Key'], 'Val')

    def test_create_from_packed_without_version(self):
        packed = {
            'type': 'Link',
            'link_id': 'LinkId',
            'src_node': 'SrcNodeId',
            'src_port': 'SrcPortId',
            'dst_node': 'DstNodeId',
            'dst_port': 'DstPortId',
            'attributes': {
                'Key': 'Val'
            }
        }
        result = Link.create_from_packed(packed)
        self.assertEqual(result.type, 'Link')
        self.assertEqual(result.version, None)
        self.assertEqual(result.link_id, 'LinkId')
        self.assertEqual(result.src_node, 'SrcNodeId')
        self.assertEqual(result.src_port, 'SrcPortId')
        self.assertEqual(result.dst_node, 'DstNodeId')
        self.assertEqual(result.dst_port, 'DstPortId')
        self.assertEqual(len(result.attributes), 1)
        self.assertEqual(result.attributes['Key'], 'Val')

    def test_packed_object(self):
        result = self.target.packed_object()
        self.assertEqual(
            result, {
                'type': 'Link',
                'version': '1',
                'link_id': 'LinkId',
                'src_node': 'SrcNodeId',
                'src_port': 'SrcPortId',
                'dst_node': 'DstNodeId',
                'dst_port': 'DstPortId',
                'attributes': {
                    'Key': 'Val'
                }
            })
Esempio n. 21
0
class LinkTest(unittest.TestCase):

    def setUp(self):
        self.target = Link('Link', '1', 'LinkId', 'SrcNodeId', 'SrcPortId',
                           'DstNodeId', 'DstPortId', {'Key': 'Val'})

    def tearDown(self):
        pass

    def test_constructor(self):
        self.assertEqual(self.target._body[Link.TYPE], 'Link')
        self.assertEqual(self.target._body[Link.VERSION], '1')
        self.assertEqual(self.target._body[Link.LINK_ID], 'LinkId')
        self.assertEqual(self.target._body[Link.SRC_NODE], 'SrcNodeId')
        self.assertEqual(self.target._body[Link.SRC_PORT], 'SrcPortId')
        self.assertEqual(self.target._body[Link.DST_NODE], 'DstNodeId')
        self.assertEqual(self.target._body[Link.DST_PORT], 'DstPortId')
        self.assertEqual(self.target._body[Link.ATTRIBUTES]['Key'], 'Val')

    def test_type(self):
        self.assertEqual(self.target.type, 'Link')

    def test_version(self):
        self.assertEqual(self.target.version, '1')

    def test_link_id(self):
        self.assertEqual(self.target.link_id, 'LinkId')

    def test_src_node(self):
        self.assertEqual(self.target.src_node, 'SrcNodeId')

    def test_src_port(self):
        self.assertEqual(self.target.src_port, 'SrcPortId')

    def test_dst_node(self):
        self.assertEqual(self.target.dst_node, 'DstNodeId')

    def test_dst_port(self):
        self.assertEqual(self.target.dst_port, 'DstPortId')

    def test_attributes(self):
        result = self.target.attributes
        self.assertEqual(len(result), 1)
        self.assertEqual(result['Key'], 'Val')

    def test_create_from_packed(self):
        packed = self.target.packed_object()
        result = Link.create_from_packed(packed)
        self.assertEqual(result.type, 'Link')
        self.assertEqual(result.version, '1')
        self.assertEqual(result.link_id, 'LinkId')
        self.assertEqual(result.src_node, 'SrcNodeId')
        self.assertEqual(result.src_port, 'SrcPortId')
        self.assertEqual(result.dst_node, 'DstNodeId')
        self.assertEqual(result.dst_port, 'DstPortId')
        self.assertEqual(len(result.attributes), 1)
        self.assertEqual(result.attributes['Key'], 'Val')

    def test_create_from_packed_without_version(self):
        packed = {'type': 'Link', 'link_id': 'LinkId',
                  'src_node': 'SrcNodeId', 'src_port': 'SrcPortId',
                  'dst_node': 'DstNodeId', 'dst_port': 'DstPortId',
                  'attributes': {'Key': 'Val'}}
        result = Link.create_from_packed(packed)
        self.assertEqual(result.type, 'Link')
        self.assertEqual(result.version, None)
        self.assertEqual(result.link_id, 'LinkId')
        self.assertEqual(result.src_node, 'SrcNodeId')
        self.assertEqual(result.src_port, 'SrcPortId')
        self.assertEqual(result.dst_node, 'DstNodeId')
        self.assertEqual(result.dst_port, 'DstPortId')
        self.assertEqual(len(result.attributes), 1)
        self.assertEqual(result.attributes['Key'], 'Val')

    def test_packed_object(self):
        result = self.target.packed_object()
        self.assertEqual(result, {'type': 'Link', 'version': '1',
                                  'link_id': 'LinkId',
                                  'src_node': 'SrcNodeId',
                                  'src_port': 'SrcPortId',
                                  'dst_node': 'DstNodeId',
                                  'dst_port': 'DstPortId',
                                  'attributes': {'Key': 'Val'}})
Esempio n. 22
0
 def setUp(self):
     self.target = Link('Link', '1', 'LinkId', 'SrcNodeId', 'SrcPortId',
                        'DstNodeId', 'DstPortId', {'Key': 'Val'})