return obj;
}
-static bool shouldDoRRSets(HttpRequest* req)
+static bool boolFromHttpRequest(HttpRequest* req, const std::string& var)
{
- if (req->getvars.count("rrsets") == 0 || req->getvars["rrsets"] == "true") {
+ if (req->getvars.count(var) == 0 || req->getvars[var] == "true") {
return true;
}
- if (req->getvars["rrsets"] == "false") {
+ if (req->getvars[var] == "false") {
return false;
}
- throw ApiException("'rrsets' request parameter value '" + req->getvars["rrsets"] + "' is not supported");
+ throw ApiException("'" + var + "' request parameter value '" + req->getvars[var] + "' is not supported");
}
static void fillZone(UeberBackend& backend, const ZoneName& zonename, HttpResponse* resp, HttpRequest* req)
}
doc["slave_tsig_key_ids"] = tsig_secondary_keys;
- if (shouldDoRRSets(req)) {
+ if (boolFromHttpRequest(req, "rrsets")) {
vector<DNSResourceRecord> records;
vector<Comment> comments;
if (req->getvars.count("rrset_type") != 0) {
qType = req->getvars["rrset_type"];
}
- domainInfo.backend->lookup(qType, qName, static_cast<int>(domainInfo.id));
+ bool include_disabled = boolFromHttpRequest(req, "include_disabled");
+ domainInfo.backend->APILookup(qType, qName, static_cast<int>(domainInfo.id), nullptr, include_disabled);
}
while (domainInfo.backend->get(resourceRecord)) {
if (resourceRecord.qtype.getCode() == 0) {
bool dname_seen = false;
bool ns_seen = false;
- domainInfo.backend->lookup(QType(QType::ANY), qname, static_cast<int>(domainInfo.id));
+ domainInfo.backend->APILookup(QType(QType::ANY), qname, static_cast<int>(domainInfo.id), nullptr, false);
DNSResourceRecord resourceRecord;
while (domainInfo.backend->get(resourceRecord)) {
if (resourceRecord.qtype.getCode() == QType::ENT) {
self.assertEqual(data['name'], 'example.com.')
def test_get_zone_rrset(self):
- rz = self.session.get(self.url("/api/v1/servers/localhost/zones"))
- domains = rz.json()
+ name = 'host-18000.example.com.'
+ r = self.session.get(self.url("/api/v1/servers/localhost/zones"))
+ domains = r.json()
example_com = [domain for domain in domains if domain['name'] == u'example.com.'][0]
# verify single record from name that has a single record
[
{
'comments': [],
- 'name': 'host-18000.example.com.',
+ 'name': name,
'records':
[
{
]
)
+ # disable previous record
+ rrset = {
+ 'changetype': 'replace',
+ 'name': name,
+ 'type': 'A',
+ 'ttl': 120,
+ 'records':
+ [
+ {
+ 'content': '192.168.1.80',
+ 'disabled': True
+ }
+ ]
+ }
+ payload = {'rrsets': [rrset]}
+ r = self.session.patch(
+ self.url("/api/v1/servers/localhost/zones/example.com"),
+ data=json.dumps(payload),
+ headers={'content-type': 'application/json'})
+ self.assert_success(r)
+
+ # verify that the changed record is not found when asking for
+ # disabled records not to be included
+ data = self.get_zone(example_com['id'], rrset_name="host-18000.example.com.", include_disabled="false")
+ self.assertEqual(len(data['rrsets']), 0)
+
+ # verify that the changed record is found when explicitly asking for
+ # disabled records, and by default.
+ data = self.get_zone(example_com['id'], rrset_name="host-18000.example.com.", include_disabled="true")
+ self.assertEqual(get_rrset(data, name, 'A')['records'], rrset['records'])
+ data = self.get_zone(example_com['id'], rrset_name="host-18000.example.com.")
+ self.assertEqual(get_rrset(data, name, 'A')['records'], rrset['records'])
+
# verify two RRsets from a name that has two types with one record each
powerdnssec_org = [domain for domain in domains if domain['name'] == u'powerdnssec.org.'][0]
data = self.get_zone(powerdnssec_org['id'], rrset_name="localhost.powerdnssec.org.")