mirror of
https://github.com/samba-team/samba.git
synced 2024-12-23 17:34:34 +03:00
tests/smbcontrol: reduce ping test false positive rate
The ping test was failing when a transient ldap_server process died between the time it was listed and the time it was pinged. We stop treating that as failure. Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz> Reviewed-by: Andrew Bartlett <abartlet@samba.org> Autobuild-User(master): Andrew Bartlett <abartlet@samba.org> Autobuild-Date(master): Mon Mar 5 01:33:46 CET 2018 on sn-devel-144
This commit is contained in:
parent
4c0c888b57
commit
ffcc3671cc
@ -15,8 +15,8 @@
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
from samba.tests import BlackboxTestCase
|
||||
from __future__ import print_function
|
||||
from samba.tests import BlackboxTestCase, BlackboxProcessError
|
||||
from samba.messaging import Messaging
|
||||
|
||||
COMMAND = "bin/smbcontrol"
|
||||
@ -44,8 +44,40 @@ class SmbcontrolBlockboxTests(BlackboxTestCase):
|
||||
"""Test that all the samba processes can be pinged"""
|
||||
|
||||
processes = self.msg_ctx.irpc_all_servers()
|
||||
|
||||
for p in processes:
|
||||
for id in p.ids:
|
||||
if p.name != "samba":
|
||||
self.check_run("%s %d %s" % (COMMAND, id.pid, PING),
|
||||
msg="trying to ping %s" % p.name)
|
||||
try:
|
||||
self.check_run("%s %d %s" % (COMMAND, id.pid, PING),
|
||||
msg="trying to ping %s" % p.name)
|
||||
except BlackboxProcessError as e:
|
||||
# This process could not be pinged, which is
|
||||
# expected (occasionally) if the ldap_server
|
||||
# is using the "standard process model" and
|
||||
# forking a short-lived child for each
|
||||
# connection. We don't care about this, so we
|
||||
# list the processes again and assume that
|
||||
# only those that remain are relevant to the
|
||||
# ping test. Additionally we ensure that at
|
||||
# least one process of each name remains -- in
|
||||
# the ldap_server case, we expect at least the
|
||||
# parent to be there.
|
||||
name_exists = False
|
||||
surviving_processes = self.msg_ctx.irpc_all_servers()
|
||||
for q in surviving_processes:
|
||||
if q.name == p.name:
|
||||
name_exists = True
|
||||
if id.pid in [x.pid for x in q.ids]:
|
||||
# the unpingable server is still
|
||||
# listed, meaning it is broken
|
||||
raise
|
||||
|
||||
if not name_exists:
|
||||
# it looks like the service genuinely died
|
||||
# just at this moment
|
||||
raise
|
||||
|
||||
print("Ignoring error %s:" % e)
|
||||
print("the process probably died before our ping")
|
||||
continue
|
||||
|
Loading…
Reference in New Issue
Block a user