]>
Commit | Line | Data |
---|---|---|
c714b508 PL |
1 | from ixfrdisttests import IXFRDistTest |
2 | from xfrserver.xfrserver import AXFRServer | |
3 | import time | |
4 | import requests | |
5 | ||
6 | zones = { | |
7 | 1: """ | |
8 | $ORIGIN example. | |
9 | @ 86400 SOA foo bar 1 2 3 4 5 | |
10 | @ 4242 NS ns1.example. | |
11 | @ 4242 NS ns2.example. | |
12 | ns1.example. 4242 A 192.0.2.1 | |
13 | ns2.example. 4242 A 192.0.2.2 | |
14 | """} | |
15 | ||
16 | xfrServerPort = 4244 | |
17 | xfrServer = AXFRServer(xfrServerPort, zones) | |
18 | ||
19 | class IXFRDistStatsTest(IXFRDistTest): | |
20 | """ | |
21 | This test makes sure we have statistics in ixfrdist | |
22 | """ | |
23 | ||
24 | webserver_address = '127.0.0.1:8080' | |
25 | ||
26 | _config_params = ['_ixfrDistPort', 'webserver_address'] | |
27 | ||
28 | _config_template = """ | |
29 | listen: | |
30 | - '127.0.0.1:%d' | |
31 | acl: | |
32 | - '127.0.0.0/8' | |
33 | axfr-timeout: 20 | |
34 | keep: 20 | |
35 | tcp-in-threads: 1 | |
36 | work-dir: 'ixfrdist.dir' | |
37 | failed-soa-retry: 3 | |
38 | webserver-address: %s | |
39 | """ | |
40 | ||
41 | _config_domains = {'example': '127.0.0.1:' + str(xfrServerPort)} | |
42 | ||
43 | metric_prog_stats = ["ixfrdist_uptime_seconds", "ixfrdist_domains"] | |
44 | metric_domain_stats = ["ixfrdist_soa_serial", "ixfrdist_soa_checks", | |
45 | "ixfrdist_soa_checks_failed", | |
46 | "ixfrdist_soa_inqueries", | |
47 | "ixfrdist_axfr_inqueries", "ixfrdist_axfr_failures", | |
48 | "ixfrdist_ixfr_inqueries", "ixfrdist_ixfr_failures"] | |
49 | ||
50 | @classmethod | |
51 | def setUpClass(cls): | |
52 | cls.startIXFRDist() | |
53 | cls.setUpSockets() | |
54 | time.sleep(3) | |
55 | ||
56 | @classmethod | |
57 | def tearDownClass(cls): | |
58 | cls.tearDownIXFRDist() | |
59 | ||
60 | def test_program_stats_exist(self): | |
61 | res = requests.get('http://{}/metrics'.format(self.webserver_address)) | |
62 | self.assertEqual(res.status_code, 200) | |
63 | for line in res.text.splitlines(): | |
64 | if line[0] == "#": | |
65 | continue | |
66 | if "{" in line: | |
67 | continue | |
68 | self.assertIn(line.split(" ")[0], | |
69 | self.metric_prog_stats + self.metric_domain_stats) | |
70 | ||
71 | def test_registered(self): | |
72 | res = requests.get('http://{}/metrics'.format(self.webserver_address)) | |
73 | self.assertEqual(res.status_code, 200) | |
74 | for line in res.text.splitlines(): | |
75 | if line.startswith('ixfrdist_domains'): | |
76 | self.assertEqual(line, 'ixfrdist_domains 1') | |
77 | continue | |
78 | if line[0] == "#": | |
79 | continue | |
80 | if "{" not in line: | |
81 | continue | |
82 | self.assertIn('{domain=example}', line) | |
83 | self.assertIn(line.split("{")[0], self.metric_domain_stats) | |
84 | ||
85 | def test_metrics_have_help(self): | |
86 | res = requests.get('http://{}/metrics'.format(self.webserver_address)) | |
87 | self.assertEqual(res.status_code, 200) | |
88 | for s in self.metric_prog_stats + self.metric_domain_stats: | |
89 | self.assertIn('# HELP {}'.format(s), res.text) | |
90 | ||
91 | def test_metrics_have_type(self): | |
92 | res = requests.get('http://{}/metrics'.format(self.webserver_address)) | |
93 | self.assertEqual(res.status_code, 200) | |
94 | for s in self.metric_prog_stats + self.metric_domain_stats: | |
95 | self.assertIn('# TYPE {}'.format(s), res.text) | |
96 | ||
97 | def test_missing_metrics(self): | |
98 | all_metrics = set() | |
99 | ||
100 | res = requests.get('http://{}/metrics'.format(self.webserver_address)) | |
101 | self.assertEqual(res.status_code, 200) | |
102 | ||
103 | for line in res.text.splitlines(): | |
104 | if line[0] == "#": | |
105 | all_metrics.add(line.split(" ")[2]) | |
106 | continue | |
107 | if "{" in line: | |
108 | all_metrics.add(line.split("{")[0]) | |
109 | continue | |
110 | all_metrics.add(line.split(" ")[0]) | |
111 | ||
112 | should_have_metrics = set(self.metric_prog_stats + | |
113 | self.metric_domain_stats) | |
114 | ||
115 | unknown_metrics = all_metrics - should_have_metrics | |
116 | ||
117 | self.assertSetEqual(unknown_metrics, set()) |