xref: /unit/test/unit/status.py (revision 2187:ed0ff6e170d0)
1*2187Szelenkov@nginx.comfrom unit.control import TestControl
2*2187Szelenkov@nginx.com
3*2187Szelenkov@nginx.com
4*2187Szelenkov@nginx.comclass Status:
5*2187Szelenkov@nginx.com    _status = None
6*2187Szelenkov@nginx.com    control = TestControl()
7*2187Szelenkov@nginx.com
8*2187Szelenkov@nginx.com    def _check_zeros():
9*2187Szelenkov@nginx.com        assert Status.control.conf_get('/status') == {
10*2187Szelenkov@nginx.com            'connections': {
11*2187Szelenkov@nginx.com                'accepted': 0,
12*2187Szelenkov@nginx.com                'active': 0,
13*2187Szelenkov@nginx.com                'idle': 0,
14*2187Szelenkov@nginx.com                'closed': 0,
15*2187Szelenkov@nginx.com            },
16*2187Szelenkov@nginx.com            'requests': {'total': 0},
17*2187Szelenkov@nginx.com            'applications': {},
18*2187Szelenkov@nginx.com        }
19*2187Szelenkov@nginx.com
20*2187Szelenkov@nginx.com    def init(status=None):
21*2187Szelenkov@nginx.com        Status._status = (
22*2187Szelenkov@nginx.com            status if status is not None else Status.control.conf_get('/status')
23*2187Szelenkov@nginx.com        )
24*2187Szelenkov@nginx.com
25*2187Szelenkov@nginx.com    def diff():
26*2187Szelenkov@nginx.com        def find_diffs(d1, d2):
27*2187Szelenkov@nginx.com            if isinstance(d1, dict) and isinstance(d2, dict):
28*2187Szelenkov@nginx.com                return {
29*2187Szelenkov@nginx.com                    k: find_diffs(d1.get(k, 0), d2.get(k, 0))
30*2187Szelenkov@nginx.com                    for k in d1
31*2187Szelenkov@nginx.com                    if k in d2
32*2187Szelenkov@nginx.com                }
33*2187Szelenkov@nginx.com            else:
34*2187Szelenkov@nginx.com                return d1 - d2
35*2187Szelenkov@nginx.com
36*2187Szelenkov@nginx.com        return find_diffs(Status.control.conf_get('/status'), Status._status)
37*2187Szelenkov@nginx.com
38*2187Szelenkov@nginx.com    def get(path='/'):
39*2187Szelenkov@nginx.com        path = path.split('/')[1:]
40*2187Szelenkov@nginx.com        diff = Status.diff()
41*2187Szelenkov@nginx.com
42*2187Szelenkov@nginx.com        for p in path:
43*2187Szelenkov@nginx.com            diff = diff[p]
44*2187Szelenkov@nginx.com
45*2187Szelenkov@nginx.com        return diff
46