Example #1
0
    def test_generate_delayed_notify_zones(self):
        # Create zones and set some of them as pending update.
        self.generate_delayed_notify_task_fixture.task()
        self.config(quota_zones=1000)
        self.config(interval=1,
                    batch_size=5,
                    group="zone_manager_task:delayed_notify")
        self._create_zones()
        zones = self._fetch_zones(tables.zones.select().where(
            tables.zones.c.delayed_notify == True))  # nopep8
        self.assertEqual(10, len(zones))

        # Run the task and check if it reset the delayed_notify flag
        with fx_pool_manager:
            pm_api = PoolManagerAPI.get_instance()
            pm_api.update_zone.reset_mock()

            self.generate_delayed_notify_task_fixture.task()

            self.assertEqual(10, pm_api.update_zone.call_count)

        zones = self._fetch_zones(tables.zones.select().where(
            tables.zones.c.delayed_notify == True))  # nopep8
        self.assertEqual(5, len(zones))

        # Run the task and check if it reset the delayed_notify flag
        with fx_pool_manager:
            self.generate_delayed_notify_task_fixture.task()
            pm_api = PoolManagerAPI.get_instance()
            self.assertEqual(20, pm_api.update_zone.call_count)

        zones = self._fetch_zones(tables.zones.select().where(
            tables.zones.c.delayed_notify == True))  # nopep8
        self.assertEqual(0, len(zones))
Example #2
0
    def test_update_zone(self, mock_prepare):
        inner_mock = mock.Mock()
        inner_mock.cast = mock.Mock(return_value=None)
        mock_prepare.return_value = inner_mock

        values = {
            'name': 'example.org.',
            'pool_id': '794ccc2c-d751-44fe-b57f-8894c9f5c842'
        }
        zone = objects.Zone.from_dict(values)
        PoolManagerAPI.get_instance().update_zone(self.admin_context, zone)

        mock_prepare.assert_called_once_with(
            topic='pool_manager.%s' % zone.pool_id)
        mock_prepare.return_value.cast.assert_called_once_with(
            self.admin_context, 'update_zone', zone=zone)
Example #3
0
    def test_update_zone(self, mock_prepare):
        inner_mock = mock.Mock()
        inner_mock.cast = mock.Mock(return_value=None)
        mock_prepare.return_value = inner_mock

        values = {
            'name': 'example.org.',
            'pool_id': '794ccc2c-d751-44fe-b57f-8894c9f5c842'
        }
        zone = objects.Zone.from_dict(values)
        PoolManagerAPI.get_instance().update_zone(self.admin_context, zone)

        mock_prepare.assert_called_once_with(topic='pool_manager.%s' %
                                             zone.pool_id)
        mock_prepare.return_value.cast.assert_called_once_with(
            self.admin_context, 'update_zone', zone=zone)
Example #4
0
    def __call__(self):
        """Fetch a list of zones with the delayed_notify flag set up to
        "batch_size"
        Call Pool Manager to emit NOTIFY transactions,
        Reset the flag.
        """
        pstart, pend = self._my_range()

        ctxt = context.DesignateContext.get_admin_context()
        ctxt.all_tenants = True

        # Select zones where "delayed_notify" is set and starting from the
        # oldest "updated_at".
        # There's an index on delayed_notify.
        criterion = self._filter_between('shard')
        criterion['delayed_notify'] = True
        zones = self.central_api.find_zones(
            ctxt,
            criterion,
            limit=self.options.batch_size,
            sort_key='updated_at',
            sort_dir='asc',
        )

        msg = _LI("Performing delayed NOTIFY for %(start)s to %(end)s: %(n)d")
        LOG.debug(msg % dict(start=pstart, end=pend, n=len(zones)))

        pm_api = PoolManagerAPI.get_instance()
        for z in zones:
            pm_api.update_zone(ctxt, z)
            z.delayed_notify = False
            self.central_api.update_zone(ctxt, z)
Example #5
0
    def test_delete_domain(self, mock_prepare):
        inner_mock = mock.Mock()
        inner_mock.cast = mock.Mock(return_value=None)
        mock_prepare.return_value = inner_mock

        values = {
            'name': 'example.org.',
            'pool_id': '794ccc2c-d751-44fe-b57f-8894c9f5c842'
        }
        domain = objects.Domain.from_dict(values)
        PoolManagerAPI.get_instance().delete_domain(self.admin_context, domain)

        mock_prepare.assert_called_once_with(topic='pool_manager.%s' %
                                             domain.pool_id)
        mock_prepare.return_value.cast.assert_called_once_with(
            self.admin_context, 'delete_domain', domain=domain)
Example #6
0
    def test_delete_domain(self, mock_prepare):
        inner_mock = mock.Mock()
        inner_mock.cast = mock.Mock(return_value=None)
        mock_prepare.return_value = inner_mock

        values = {
            'name': 'example.org.',
            'pool_id': '794ccc2c-d751-44fe-b57f-8894c9f5c842'
        }
        domain = objects.Domain.from_dict(values)
        PoolManagerAPI.get_instance().delete_domain(self.admin_context, domain)

        mock_prepare.assert_called_once_with(
            topic='pool_manager.%s' % domain.pool_id)
        mock_prepare.return_value.cast.assert_called_once_with(
            self.admin_context, 'delete_domain', domain=domain)
Example #7
0
    def __call__(self):
        """Fetch a list of zones with the delayed_notify flag set up to
        "batch_size"
        Call Pool Manager to emit NOTIFY transactions,
        Reset the flag.
        """
        pstart, pend = self._my_range()

        ctxt = context.DesignateContext.get_admin_context()
        ctxt.all_tenants = True

        # Select zones where "delayed_notify" is set and starting from the
        # oldest "updated_at".
        # There's an index on delayed_notify.
        criterion = self._filter_between('shard')
        criterion['delayed_notify'] = True
        zones = self.central_api.find_zones(
            ctxt,
            criterion,
            limit=self.options.batch_size,
            sort_key='updated_at',
            sort_dir='asc',
        )

        msg = _LI("Performing delayed NOTIFY for %(start)s to %(end)s: %(n)d")
        LOG.debug(msg % dict(start=pstart, end=pend, n=len(zones)))

        pm_api = PoolManagerAPI.get_instance()
        for z in zones:
            pm_api.update_zone(ctxt, z)
            z.delayed_notify = False
            self.central_api.update_zone(ctxt, z)
Example #8
0
    def test_update_status(self, mock_prepare):
        inner_mock = mock.Mock()
        inner_mock.cast = mock.Mock(return_value=None)
        mock_prepare.return_value = inner_mock

        values = {
            'name': 'example.org.',
            'pool_id': '794ccc2c-d751-44fe-b57f-8894c9f5c842'
        }
        zone = objects.Zone.from_dict(values)
        values = {
            'host': '127.0.0.1',
            'port': 53
        }
        nameserver = objects.PoolNameserver.from_dict(values)
        PoolManagerAPI.get_instance().update_status(
            self.admin_context, zone, nameserver, 'SUCCESS', 1)

        mock_prepare.assert_called_once_with(
            topic='pool_manager.%s' % zone.pool_id)
        mock_prepare.return_value.cast.assert_called_once_with(
            self.admin_context, 'update_status', zone=zone,
            nameserver=nameserver, status='SUCCESS', actual_serial=1)
Example #9
0
    def test_update_status(self, mock_prepare):
        inner_mock = mock.Mock()
        inner_mock.cast = mock.Mock(return_value=None)
        mock_prepare.return_value = inner_mock

        values = {
            'name': 'example.org.',
            'pool_id': '794ccc2c-d751-44fe-b57f-8894c9f5c842'
        }
        domain = objects.Domain.from_dict(values)
        values = {
            'host': '127.0.0.1',
            'port': '53'
        }
        server = objects.PoolServer.from_dict(values)
        PoolManagerAPI.get_instance().update_status(
            self.admin_context, domain, server, 'SUCCESS', 1)

        mock_prepare.assert_called_once_with(
            topic='pool_manager.%s' % domain.pool_id)
        mock_prepare.return_value.cast.assert_called_once_with(
            self.admin_context, 'update_status', domain=domain,
            server=server, status='SUCCESS', actual_serial=1)
Example #10
0
    def test_generate_delayed_notify_zones(self):
        # Create zones and set some of them as pending update.
        self.generate_delayed_notify_task_fixture.task()
        self.config(quota_zones=1000)
        self.config(
            interval=1,
            batch_size=5,
            group="zone_manager_task:delayed_notify"
        )
        self._create_zones()
        zones = self._fetch_zones(tables.zones.select().where(
            tables.zones.c.delayed_notify == True))  # nopep8
        self.assertEqual(10, len(zones))

        # Run the task and check if it reset the delayed_notify flag
        with fx_pool_manager:
            pm_api = PoolManagerAPI.get_instance()
            pm_api.update_zone.reset_mock()

            self.generate_delayed_notify_task_fixture.task()

            self.assertEqual(10, pm_api.update_zone.call_count)

        zones = self._fetch_zones(tables.zones.select().where(
            tables.zones.c.delayed_notify == True))  # nopep8
        self.assertEqual(5, len(zones))

        # Run the task and check if it reset the delayed_notify flag
        with fx_pool_manager:
            self.generate_delayed_notify_task_fixture.task()
            pm_api = PoolManagerAPI.get_instance()
            self.assertEqual(20, pm_api.update_zone.call_count)

        zones = self._fetch_zones(tables.zones.select().where(
            tables.zones.c.delayed_notify == True))  # nopep8
        self.assertEqual(0, len(zones))