def _test_schedule_bind_bgp_speaker(self, agents, bgp_speaker_id):
        scheduler = bgp_dras.ChanceScheduler()
        scheduler.resource_filter.bind(self.ctx, agents, bgp_speaker_id)
        results = self._get_dragent_bgp_speaker_bindings(bgp_speaker_id)

        for result in results:
            self.assertEqual(bgp_speaker_id, result.bgp_speaker_id)
    def _test_schedule_bind_bgp_speaker(self, agents, bgp_speaker_id):
        scheduler = bgp_dras.ChanceScheduler()
        scheduler.resource_filter.bind(self.ctx, agents, bgp_speaker_id)
        results = self.ctx.session.query(
            bgp_dras_db.BgpSpeakerDrAgentBinding).filter_by(
                bgp_speaker_id=bgp_speaker_id).all()

        for result in results:
            self.assertEqual(bgp_speaker_id, result.bgp_speaker_id)
 def setUp(self):
     super(TestSchedulerCallback, self).setUp()
     bgp_notify_p = mock.patch('neutron_dynamic_routing.api.rpc.'
                               'agentnotifiers.bgp_dr_rpc_agent_api.'
                               'BgpDrAgentNotifyApi')
     bgp_notify_p.start()
     rpc_conn_p = mock.patch('neutron_lib.rpc.Connection')
     rpc_conn_p.start()
     self.plugin = bgp_plugin.BgpPlugin()
     self.scheduler = bgp_dras.ChanceScheduler()
 def setUp(self):
     super(TestSchedulerCallback, self).setUp()
     bgp_notify_p = mock.patch('neutron_dynamic_routing.api.rpc.'
                               'agentnotifiers.bgp_dr_rpc_agent_api.'
                               'BgpDrAgentNotifyApi')
     bgp_notify_p.start()
     rpc_conn_p = mock.patch('neutron.common.rpc.create_connection')
     rpc_conn_p.start()
     admin_ctx_p = mock.patch('neutron_lib.context.get_admin_context')
     admin_ctx_p = mock.patch('neutron_lib.context.get_admin_context')
     self.admin_ctx_m = admin_ctx_p.start()
     self.admin_ctx_m.return_value = self.ctx
     self.plugin = bgp_plugin.BgpPlugin()
     self.scheduler = bgp_dras.ChanceScheduler()
 def test__register_callbacks(self):
     with mock.patch.object(registry, 'subscribe') as subscribe:
         scheduler = bgp_dras.ChanceScheduler()
         expected_calls = [
             mock.call(scheduler.schedule_bgp_speaker_callback,
                       dr_resources.BGP_SPEAKER, events.AFTER_CREATE),
         ]
         self.assertEqual(subscribe.call_args_list, expected_calls)
     with mock.patch.object(registry, 'subscribe') as subscribe:
         scheduler = bgp_dras.WeightScheduler()
         expected_calls = [
             mock.call(scheduler.schedule_bgp_speaker_callback,
                       dr_resources.BGP_SPEAKER, events.AFTER_CREATE),
         ]
         self.assertEqual(subscribe.call_args_list, expected_calls)
    def _test_auto_schedule(self, host_index):
        scheduler = bgp_dras.ChanceScheduler()
        self.ctx = context.get_admin_context()
        msg = 'host_index = %s' % host_index

        # create hosts
        hosts = [
            '%s-agent-%s' % (host_index, i) for i in range(self.host_count)
        ]
        bgp_dragents = self._create_and_set_agents_down(
            hosts, self.agent_count, self.down_agent_count)

        # create bgp_speakers
        self._bgp_speakers = [
            '%s-bgp-speaker-%s' % (host_index, i)
            for i in range(self.bgp_speaker_count)
        ]
        self._save_bgp_speakers(self._bgp_speakers)

        # pre schedule the bgp_speakers to the agents defined in
        # self.hosted_bgp_speakers before calling auto_schedule_bgp_speaker
        for agent, bgp_speakers in self.hosted_bgp_speakers.items():
            agent_index = self._extract_index(agent)
            for bgp_speaker in bgp_speakers:
                bs_index = self._extract_index(bgp_speaker)
                scheduler.bind(self.ctx, [bgp_dragents[agent_index]],
                               self._bgp_speakers[bs_index])

        retval = scheduler.schedule_unscheduled_bgp_speakers(
            self.ctx, hosts[host_index])
        self.assertEqual(self.expected_schedule_return_value,
                         retval,
                         message=msg)

        if self.agent_count:
            agent_id = bgp_dragents[host_index].id
            hosted_bgp_speakers = self._get_hosted_bgp_speakers_on_dragent(
                agent_id)
            hosted_bs_ids = [
                self._strip_host_index(net) for net in hosted_bgp_speakers
            ]
            expected_hosted_bgp_speakers = self.expected_hosted_bgp_speakers[
                'agent-%s' % host_index]
            self.assertItemsEqual(hosted_bs_ids, expected_hosted_bgp_speakers,
                                  msg)
    def test_auto_schedule_bgp_speaker(self):
        scheduler = bgp_dras.ChanceScheduler()
        if self.bgp_speaker_present:
            down_agent_count = 1 if self.agent_down else 0
            agents = self._create_and_set_agents_down(
                ['host-a'], down_agent_count=down_agent_count)
            if self.scheduled_already:
                self._test_schedule_bind_bgp_speaker(agents,
                                                     self.bgp_speaker_id)

        expected_hosted_agents = (1 if self.bgp_speaker_present
                                  and self.valid_host else 0)
        host = "host-a" if self.valid_host else "host-b"
        observed_ret_value = scheduler.schedule_unscheduled_bgp_speakers(
            self.ctx, host)
        self.assertEqual(self.expected_result, observed_ret_value)
        hosted_agents = self.ctx.session.query(
            bgp_dras_db.BgpSpeakerDrAgentBinding).all()
        self.assertEqual(expected_hosted_agents, len(hosted_agents))