s3-selftest Add tests to show kerberos works across a password change
[samba.git] / source3 / selftest / tests.py
1 #!/usr/bin/python
2 # This script generates a list of testsuites that should be run as part of 
3 # the Samba 3 test suite.
4
5 # The output of this script is parsed by selftest.pl, which then decides 
6 # which of the tests to actually run. It will, for example, skip all tests 
7 # listed in selftest/skip or only run a subset during "make quicktest".
8
9 # The idea is that this script outputs all of the tests of Samba 3, not 
10 # just those that are known to pass, and list those that should be skipped 
11 # or are known to fail in selftest/skip or selftest/samba4-knownfail. This makes it 
12 # very easy to see what functionality is still missing in Samba 3 and makes 
13 # it possible to run the testsuite against other servers, such as Samba 4 or 
14 # Windows that have a different set of features.
15
16 # The syntax for a testsuite is "-- TEST --" on a single line, followed 
17 # by the name of the test, the environment it needs and the command to run, all 
18 # three separated by newlines. All other lines in the output are considered 
19 # comments.
20
21 import os, sys
22 sys.path.insert(0, os.path.normpath(os.path.join(os.path.dirname(__file__), "../../selftest")))
23 from selftesthelpers import *
24 import subprocess
25
26 smb4torture = binpath("smbtorture4")
27 samba3srcdir = srcdir() + "/source3"
28 configuration = "--configfile=$SMB_CONF_PATH"
29 scriptdir=os.path.join(samba3srcdir, "../script/tests")
30
31 torture_options = [configuration, "--maximum-runtime=$SELFTEST_MAXTIME", 
32                    "--target=$SELFTEST_TARGET", "--basedir=$SELFTEST_TMPDIR",
33                    '--option="torture:winbindd_netbios_name=$SERVER"',
34                    '--option="torture:winbindd_netbios_domain=$DOMAIN"', 
35                    '--option=torture:sharedelay=100000']
36
37 if not os.getenv("SELFTEST_VERBOSE"):
38     torture_options.append("--option=torture:progress=no")
39 torture_options.append("--format=subunit")
40 if os.getenv("SELFTEST_QUICK"):
41     torture_options.append("--option=torture:quick=yes")
42 smb4torture += " " + " ".join(torture_options)
43
44 def plansmbtorturetestsuite(name, env, options, description=''):
45     modname = "samba3.posix_s3.%s %s" % (name, description)
46     cmdline = "%s $LISTOPT %s %s" % (valgrindify(smb4torture), options, name)
47     plantestsuite_loadlist(modname, env, cmdline)
48
49 plantestsuite("samba3.blackbox.success", "dc:local", [os.path.join(samba3srcdir, "script/tests/test_success.sh")])
50 plantestsuite("samba3.blackbox.failure", "dc:local", [os.path.join(samba3srcdir, "script/tests/test_failure.sh")])
51
52 plantestsuite("samba3.local_s3", "dc:local", [os.path.join(samba3srcdir, "script/tests/test_local_s3.sh")])
53
54 tests=[ "FDPASS", "LOCK1", "LOCK2", "LOCK3", "LOCK4", "LOCK5", "LOCK6", "LOCK7", "LOCK9",
55         "UNLINK", "BROWSE", "ATTR", "TRANS2", "TORTURE",
56         "OPLOCK1", "OPLOCK2", "OPLOCK3", "OPLOCK4", "STREAMERROR",
57         "DIR", "DIR1", "DIR-CREATETIME", "TCON", "TCONDEV", "RW1", "RW2", "RW3", "RW-SIGNING",
58         "OPEN", "XCOPY", "RENAME", "DELETE", "DELETE-LN", "PROPERTIES", "W2K",
59         "TCON2", "IOCTL", "CHKPATH", "FDSESS", "LOCAL-SUBSTITUTE", "CHAIN1",
60         "GETADDRINFO", "POSIX", "UID-REGRESSION-TEST", "SHORTNAME-TEST",
61         "LOCAL-BASE64", "LOCAL-GENCACHE", "POSIX-APPEND",
62         "CASE-INSENSITIVE-CREATE",
63         "LOCAL-string_to_sid", "LOCAL-CONVERT-STRING" ]
64
65 for t in tests:
66     plantestsuite("samba3.smbtorture_s3.plain(dc).%s" % t, "dc", [os.path.join(samba3srcdir, "script/tests/test_smbtorture_s3.sh"), t, '//$SERVER_IP/tmp', '$USERNAME', '$PASSWORD', "", "-l $LOCAL_PATH"])
67     plantestsuite("samba3.smbtorture_s3.crypt(dc).%s" % t, "dc", [os.path.join(samba3srcdir, "script/tests/test_smbtorture_s3.sh"), t, '//$SERVER_IP/tmp', '$USERNAME', '$PASSWORD', "-e", "-l $LOCAL_PATH"])
68
69 tests=["--ping", "--separator",
70        "--own-domain",
71        "--all-domains",
72        "--trusted-domains",
73        "--domain-info=BUILTIN",
74        "--domain-info=$DOMAIN",
75        "--online-status",
76        "--online-status --domain=BUILTIN",
77        "--online-status --domain=$DOMAIN",
78        "--check-secret --domain=$DOMAIN",
79        "--change-secret --domain=$DOMAIN",
80        "--check-secret --domain=$DOMAIN",
81        "--online-status --domain=$DOMAIN",
82        #Didn't pass yet# "--domain-users",
83        "--domain-groups",
84        "--name-to-sid=$USERNAME",
85        "--name-to-sid=$DOMAIN\\\\$USERNAME",
86      #Didn't pass yet# "--user-info=$USERNAME",
87        "--user-groups=$DOMAIN\\\\$USERNAME",
88        "--allocate-uid",
89        "--allocate-gid"]
90
91 for t in tests:
92     plantestsuite("samba3.wbinfo_s3.(dc:local).%s" % t, "dc:local", [os.path.join(samba3srcdir, "script/tests/test_wbinfo_s3.sh"), t])
93     plantestsuite("samba3.wbinfo_s3.(member:local).%s" % t, "member:local", [os.path.join(samba3srcdir, "script/tests/test_wbinfo_s3.sh"), t])
94
95 plantestsuite("samba3.ntlm_auth.(dc:local)", "dc:local", [os.path.join(samba3srcdir, "script/tests/test_ntlm_auth_s3.sh"), valgrindify(python), samba3srcdir, configuration])
96
97 for env in ["dc", "member"]:
98     plantestsuite("samba3.blackbox.smbclient_auth.plain (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_auth.sh"), '$SERVER', '$SERVER_IP', '$DC_USERNAME', '$DC_PASSWORD', configuration])
99
100 for env in ["secserver"]:
101     plantestsuite("samba3.blackbox.smbclient_auth.plain (%s) domain creds" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_auth.sh"), '$SERVER', '$SERVER_IP', '$DOMAIN\\\\$DC_USERNAME', '$DC_PASSWORD', configuration + " --option=clientntlmv2auth=no"])
102
103 for env in ["member"]:
104     plantestsuite("samba3.blackbox.smbclient_auth.plain (%s) member creds" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_auth.sh"), '$SERVER', '$SERVER_IP', '$SERVER\\\\$USERNAME', '$PASSWORD', configuration])
105
106 for env in ["secshare", "secserver"]:
107     plantestsuite("samba3.blackbox.smbclient_auth.plain (%s) local creds" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_auth.sh"), '$SERVER', '$SERVER_IP', '$USERNAME', '$PASSWORD', configuration + " --option=clientntlmv2auth=no --option=clientlanmanauth=yes"])
108
109 # plain
110 for env in ["dc"]:
111     plantestsuite("samba3.blackbox.smbclient_s3.plain (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_s3.sh"), '$SERVER', '$SERVER_IP', '$DC_USERNAME', '$DC_PASSWORD', '$USERID', '$LOCAL_PATH', '$PREFIX', configuration])
112
113 for env in ["member"]:
114     plantestsuite("samba3.blackbox.smbclient_s3.plain (%s) member creds" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_s3.sh"), '$SERVER', '$SERVER_IP', '$SERVER\\\\$USERNAME', '$PASSWORD', '$USERID', '$LOCAL_PATH', '$PREFIX', configuration])
115
116 for env in ["dc"]:
117     plantestsuite("samba3.blackbox.smbclient_s3.sign (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_s3.sh"), '$SERVER', '$SERVER_IP', '$DC_USERNAME', '$DC_PASSWORD', '$USERID', '$LOCAL_PATH', '$PREFIX', configuration, "--signing=required"])
118
119 for env in ["member"]:
120     plantestsuite("samba3.blackbox.smbclient_s3.sign (%s) member creds" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_s3.sh"), '$SERVER', '$SERVER_IP', '$SERVER\\\\$USERNAME', '$PASSWORD', '$USERID', '$LOCAL_PATH', '$PREFIX', configuration, "--signing=required"])
121
122 # encrypted
123 for env in ["dc"]:
124     plantestsuite("samba3.blackbox.smbclient_s3.crypt (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_s3.sh"), '$SERVER', '$SERVER_IP', '$USERNAME', '$PASSWORD', '$USERID', '$LOCAL_PATH', '$PREFIX', configuration, "-e"])
125
126 #TODO encrypted against member, with member creds, and with DC creds
127 plantestsuite("samba3.blackbox.net.misc", "dc:local", [os.path.join(samba3srcdir, "script/tests/test_net_misc.sh"),
128                                                        scriptdir, "$SMB_CONF_PATH", configuration])
129 plantestsuite("samba3.blackbox.net.local.registry", "dc:local", [os.path.join(samba3srcdir, "script/tests/test_net_registry.sh"),
130                                                        scriptdir, "$SMB_CONF_PATH", configuration])
131 plantestsuite("samba3.blackbox.net.rpc.registry", "dc:local", [os.path.join(samba3srcdir, "script/tests/test_net_registry.sh"),
132                                                        scriptdir, "$SMB_CONF_PATH", configuration, 'rpc'])
133
134 plantestsuite("samba3.blackbox.net.local.registry.roundtrip", "dc:local", [os.path.join(samba3srcdir, "script/tests/test_net_registry_roundtrip.sh"),
135                                                        scriptdir, "$SMB_CONF_PATH", configuration])
136 plantestsuite("samba3.blackbox.testparm", "dc:local", [os.path.join(samba3srcdir, "script/tests/test_testparm_s3.sh"),
137                                                        "$LOCAL_PATH"])
138
139
140 #smbtorture4 tests
141
142 base = ["base.attr", "base.charset", "base.chkpath", "base.defer_open", "base.delaywrite", "base.delete",
143         "base.deny1", "base.deny2", "base.deny3", "base.denydos", "base.dir1", "base.dir2",
144         "base.disconnect", "base.fdpass", "base.lock",
145         "base.mangle", "base.negnowait", "base.ntdeny1",
146         "base.ntdeny2", "base.open", "base.openattr", "base.properties", "base.rename", "base.rw1",
147         "base.secleak", "base.tcon", "base.tcondev", "base.trans2", "base.unlink", "base.vuid",
148         "base.xcopy", "base.samba3error"]
149
150 raw = ["raw.acls", "raw.chkpath", "raw.close", "raw.composite", "raw.context", "raw.eas",
151        "raw.ioctl", "raw.lock", "raw.mkdir", "raw.mux", "raw.notify", "raw.open", "raw.oplock"
152        "raw.qfileinfo", "raw.qfsinfo", "raw.read", "raw.rename", "raw.search", "raw.seek",
153        "raw.sfileinfo.base", "raw.sfileinfo.bug", "raw.streams", "raw.unlink", "raw.write",
154        "raw.samba3hide", "raw.samba3badpath", "raw.sfileinfo.rename",
155        "raw.samba3caseinsensitive", "raw.samba3posixtimedlock",
156        "raw.samba3rootdirfid", "raw.sfileinfo.end-of-file"]
157
158 smb2 = ["smb2.lock", "smb2.read", "smb2.compound", "smb2.connect", "smb2.scan", "smb2.scanfind",
159         "smb2.bench-oplock"]
160
161 rpc = ["rpc.authcontext", "rpc.samba3.bind", "rpc.samba3.srvsvc", "rpc.samba3.sharesec",
162        "rpc.samba3.spoolss", "rpc.samba3.wkssvc", "rpc.samba3.winreg",
163        "rpc.samba3.getaliasmembership-0",
164        "rpc.samba3.netlogon", "rpc.samba3.sessionkey", "rpc.samba3.getusername",
165        "rpc.svcctl", "rpc.ntsvcs", "rpc.winreg", "rpc.eventlog",
166        "rpc.spoolss.printserver", "rpc.spoolss.win", "rpc.spoolss.notify", "rpc.spoolss.printer",
167        "rpc.spoolss.driver",
168        "rpc.lsa-getuser", "rpc.lsa.lookupsids", "rpc.lsa.lookupnames",
169        "rpc.lsa.privileges", 
170        "rpc.samr", "rpc.samr.users", "rpc.samr.users.privileges", "rpc.samr.passwords",
171        "rpc.samr.passwords.pwdlastset", "rpc.samr.large-dc", "rpc.samr.machine.auth",
172        "rpc.netlogon.admin",
173        "rpc.schannel", "rpc.schannel2", "rpc.bench-schannel1", "rpc.join", "rpc.bind", "rpc.epmapper"]
174
175 local = ["local.nss-wrapper", "local.ndr"]
176
177 winbind = ["winbind.struct", "winbind.wbclient"]
178
179 rap = ["rap.basic", "rap.rpc", "rap.printing", "rap.sam"]
180
181 unix = ["unix.info2", "unix.whoami"]
182
183 nbt = ["nbt.dgram" ]
184
185 tests= base + raw + smb2 + rpc + unix + local + winbind + rap + nbt
186
187 sub = subprocess.Popen("%s --version 2> /dev/null" % smb4torture, stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=True)
188 sub.communicate("")
189
190 if sub.returncode == 0:
191     for t in tests:
192         if t == "base.delaywrite":
193             plansmbtorturetestsuite(t, "dc", '//$SERVER_IP/tmp -U$USERNAME%$PASSWORD --maximum-runtime=900')
194         elif t == "unix.whoami":
195             plansmbtorturetestsuite(t, "dc", '//$SERVER_IP/tmpguest -U$USERNAME%$PASSWORD')
196         elif t == "raw.samba3posixtimedlock":
197             plansmbtorturetestsuite(t, "dc", '//$SERVER_IP/tmpguest -U$USERNAME%$PASSWORD --option=torture:localdir=$SELFTEST_PREFIX/dc/share')
198         else:
199             plansmbtorturetestsuite(t, "dc", '//$SERVER_IP/tmp -U$USERNAME%$PASSWORD')
200
201         if t == "raw.chkpath":
202             plansmbtorturetestsuite(t, "dc", '//$SERVER_IP/tmpcase -U$USERNAME%$PASSWORD')
203
204     test = 'rpc.lsa.lookupsids'
205     auth_options = ["", "ntlm", "spnego" ]
206     signseal_options = ["", ",connect", ",sign", ",seal"]
207     smb_options = ["", ",smb2"]
208     endianness_options = ["", ",bigendian"]
209     for z in smb_options:
210         for s in signseal_options:
211             for e in endianness_options:
212                 for a in auth_options:
213                     binding_string = "ncacn_np:$SERVER[%s%s%s%s]" % (a, s, z, e)
214                     options = binding_string + " -U$USERNAME%$PASSWORD"
215                     plansmbtorturetestsuite(test, "dc", options, 'over ncacn_np with [%s%s%s%s] ' % (a, s, z, e))
216
217             # We should try more combinations in future, but this is all
218             # the pre-calculated credentials cache supports at the moment
219             e = ""
220             a = ""
221             binding_string = "ncacn_np:$SERVER[%s%s%s%s]" % (a, s, z, e)
222             options = binding_string + " -k yes --krb5-ccache=$PREFIX/ktest/krb5_ccache-2"
223             plansmbtorturetestsuite(test, "ktest", options, 'over kerberos with old ccache ncacn_np with [%s%s%s%s] ' % (a, s, z, e))
224
225             options = binding_string + " -k yes --krb5-ccache=$PREFIX/ktest/krb5_ccache-3"
226             plansmbtorturetestsuite(test, "ktest", options, 'over kerberos ncacn_np with [%s%s%s%s] ' % (a, s, z, e))
227
228
229
230     for e in endianness_options:
231         for a in auth_options:
232             for s in signseal_options:
233                 binding_string = "ncacn_ip_tcp:$SERVER_IP[%s%s%s]" % (a, s, e)
234                 options = binding_string + " -U$USERNAME%$PASSWORD"
235                 plansmbtorturetestsuite(test, "dc", options, 'over ncacn_ip_tcp with [%s%s%s] ' % (a, s, e))