summaryrefslogtreecommitdiffstats
path: root/selftest/create_smb1_fail_skipfile.txt
diff options
context:
space:
mode:
Diffstat (limited to 'selftest/create_smb1_fail_skipfile.txt')
-rw-r--r--selftest/create_smb1_fail_skipfile.txt190
1 files changed, 190 insertions, 0 deletions
diff --git a/selftest/create_smb1_fail_skipfile.txt b/selftest/create_smb1_fail_skipfile.txt
new file mode 100644
index 0000000..dd08b5d
--- /dev/null
+++ b/selftest/create_smb1_fail_skipfile.txt
@@ -0,0 +1,190 @@
+From a85b0a942ef07b6188255b2fee2fc379e9310409 Mon Sep 17 00:00:00 2001
+From: Noel Power <noel.power@suse.com>
+Date: Fri, 27 Sep 2019 15:24:25 +0100
+Subject: [PATCH] selftest: Generate a list of skip entries for SMB1
+
+The following changes prepare the test system so we can generate
+the list of tests that fail when SMB1 can no longer be negotiated
+
+1.
+Change the values of 'min protocol' set for the various test
+environments to be SMB2_02.
+
+Servers will only offer protocols starting with the min specified in the
+conf files, we don't need to change the client value here yet (until SMB1 is
+truly gone)
+
+2.
+The following environments will still negotiate SMB1
+ ad_dc_ntvfs, rpc_proxy & s4member
+
+3.
+Make test won't stop on first error
+
+Once this patch is applied either
+a. Commit to gitlab or
+b. Run a private autobuild
+
+For the failing test jobs gather the stdout logs and run the parser
+
+ source4/scripting/devel/test_errors_regrex.py logfile
+
+over the output. This script will generate lines suitable for a
+skipfile.
+
+It is a good idea as a final step to say create a file e.g.
+
+ selftest/skip_smb1_fails
+
+and then exclude those tests, running CI with patch similar to wscript
+below will verify that the list of tests is complete.
+
+--- a/selftest/wscript
++++ b/selftest/wscript
+@@ -179,6 +179,9 @@ def cmd_testonly(opt):
+ else:
+ env.FILTER_OPTIONS = '${FILTER_XFAIL}'
+
++ # Maybe this should be optional
++ env.OPTIONS += ' --exclude=${srcdir}/selftest/skip_smb1_fails'
++
+---
+ script/autobuild.py | 2 +-
+ selftest/target/Samba3.pm | 4 +--
+ selftest/target/Samba4.pm | 14 ++++++--
+ source4/scripting/devel/test_errors_regrex.py | 49 +++++++++++++++++++++++++++
+ 4 files changed, 63 insertions(+), 6 deletions(-)
+ create mode 100755 source4/scripting/devel/test_errors_regrex.py
+
+diff --git a/script/autobuild.py b/script/autobuild.py
+index 85167cfa993..5bf087f652c 100755
+--- a/script/autobuild.py
++++ b/script/autobuild.py
+@@ -184,7 +184,7 @@ def format_option(name, value=None):
+
+ def make_test(
+ cmd='make test',
+- FAIL_IMMEDIATELY=1,
++ FAIL_IMMEDIATELY=0,
+ TESTS='',
+ include_envs=None,
+ exclude_envs=None):
+diff --git a/selftest/target/Samba3.pm b/selftest/target/Samba3.pm
+index 41d439ea91a..ca14f86e0a4 100755
+--- a/selftest/target/Samba3.pm
++++ b/selftest/target/Samba3.pm
+@@ -1708,8 +1708,8 @@ sub provision($$$$$$$$$)
+ panic action = cd $self->{srcdir} && $self->{srcdir}/selftest/gdb_backtrace %d %\$(MAKE_TEST_BINARY)
+ smbd:suicide mode = yes
+
+- client min protocol = CORE
+- server min protocol = LANMAN1
++ client min protocol = SMB2_02
++ server min protocol = SMB2_02
+
+ workgroup = $domain
+
+diff --git a/selftest/target/Samba4.pm b/selftest/target/Samba4.pm
+index 1310e2ff09f..dd7fc807703 100755
+--- a/selftest/target/Samba4.pm
++++ b/selftest/target/Samba4.pm
+@@ -713,8 +713,8 @@ sub provision_raw_step1($$)
+ log level = $ctx->{server_loglevel}
+ lanman auth = Yes
+ ntlm auth = Yes
+- client min protocol = CORE
+- server min protocol = LANMAN1
++ client min protocol = SMB2_02
++ server min protocol = SMB2_02
+ mangled names = yes
+ dns update command = $ctx->{samba_dnsupdate}
+ spn update command = $ctx->{python} $ENV{SRCDIR_ABS}/source4/scripting/bin/samba_spnupdate -s $ctx->{smb_conf}
+@@ -1188,6 +1188,9 @@ rpc_server:winreg = embedded
+ rpc_server:spoolss = embedded
+ rpc_daemon:spoolssd = embedded
+ rpc_server:tcpip = no
++ # override the new SMB2 only default
++ client min protocol = CORE
++ server min protocol = LANMAN1
+ ";
+ if ($more_conf) {
+ $extra_smb_conf = $extra_smb_conf . $more_conf . "\n";
+@@ -1238,7 +1241,9 @@ sub provision_rpc_proxy($$$)
+ dcerpc endpoint servers = epmapper, remote
+ dcerpc_remote:interfaces = rpcecho
+ dcerpc_remote:allow_anonymous_fallback = yes
+-
++ # override the new SMB2 only default
++ client min protocol = CORE
++ server min protocol = LANMAN1
+ [cifs_to_dc]
+ path = /tmp/_ignore_cifs_to_dc_/_none_
+ read only = no
+@@ -1470,6 +1475,9 @@ sub provision_ad_dc_ntvfs($$$)
+ dsdb password event notification = true
+ dsdb group change notification = true
+ server schannel = auto
++ # override the new SMB2 only default
++ client min protocol = CORE
++ server min protocol = LANMAN1
+ ";
+ push (@{$extra_provision_options}, "--use-ntvfs");
+ my $ret = $self->provision($prefix,
+diff --git a/source4/scripting/devel/test_errors_regrex.py b/source4/scripting/devel/test_errors_regrex.py
+new file mode 100755
+index 00000000000..eedfdbb6c35
+--- /dev/null
++++ b/source4/scripting/devel/test_errors_regrex.py
+@@ -0,0 +1,49 @@
++#!/usr/bin/env python3
++#
++# Simple script to parse make test stdout results
++# to find the tests that are in error, the script
++# then creates a line for each error suitable for
++# putting into a skip file.
++# This scripts intended use is in SMB1 to SMB2 test
++# porting where it can be used to parse for failing
++# scripts in the case where the test envs are set
++# to not negotiate SMB1
++#
++import sys
++import re
++import os
++
++def parse_errors(infile):
++ all_tests = []
++ error_tests = []
++ # get all test lines
++ last_err = ""
++ for line in infile:
++ line = line.rstrip(os.linesep)
++ if re.match("^\[.* at .*\]", line):
++ test_info = line.split(',')
++ if len(test_info) > 1:
++ err = test_info[1].split()[0]
++ if err != last_err:
++ error_tests.append(all_tests[-1])
++ last_err = err
++ all_tests.append(line.split(']',1)[1].lstrip())
++ return error_tests
++
++def main():
++ if len(sys.argv) < 2:
++ print ("no args passed")
++ sys.exit(1)
++ print ("processing %s" % sys.argv[1])
++ inputf = sys.argv[1]
++ f = open(inputf, "r")
++ failing_tests = parse_errors(f)
++ f.close()
++ for t in failing_tests:
++ # adust t fo regex
++ t = t.replace('(', '\\(').replace(')', '\\)')
++ t = t.replace('[', '\\[').replace(']', '\\]')
++ t = "^" + t
++ print("%s" % t)
++if __name__ == '__main__':
++ main()
+--
+2.16.4
+