Esempio n. 1
0
    def test_multi_isl_port_down(self):
        sw_alpha = make_datapath_id(1)
        sw_beta = make_datapath_id(2)
        sw_gamma = make_datapath_id(3)

        isl_alpha_beta = model.InterSwitchLink(
            model.NetworkEndpoint(sw_alpha, 2),
            model.NetworkEndpoint(sw_beta, 2), None)
        isl_beta_alpha = isl_alpha_beta.reversed()
        isl_beta_gamma = model.InterSwitchLink(
            model.NetworkEndpoint(sw_beta, 2),
            model.NetworkEndpoint(sw_gamma, 3), None)
        isl_gamma_beta = isl_beta_gamma.reversed()

        for dpid in sw_alpha, sw_beta, sw_gamma:
            self.assertTrue(make_switch_add(dpid))

        self.assertTrue(share.exec_isl_discovery(isl_alpha_beta))
        self.assertTrue(share.exec_isl_discovery(isl_beta_alpha))
        self.assertTrue(share.exec_isl_discovery(isl_beta_gamma))
        self.assertTrue(share.exec_isl_discovery(isl_gamma_beta))

        self.assertTrue(make_port_down(isl_alpha_beta.dest))
        self.ensure_isl_props(neo4j_connect, isl_alpha_beta,
                              ISL_STATUS_PROPS_HALF_UP)
        self.ensure_isl_props(neo4j_connect, isl_beta_alpha,
                              ISL_STATUS_PROPS_DOWN)
        self.ensure_isl_props(neo4j_connect, isl_beta_gamma,
                              ISL_STATUS_PROPS_DOWN)
        self.ensure_isl_props(neo4j_connect, isl_gamma_beta,
                              ISL_STATUS_PROPS_HALF_UP)
Esempio n. 2
0
    def test_moved_isl_should_be_marked(self):
        self.setup_initial_data()
        src_endpoint, dst_endpoint = self.src_endpoint, self.dst_endpoint
        forward = model.InterSwitchLink(src_endpoint, dst_endpoint, None)

        make_isl_moved(forward)
        self.ensure_isl_props(neo4j_connect, forward, ISL_STATUS_PROPS_MOVED)
Esempio n. 3
0
class Abstract(share.AbstractTest):
    endpoint_alpha = model.NetworkEndpoint(share.make_datapath_id(1), 4)
    endpoint_beta = model.NetworkEndpoint(share.make_datapath_id(2), 6)
    endpoint_gamma = model.NetworkEndpoint(share.make_datapath_id(3), 8)

    isl_alpha_beta = model.InterSwitchLink(
        model.IslPathNode(endpoint_alpha.dpid, endpoint_alpha.port),
        model.IslPathNode(endpoint_beta.dpid, endpoint_beta.port))
    isl_beta_alpha = isl_alpha_beta.reversed()

    def setUp(self):
        super(Abstract, self).setUp()

        for isl in (self.isl_alpha_beta, self.isl_beta_alpha):
            isl_info = share.isl_info_payload(isl)
            command = share.command(isl_info)
            self.assertTrue(messageclasses.MessageItem(command).handle())

    def take_response(self, **kwargs):
        return self.take_kafka_response(config.KAFKA_NORTHBOUND_TOPIC,
                                        **kwargs)

    def _ensure_props_match(self, link_props, props):
        with self.open_neo4j_session() as tx:
            persistent = link_props_utils.read(tx, link_props)
            self.assertEqual(props, persistent.props)

    def _put(self, subject):
        request = share.link_props_request(subject)
        payload = share.link_props_put_payload(request)
        self.feed_service(share.command(payload))
        return payload
Esempio n. 4
0
    def test_isl_status(self):
        src_endpoint, dst_endpoint = self.src_endpoint, self.dst_endpoint
        forward = model.InterSwitchLink(src_endpoint, dst_endpoint, None)
        reverse = forward.reversed()

        make_switch_add(src_endpoint.dpid)
        make_switch_add(dst_endpoint.dpid)

        status_down = {
            'actual': ISL_STATUS_INACTIVE,
            'status': ISL_STATUS_INACTIVE
        }
        status_half_up = {
            'actual': ISL_STATUS_ACTIVE,
            'status': ISL_STATUS_INACTIVE
        }
        status_up = {'actual': ISL_STATUS_ACTIVE, 'status': ISL_STATUS_ACTIVE}

        # 0 0
        self.assertTrue(share.exec_isl_discovery(forward))

        # 1 0
        self.ensure_isl_props(neo4j_connect, forward, status_half_up)
        self.ensure_isl_props(neo4j_connect, reverse, status_down)
        self.assertTrue(share.exec_isl_discovery(reverse))

        # 1 1
        self.ensure_isl_props(neo4j_connect, forward, status_up)
        self.ensure_isl_props(neo4j_connect, reverse, status_up)
        self.assertTrue(make_isl_failed(src_endpoint))

        # 0 1
        self.ensure_isl_props(neo4j_connect, forward, status_down)
        self.ensure_isl_props(neo4j_connect, reverse, status_half_up)
        self.assertTrue(share.exec_isl_discovery(forward))

        # 1 1
        self.ensure_isl_props(neo4j_connect, forward, status_up)
        self.ensure_isl_props(neo4j_connect, reverse, status_up)
        self.assertTrue(make_isl_failed(dst_endpoint))

        # 1 0
        self.ensure_isl_props(neo4j_connect, forward, status_half_up)
        self.ensure_isl_props(neo4j_connect, reverse, status_down)
        self.assertTrue(share.exec_isl_discovery(reverse))

        # 1 1
        self.ensure_isl_props(neo4j_connect, forward, status_up)
        self.ensure_isl_props(neo4j_connect, reverse, status_up)
        self.assertTrue(make_isl_failed(src_endpoint))

        # 0 1
        self.ensure_isl_props(neo4j_connect, forward, status_down)
        self.ensure_isl_props(neo4j_connect, reverse, status_half_up)
        self.assertTrue(make_isl_failed(dst_endpoint))

        # 0 0
        self.ensure_isl_props(neo4j_connect, forward, status_down)
        self.ensure_isl_props(neo4j_connect, reverse, status_down)
Esempio n. 5
0
    def _set_isl_cost(self, value):
        with neo4j_connect.begin() as tx:
            isl = model.InterSwitchLink(self.src_endpoint, self.dst_endpoint,
                                        None)
            isl_utils.set_cost(tx, isl, value)
            isl_utils.set_cost(tx, isl.reversed(), value)

        with neo4j_connect.begin() as tx:
            props = {'cost': value}
            self.ensure_isl_props(tx, isl, props)
            self.ensure_isl_props(tx, isl.reversed(), props)
Esempio n. 6
0
    def test_port_down_with_cost_as_string(self):
        sw_alpha = make_datapath_id(1)
        sw_beta = make_datapath_id(2)
        isl_alpha_beta = model.InterSwitchLink(
            model.NetworkEndpoint(sw_alpha, 2),
            model.NetworkEndpoint(sw_beta, 2), None)
        self.assertTrue(share.exec_isl_discovery(isl_alpha_beta))

        with neo4j_connect.begin() as tx:
            isl_utils.set_props(tx, isl_alpha_beta, {"cost": "10"})

        self.assertTrue(make_port_down(isl_alpha_beta.source))
Esempio n. 7
0
def switch_unplug(tx, dpid):
    logging.info("Deactivate all ISL to/from %s", dpid)

    for db_link in fetch_by_datapath(tx, dpid):
        source = model.NetworkEndpoint(db_link['src_switch'],
                                       db_link['src_port'])
        dest = model.NetworkEndpoint(db_link['dst_switch'],
                                     db_link['dst_port'])
        isl = model.InterSwitchLink(source, dest, db_link['actual'])
        logging.debug("Found ISL: %s", isl)

        set_active_field(tx, db.neo_id(db_link), 'inactive')
        update_status(tx, isl)
Esempio n. 8
0
def switch_unplug(tx, dpid, mtime=True):
    logging.info("Deactivate all ISL to/from %s", dpid)

    involved = list(fetch_by_datapath(tx, dpid))
    _lock_affected_switches(tx, involved, dpid)

    for db_link in involved:
        source = model.IslPathNode(db_link['src_switch'], db_link['src_port'])
        dest = model.IslPathNode(db_link['dst_switch'], db_link['dst_port'])
        isl = model.InterSwitchLink(source, dest, db_link['actual'])
        logging.debug("Found ISL: %s", isl)

        set_active_field(tx, db.neo_id(db_link), 'inactive')
        update_status(tx, isl, mtime=mtime)
Esempio n. 9
0
    def test_drop(self):
        lookup_mask = model.LinkProps(self.endpoint_alpha, self.endpoint_beta)

        with self.open_neo4j_session() as tx:
            isl_db = isl_utils.fetch(
                tx,
                model.InterSwitchLink(self.endpoint_alpha, self.endpoint_beta))
            tx.graph.pull(isl_db)
            self.assertEqual('alpha-beta', isl_db['name'])

        self._drop(lookup_mask)

        self._ensure_missing(lookup_mask)
        self._ensure_exists(
            model.LinkProps(self.endpoint_alpha, self.endpoint_gamma),
            model.LinkProps(self.endpoint_beta, self.endpoint_gamma))

        with self.open_neo4j_session() as tx:
            isl_db = isl_utils.fetch(
                tx,
                model.InterSwitchLink(self.endpoint_alpha, self.endpoint_beta))
            tx.graph.pull(isl_db)
            self.assertNotIn('name', isl_db)
Esempio n. 10
0
    def _cost_raise_on_port_down(self, initial, down, recover):
        src_endpoint, dst_endpoint = self.src_endpoint, self.dst_endpoint
        isl = model.InterSwitchLink(src_endpoint, dst_endpoint, None)

        self.ensure_isl_costs((src_endpoint, initial), (dst_endpoint, initial))

        self.assertTrue(make_port_down(src_endpoint),
                        'Port DOWN command have failed')

        self.ensure_isl_costs((src_endpoint, down), (dst_endpoint, down))

        self.assertTrue(share.exec_isl_discovery(isl),
                        'ISL discovery command have failed')

        self.ensure_isl_costs((src_endpoint, recover), (dst_endpoint, recover))
Esempio n. 11
0
    def test_port_down_without_isl(self):
        sw_alpha = make_datapath_id(1)
        sw_beta = make_datapath_id(2)
        isl_alpha_beta = model.InterSwitchLink(
            model.NetworkEndpoint(sw_alpha, 2),
            model.NetworkEndpoint(sw_beta, 2), None)
        isl_beta_alpha = isl_alpha_beta.reversed()

        self.assertTrue(make_switch_add(sw_alpha))
        self.assertTrue(make_port_down(isl_alpha_beta.source))

        self.assertRaises(exc.DBRecordNotFound, isl_utils.fetch, neo4j_connect,
                          isl_alpha_beta)
        self.assertRaises(exc.DBRecordNotFound, isl_utils.fetch, neo4j_connect,
                          isl_beta_alpha)
Esempio n. 12
0
    def test_no_cost_raise_on_isl_down(self):
        self.setup_initial_data()

        src_endpoint, dst_endpoint = self.src_endpoint, self.dst_endpoint
        isl = model.InterSwitchLink(src_endpoint, dst_endpoint, None)

        self.ensure_isl_costs((src_endpoint, 10), (dst_endpoint, 10))

        self.assertTrue(make_isl_failed(src_endpoint),
                        'Port DOWN command have failed')

        self.ensure_isl_costs((src_endpoint, 10), (dst_endpoint, 10))

        self.assertTrue(share.exec_isl_discovery(isl),
                        'ISL discovery command have failed')

        self.ensure_isl_costs((src_endpoint, 10), (dst_endpoint, 10))
Esempio n. 13
0
    def test_switch_unplug(self):
        src_endpoint, dst_endpoint = self.src_endpoint, self.dst_endpoint
        forward = model.InterSwitchLink(src_endpoint, dst_endpoint, None)
        reverse = forward.reversed()

        self.assertTrue(make_switch_add(src_endpoint.dpid))
        self.assertTrue(make_switch_add(dst_endpoint.dpid))
        self.assertTrue(share.exec_isl_discovery(forward))
        self.assertTrue(share.exec_isl_discovery(reverse))

        self.ensure_isl_props(neo4j_connect, forward, ISL_STATUS_PROPS_UP)
        self.ensure_isl_props(neo4j_connect, reverse, ISL_STATUS_PROPS_UP)

        self.assertTrue(make_switch_remove(src_endpoint.dpid))

        self.ensure_isl_props(neo4j_connect, forward, ISL_STATUS_PROPS_DOWN)
        self.ensure_isl_props(neo4j_connect, reverse, ISL_STATUS_PROPS_HALF_UP)
Esempio n. 14
0
    def test_time_update_on_isl_discovery(self):
        sw_alpha = make_datapath_id(1)
        sw_beta = make_datapath_id(2)
        isl_alpha_beta = model.InterSwitchLink(
            model.NetworkEndpoint(sw_alpha, 2),
            model.NetworkEndpoint(sw_beta, 2), None)

        self.assertTrue(make_switch_add(sw_alpha))
        self.assertTrue(make_switch_add(sw_beta))

        update_point_a = model.TimeProperty.now(milliseconds_precission=True)

        message = share.command(share.payload_isl_info(isl_alpha_beta))
        message['timestamp'] = update_point_a.as_java_timestamp()
        self.assertTrue(messageclasses.MessageItem(**message).handle())

        recovered = model.TimeProperty.new_from_java_timestamp(
            message['timestamp'])
        self.assertEquals(update_point_a.value, recovered.value)

        with neo4j_connect.begin() as tx:
            isl = isl_utils.fetch(tx, isl_alpha_beta)
            neo4j_connect.pull(isl)

            db_ctime = model.TimeProperty.new_from_db(isl['time_create'])
            self.assertEqual(update_point_a.value, db_ctime.value)

            db_mtime = model.TimeProperty.new_from_db(isl['time_modify'])
            self.assertEqual(update_point_a.value, db_mtime.value)

        # one more update
        update_point_b = model.TimeProperty.now(milliseconds_precission=True)
        self.assertNotEqual(update_point_a.value, update_point_b.value)

        message['timestamp'] = update_point_b.as_java_timestamp()
        self.assertTrue(messageclasses.MessageItem(**message).handle())
        with neo4j_connect.begin() as tx:
            isl = isl_utils.fetch(tx, isl_alpha_beta)
            neo4j_connect.pull(isl)

            db_ctime = model.TimeProperty.new_from_db(isl['time_create'])
            self.assertEqual(update_point_a.value, db_ctime.value)

            db_mtime = model.TimeProperty.new_from_db(isl['time_modify'])
            self.assertEqual(update_point_b.value, db_mtime.value)
Esempio n. 15
0
    def test_isl_without_life_cycle_fields(self):
        sw_alpha = share.make_datapath_id(1)
        sw_beta = share.make_datapath_id(2)
        isl_alpha_beta = model.InterSwitchLink(
                model.IslPathNode(sw_alpha, 2),
                model.IslPathNode(sw_beta, 2), None)

        self.assertTrue(make_switch_add(sw_alpha))
        self.assertTrue(make_switch_add(sw_beta))

        self.assertTrue(share.feed_isl_discovery(isl_alpha_beta))

        with neo4j_connect.begin() as tx:
            neo4j_connect.pull(isl_utils.fetch(tx, isl_alpha_beta))
            isl_utils.set_props(
                    tx, isl_alpha_beta,
                    {'time_create': None, 'time_modify': None})

        self.assertTrue(share.feed_isl_discovery(isl_alpha_beta))
Esempio n. 16
0
class Abstract(share.AbstractTest):
    endpoint_alpha = model.NetworkEndpoint(share.make_datapath_id(1), 4)
    endpoint_beta = model.NetworkEndpoint(share.make_datapath_id(2), 6)
    endpoint_gamma = model.NetworkEndpoint(share.make_datapath_id(3), 8)

    isl_alpha_beta = model.InterSwitchLink(
        model.IslPathNode(endpoint_alpha.dpid, endpoint_alpha.port),
        model.IslPathNode(endpoint_beta.dpid, endpoint_beta.port))
    isl_beta_alpha = isl_alpha_beta.reversed()

    def setUp(self):
        super(Abstract, self).setUp()

        for isl in (self.isl_alpha_beta, self.isl_beta_alpha):
            isl_info = share.isl_info_payload(isl)
            command = share.command(isl_info)
            self.assertTrue(messageclasses.MessageItem(command).handle())

    def _put(self, subject):
        request = share.link_props_request(subject)
        payload = share.link_props_put_payload(request)
        self.feed_service(share.command(payload))
        return payload

    def _get_kafka_response(self,
                            offset=0,
                            expect_class=message_utils.MT_INFO):
        kafka_backlog = share.env.kafka_producer_stub.backlog

        self.assertTrue(offset < len(kafka_backlog))

        kafka_record = kafka_backlog[offset]
        self.assertEqual(config.KAFKA_NORTHBOUND_TOPIC, kafka_record.topic)

        message = json.loads(kafka_record.payload)
        self.assertEqual(expect_class, message['clazz'])

        return message['payload']
Esempio n. 17
0
def make_isl_pair(source, dest):
    forward = model.InterSwitchLink(source, dest, None)
    share.exec_isl_discovery(forward)
    share.exec_isl_discovery(forward.reversed())
Esempio n. 18
0
    def test_isl_replug(self):
        sw_alpha = make_datapath_id(1)
        sw_beta = make_datapath_id(2)
        sw_gamma = make_datapath_id(3)
        sw_delta = make_datapath_id(4)

        isl_alpha_beta = model.InterSwitchLink(
            model.NetworkEndpoint(sw_alpha, 2),
            model.NetworkEndpoint(sw_beta, 2), None)
        isl_beta_alpha = isl_alpha_beta.reversed()
        isl_beta_gamma = model.InterSwitchLink(
            model.NetworkEndpoint(sw_beta, 2),
            model.NetworkEndpoint(sw_gamma, 3), None)
        isl_gamma_beta = isl_beta_gamma.reversed()
        isl_gamma_delta = model.InterSwitchLink(
            model.NetworkEndpoint(sw_gamma, 3),
            model.NetworkEndpoint(sw_delta, 3), None)
        isl_delta_gamma = isl_gamma_delta.reversed()

        for dpid in sw_alpha, sw_beta, sw_gamma, sw_delta:
            self.assertTrue(make_switch_add(dpid))

        self.assertTrue(share.exec_isl_discovery(isl_alpha_beta))
        self.assertTrue(share.exec_isl_discovery(isl_beta_alpha))
        self.assertTrue(share.exec_isl_discovery(isl_gamma_delta))
        self.assertTrue(share.exec_isl_discovery(isl_delta_gamma))

        self.ensure_isl_props(neo4j_connect, isl_alpha_beta,
                              ISL_STATUS_PROPS_UP)
        self.ensure_isl_props(neo4j_connect, isl_beta_alpha,
                              ISL_STATUS_PROPS_UP)
        self.ensure_isl_props(neo4j_connect, isl_gamma_delta,
                              ISL_STATUS_PROPS_UP)
        self.ensure_isl_props(neo4j_connect, isl_delta_gamma,
                              ISL_STATUS_PROPS_UP)

        self.assertRaises(exc.DBRecordNotFound, isl_utils.fetch, neo4j_connect,
                          isl_beta_gamma)
        self.assertRaises(exc.DBRecordNotFound, isl_utils.fetch, neo4j_connect,
                          isl_gamma_beta)

        # replug
        self.assertTrue(share.exec_isl_discovery(isl_beta_gamma))
        # alpha <-> beta is down
        self.ensure_isl_props(neo4j_connect, isl_alpha_beta,
                              ISL_STATUS_PROPS_HALF_UP)
        self.ensure_isl_props(neo4j_connect, isl_beta_alpha,
                              ISL_STATUS_PROPS_DOWN)
        # gamma -> delta is down
        self.ensure_isl_props(neo4j_connect, isl_gamma_delta,
                              ISL_STATUS_PROPS_DOWN)
        self.ensure_isl_props(neo4j_connect, isl_delta_gamma,
                              ISL_STATUS_PROPS_HALF_UP)
        # beta <-> gamma is half up
        self.ensure_isl_props(neo4j_connect, isl_beta_gamma,
                              ISL_STATUS_PROPS_HALF_UP)
        self.ensure_isl_props(neo4j_connect, isl_gamma_beta,
                              ISL_STATUS_PROPS_DOWN)

        self.assertTrue(share.exec_isl_discovery(isl_gamma_beta))
        # alpha <-> beta is down
        self.ensure_isl_props(neo4j_connect, isl_alpha_beta,
                              ISL_STATUS_PROPS_HALF_UP)
        self.ensure_isl_props(neo4j_connect, isl_beta_alpha,
                              ISL_STATUS_PROPS_DOWN)
        # gamma -> delta is down
        self.ensure_isl_props(neo4j_connect, isl_gamma_delta,
                              ISL_STATUS_PROPS_DOWN)
        self.ensure_isl_props(neo4j_connect, isl_delta_gamma,
                              ISL_STATUS_PROPS_HALF_UP)
        # beta <-> gamma is up
        self.ensure_isl_props(neo4j_connect, isl_beta_gamma,
                              ISL_STATUS_PROPS_UP)
        self.ensure_isl_props(neo4j_connect, isl_gamma_beta,
                              ISL_STATUS_PROPS_UP)