python: tests: update all super calls to python 3 style in tests
[samba.git] / python / samba / tests / blackbox / smbcontrol.py
1 # Blackbox tests for smbcontrol
2 #
3 # Copyright (C) Catalyst IT Ltd. 2017
4 #
5 # This program is free software; you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 3 of the License, or
8 # (at your option) any later version.
9 #
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 # GNU General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
17 #
18 from samba.tests import BlackboxTestCase, BlackboxProcessError
19 from samba.messaging import Messaging
20
21 COMMAND = "bin/smbcontrol"
22 PING    = "ping"
23 USAGE   = "pool-usage"
24
25
26 class SmbcontrolBlackboxTests(BlackboxTestCase):
27
28     def setUp(self):
29         super().setUp()
30         lp_ctx = self.get_loadparm()
31         self.msg_ctx = Messaging(lp_ctx=lp_ctx)
32
33     def test_expected_processes(self):
34         """
35         Test that the expected samba processes are running, currently we only
36         check that at least one process is running
37         """
38         processes = self.msg_ctx.irpc_all_servers()
39         if not processes:
40             self.fail("No samba processes returned")
41
42     def test_ping(self):
43         """Test that all the samba processes can be pinged"""
44
45         processes = self.msg_ctx.irpc_all_servers()
46
47         for p in processes:
48             for id in p.ids:
49                 if p.name != "samba":
50                     try:
51                         self.check_run("%s %d %s" % (COMMAND, id.pid, PING),
52                                        msg="trying to ping %s" % p.name)
53                     except BlackboxProcessError as e:
54                         # This process could not be pinged, which is
55                         # expected (occasionally) if the ldap_server
56                         # is using the "standard process model" and
57                         # forking a short-lived child for each
58                         # connection. We don't care about this, so we
59                         # list the processes again and assume that
60                         # only those that remain are relevant to the
61                         # ping test. Additionally we ensure that at
62                         # least one process of each name remains -- in
63                         # the ldap_server case, we expect at least the
64                         # parent to be there.
65                         name_exists = False
66                         surviving_processes = self.msg_ctx.irpc_all_servers()
67                         for q in surviving_processes:
68                             if q.name == p.name:
69                                 name_exists = True
70                                 if id.pid in [x.pid for x in q.ids]:
71                                     # the unpingable server is still
72                                     # listed, meaning it is broken
73                                     raise
74
75                         if not name_exists:
76                             # it looks like the service genuinely died
77                             # just at this moment
78                             raise
79
80                         print("Ignoring error %s:" % e)
81                         print("the process probably died before our ping")
82                         continue