]>
git.ipfire.org Git - thirdparty/pdns.git/blob - regression-tests.ixfrdist/test_Stats.py
1 from ixfrdisttests
import IXFRDistTest
2 from xfrserver
.xfrserver
import AXFRServer
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
17 xfrServer
= AXFRServer(xfrServerPort
, zones
)
19 class IXFRDistStatsTest(IXFRDistTest
):
21 This test makes sure we have statistics in ixfrdist
24 webserver_address
= '127.0.0.1:8080'
26 _config_params
= ['_ixfrDistPort', 'webserver_address']
28 _config_template
= """
36 work-dir: 'ixfrdist.dir'
41 _config_domains
= {'example': '127.0.0.1:' + str(xfrServerPort
)}
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"]
57 def tearDownClass(cls
):
58 cls
.tearDownIXFRDist()
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():
68 self
.assertIn(line
.split(" ")[0],
69 self
.metric_prog_stats
+ self
.metric_domain_stats
)
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')
82 self
.assertIn('{domain=example}', line
)
83 self
.assertIn(line
.split("{")[0], self
.metric_domain_stats
)
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
)
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
)
97 def test_missing_metrics(self
):
100 res
= requests
.get('http://{}/metrics'.format(self
.webserver_address
))
101 self
.assertEqual(res
.status_code
, 200)
103 for line
in res
.text
.splitlines():
105 all_metrics
.add(line
.split(" ")[2])
108 all_metrics
.add(line
.split("{")[0])
110 all_metrics
.add(line
.split(" ")[0])
112 should_have_metrics
= set(self
.metric_prog_stats
+
113 self
.metric_domain_stats
)
115 unknown_metrics
= all_metrics
- should_have_metrics
117 self
.assertSetEqual(unknown_metrics
, set())