Пример #1
0
    def test_update_zone(self, dig):
        slappy = SlappyClient(dig)
        self._add_zone_to_master(dig)
        self._add_zone_to_target_via_slappy(dig, slappy)

        # bump the serial of the zone on the master
        # note: rndc reload needs to see the zone file timestamp has changed
        time.sleep(1)
        self.zone.serial += 1
        self._update_zone_on_master(dig)

        # notify slappy to pull down the new zone
        query = slappy.notify(name=self.zone.name)
        self.assertEqual(query.rcode(), NOERROR)

        # if slappy hasn't added the zone within a second, this test will fail
        time.sleep(1)

        query = dig(
            zone_name=self.zone.name,
            nameserver=cfg.CONF.slappy.host,
            rdatatype=ANY,
            port=53,
        )
        self._check_serial(query, expected=self.zone.serial)
Пример #2
0
    def _add_zone_to_target_via_slappy(self, dig, slappy):
        query = slappy.create_zone(name=self.zone.name)
        self.assertEqual(query.rcode(), NOERROR)

        query = dig(
            zone_name=self.zone.name,
            nameserver=cfg.CONF.slappy.host,
            rdatatype=ANY,
            port=53,
        )
        self.assertEqual(query.rcode(), NOERROR)
        self._check_serial(query, expected=self.zone.serial)
Пример #3
0
    def _update_zone_on_master(self, dig):
        _, _, ret = self.master.write_zone_file(self.zone)
        self.assertEqual(ret, 0)
        _, _, ret = self.master.reload(self.zone)
        self.assertEqual(ret, 0)

        query = dig(
            zone_name=self.zone.name,
            nameserver=cfg.CONF.master.host,
            port=cfg.CONF.master.port,
            rdatatype=ANY,
        )
        self.assertEqual(query.rcode(), NOERROR)
        self._check_serial(query, expected=self.zone.serial)
Пример #4
0
    def test_stats(self, dig):
        result = dig(
            zone_name='/stats.',
            nameserver=cfg.CONF.slappy.host,
            rdatatype=dns.rdatatype.ANY,
            port=cfg.CONF.slappy.port,
        )
        self.assertEqual(result.rcode(), dns.rcode.NOERROR)

        # sanity-checking our own dns request
        self.assertEqual(len(result.question), 1)
        self.assertEqual(str(result.question[0].name), '/stats.')
        self.assertEqual(result.question[0].rdclass, dns.rdataclass.IN)
        self.assertEqual(result.question[0].rdtype, dns.rdatatype.ANY)

        # check the recordset
        self.assertEqual(len(result.answer), 1)
        self.assertEqual(str(result.answer[0].name), '/stats.')

        # the stats data is provided "key: val" strings in txt records.
        # convert the list of txt records to a dictionary.
        stats_data = {}
        for record in result.answer[0]:
            key, val = str(record).strip('"').split(':')
            stats_data[key.strip()] = val.strip()

        expected_keys = set([
            "uptime",
            "goroutines",
            "memory",
            "nextGC",
            "queries",
            "addzones",
            "reloads",
            "delzones",
            "rndc_attempts",
            "rndc_success",
        ])
        self.assertEqual(set(stats_data.keys()), expected_keys)

        # do some basic validation of stats data
        self.assertGreaterEqual(int(stats_data['uptime']), 0)
        self.assertGreaterEqual(int(stats_data['goroutines']), 0)
        self.assertGreaterEqual(int(stats_data['queries']), 0)
        self.assertGreaterEqual(int(stats_data['addzones']), 0)
        self.assertGreaterEqual(int(stats_data['reloads']), 0)
        self.assertGreaterEqual(int(stats_data['delzones']), 0)
        self.assertGreaterEqual(int(stats_data['rndc_attempts']), 0)
        self.assertGreaterEqual(int(stats_data['rndc_success']), 0)
Пример #5
0
    def test_delete_zone(self, dig):
        slappy = SlappyClient(dig)
        self._add_zone_to_master(dig)
        self._add_zone_to_target_via_slappy(dig, slappy)

        query = slappy.delete_zone(name=self.zone.name)
        self.assertEqual(query.rcode(), NOERROR)

        query = dig(
            zone_name=self.zone.name,
            nameserver=cfg.CONF.slappy.host,
            port=53,
            rdatatype=ANY,
        )
        self.assertEqual(query.rcode(), REFUSED)