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 __future__ import print_function
19 from samba.tests import BlackboxTestCase, BlackboxProcessError
20 from samba.messaging import Messaging
22 COMMAND = "bin/smbcontrol"
27 class SmbcontrolBlockboxTests(BlackboxTestCase):
30 super(SmbcontrolBlockboxTests, self).setUp()
31 lp_ctx = self.get_loadparm()
32 self.msg_ctx = Messaging(lp_ctx=lp_ctx)
34 def test_expected_processes(self):
36 Test that the expected samba processes are running, currently we only
37 check that at least one process is running
39 processes = self.msg_ctx.irpc_all_servers()
41 self.fail("No samba processes returned")
44 """Test that all the samba processes can be pinged"""
46 processes = self.msg_ctx.irpc_all_servers()
52 self.check_run("%s %d %s" % (COMMAND, id.pid, PING),
53 msg="trying to ping %s" % p.name)
54 except BlackboxProcessError as e:
55 # This process could not be pinged, which is
56 # expected (occasionally) if the ldap_server
57 # is using the "standard process model" and
58 # forking a short-lived child for each
59 # connection. We don't care about this, so we
60 # list the processes again and assume that
61 # only those that remain are relevant to the
62 # ping test. Additionally we ensure that at
63 # least one process of each name remains -- in
64 # the ldap_server case, we expect at least the
67 surviving_processes = self.msg_ctx.irpc_all_servers()
68 for q in surviving_processes:
71 if id.pid in [x.pid for x in q.ids]:
72 # the unpingable server is still
73 # listed, meaning it is broken
77 # it looks like the service genuinely died
81 print("Ignoring error %s:" % e)
82 print("the process probably died before our ping")