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)
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)
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)
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)
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)