]> git.ipfire.org Git - thirdparty/pdns.git/blob - regression-tests.api/test_Servers.py
Merge remote-tracking branch 'origin/master' into rec-dnstap
[thirdparty/pdns.git] / regression-tests.api / test_Servers.py
1 from test_helper import ApiTestCase, is_auth, is_recursor
2
3
4 class Servers(ApiTestCase):
5
6 def test_list_servers(self):
7 r = self.session.get(self.url("/api/v1/servers"))
8 self.assert_success_json(r)
9 lst = r.json()
10 self.assertEquals(len(lst), 1) # only localhost allowed in there
11 data = lst[0]
12 for k in ('id', 'daemon_type', 'url'):
13 self.assertIn(k, data)
14 self.assertEquals(data['id'], 'localhost')
15
16 def test_servers_localhost(self):
17 r = self.session.get(self.url("/api/v1/servers/localhost"))
18 self.assert_success_json(r)
19 data = r.json()
20 for k in ('id', 'type', 'version', 'daemon_type', 'url', 'zones_url', 'config_url'):
21 self.assertIn(k, data)
22 self.assertEquals(data['id'], 'localhost')
23 self.assertEquals(data['type'], 'Server')
24 # or 'recursor' for recursors
25 if is_auth():
26 daemon_type = 'authoritative'
27 elif is_recursor():
28 daemon_type = 'recursor'
29 else:
30 raise RuntimeError('Unknown daemon type')
31 self.assertEquals(data['daemon_type'], daemon_type)
32
33 def test_read_config(self):
34 r = self.session.get(self.url("/api/v1/servers/localhost/config"))
35 self.assert_success_json(r)
36 data = dict([(r['name'], r['value']) for r in r.json()])
37 self.assertIn('daemon', data)
38
39 def test_read_statistics(self):
40 r = self.session.get(self.url("/api/v1/servers/localhost/statistics"))
41 self.assert_success_json(r)
42 data = r.json()
43 self.assertIn('uptime', [e['name'] for e in data])
44 if is_auth():
45 print(data)
46 qtype_stats, respsize_stats, queries_stats, rcode_stats = None, None, None, None
47 for elem in data:
48 if elem['type'] == 'MapStatisticItem' and elem['name'] == 'response-by-qtype':
49 qtype_stats = elem['value']
50 elif elem['type'] == 'MapStatisticItem' and elem['name'] == 'response-sizes':
51 respsize_stats = elem['value']
52 elif elem['type'] == 'RingStatisticItem' and elem['name'] == 'queries':
53 queries_stats = elem['value']
54 elif elem['type'] == 'MapStatisticItem' and elem['name'] == 'response-by-rcode':
55 rcode_stats = elem['value']
56 self.assertIn('A', [e['name'] for e in qtype_stats])
57 self.assertIn('60', [e['name'] for e in respsize_stats])
58 self.assertIn('example.com/A', [e['name'] for e in queries_stats])
59 self.assertIn('No Error', [e['name'] for e in rcode_stats])
60
61 def test_read_one_statistic(self):
62 r = self.session.get(self.url("/api/v1/servers/localhost/statistics?statistic=uptime"))
63 self.assert_success_json(r)
64 data = r.json()
65 self.assertIn('uptime', [e['name'] for e in data])
66
67 def test_read_one_non_existent_statistic(self):
68 r = self.session.get(self.url("/api/v1/servers/localhost/statistics?statistic=uptimeAAAA"))
69 self.assertEquals(r.status_code, 422)
70 self.assertIn("Unknown statistic name", r.json()['error'])