1 # Blackbox tests for smbcontrol
3 # Copyright (C) Catalyst IT Ltd. 2017
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.
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.
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/>.
18 from samba.tests import BlackboxTestCase, BlackboxProcessError
19 from samba.messaging import Messaging
21 COMMAND = "bin/smbcontrol"
26 class SmbcontrolBlackboxTests(BlackboxTestCase):
30 lp_ctx = self.get_loadparm()
31 self.msg_ctx = Messaging(lp_ctx=lp_ctx)
33 def test_expected_processes(self):
35 Test that the expected samba processes are running, currently we only
36 check that at least one process is running
38 processes = self.msg_ctx.irpc_all_servers()
40 self.fail("No samba processes returned")
43 """Test that all the samba processes can be pinged"""
45 processes = self.msg_ctx.irpc_all_servers()
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
66 surviving_processes = self.msg_ctx.irpc_all_servers()
67 for q in surviving_processes:
70 if id.pid in [x.pid for x in q.ids]:
71 # the unpingable server is still
72 # listed, meaning it is broken
76 # it looks like the service genuinely died
80 print("Ignoring error %s:" % e)
81 print("the process probably died before our ping")