s3-selftest Add all the LOCAL-* smbtorture tests to make test
[kai/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=samba3", "--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", "s3dc:local", [os.path.join(samba3srcdir, "script/tests/test_success.sh")])
50 plantestsuite("samba3.blackbox.failure", "s3dc:local", [os.path.join(samba3srcdir, "script/tests/test_failure.sh")])
51
52 plantestsuite("samba3.local_s3", "s3dc: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", "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", "CHAIN2",
60         "GETADDRINFO", "POSIX", "UID-REGRESSION-TEST", "SHORTNAME-TEST",
61         "LOCAL-BASE64", "LOCAL-GENCACHE", "POSIX-APPEND",
62         "CASE-INSENSITIVE-CREATE", "SMB2-BASIC", "NTTRANS-FSCTL",
63         "BAD-NBT-SESSION"]
64
65 for t in tests:
66     plantestsuite("samba3.smbtorture_s3.plain(s3dc).%s" % t, "s3dc", [os.path.join(samba3srcdir, "script/tests/test_smbtorture_s3.sh"), t, '//$SERVER_IP/tmp', '$USERNAME', '$PASSWORD', binpath('smbtorture3'), "", "-l $LOCAL_PATH"])
67     plantestsuite("samba3.smbtorture_s3.crypt(s3dc).%s" % t, "s3dc", [os.path.join(samba3srcdir, "script/tests/test_smbtorture_s3.sh"), t, '//$SERVER_IP/tmp', '$USERNAME', '$PASSWORD', binpath('smbtorture3'), "-e", "-l $LOCAL_PATH"])
68
69 local_tests=[
70         "LOCAL-SUBSTITUTE",
71         "LOCAL-GENCACHE",
72         "LOCAL-TALLOC-DICT",
73         "LOCAL-BASE64",
74         "LOCAL-RBTREE",
75         "LOCAL-MEMCACHE",
76         "LOCAL-STREAM-NAME",
77         "LOCAL-WBCLIENT",
78         "LOCAL-string_to_sid",
79         "LOCAL-binary_to_sid",
80         "LOCAL-DBTRANS",
81         "LOCAL-TEVENT-SELECT",
82         "LOCAL-CONVERT-STRING",
83         "LOCAL-CONV-AUTH-INFO",
84         "LOCAL-sprintf_append"]
85
86 for t in local_tests:
87     plantestsuite("samba3.smbtorture_s3.%s" % t, "s3dc", [os.path.join(samba3srcdir, "script/tests/test_smbtorture_s3.sh"), t, '//$SERVER_IP/tmp', '$USERNAME', '$PASSWORD', binpath('smbtorture3'), "-e"])
88
89 tests=["--ping", "--separator",
90        "--own-domain",
91        "--all-domains",
92        "--trusted-domains",
93        "--domain-info=BUILTIN",
94        "--domain-info=$DOMAIN",
95        "--online-status",
96        "--online-status --domain=BUILTIN",
97        "--online-status --domain=$DOMAIN",
98        "--check-secret --domain=$DOMAIN",
99        "--change-secret --domain=$DOMAIN",
100        "--check-secret --domain=$DOMAIN",
101        "--online-status --domain=$DOMAIN",
102        #Didn't pass yet# "--domain-users",
103        "--domain-groups",
104        "--name-to-sid=$USERNAME",
105        "--name-to-sid=$DOMAIN\\\\$USERNAME",
106      #Didn't pass yet# "--user-info=$USERNAME",
107        "--user-groups=$DOMAIN\\\\$USERNAME",
108        "--allocate-uid",
109        "--allocate-gid"]
110
111 for t in tests:
112     plantestsuite("samba3.wbinfo_s3.(s3dc:local).%s" % t, "s3dc:local", [os.path.join(samba3srcdir, "script/tests/test_wbinfo_s3.sh"), t])
113     plantestsuite("samba3.wbinfo_s3.(member:local).%s" % t, "member:local", [os.path.join(samba3srcdir, "script/tests/test_wbinfo_s3.sh"), t])
114
115 plantestsuite(
116     "samba3.wbinfo_sids2xids.(member:local)", "member:local",
117     [os.path.join(samba3srcdir, "script/tests/test_wbinfo_sids2xids.sh")])
118
119 plantestsuite("samba3.ntlm_auth.(s3dc:local)", "s3dc:local", [os.path.join(samba3srcdir, "script/tests/test_ntlm_auth_s3.sh"), valgrindify(python), samba3srcdir, binpath('ntlm_auth3'), configuration])
120
121 for env in ["s3dc", "member"]:
122     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', binpath('smbclient3'), configuration])
123
124 for env in ["secserver"]:
125     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', binpath('smbclient3'), configuration + " --option=clientntlmv2auth=no"])
126
127 for env in ["member"]:
128     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', binpath('smbclient3'), configuration])
129
130 for env in ["maptoguest", "secshare", "secserver"]:
131     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', binpath('smbclient3'), configuration + " --option=clientntlmv2auth=no --option=clientlanmanauth=yes"])
132
133 env = "maptoguest"
134 plantestsuite("samba3.blackbox.smbclient_auth.plain (%s) bad username" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_auth.sh"), '$SERVER', '$SERVER_IP', 'notmy$USERNAME', '$PASSWORD', binpath('smbclient3'), configuration + " --option=clientntlmv2auth=no --option=clientlanmanauth=yes"])
135
136 # plain
137 for env in ["s3dc"]:
138     plantestsuite("samba3.blackbox.smbclient_s3.plain (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_s3.sh"), '$SERVER', '$SERVER_IP', '$DOMAIN', '$DC_USERNAME', '$DC_PASSWORD', '$USERID', '$LOCAL_PATH', '$PREFIX', binpath('smbclient3'), binpath('wbinfo'), configuration])
139
140 for env in ["member"]:
141     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', '$SERVER\\\\$USERNAME', '$PASSWORD', '$USERID', '$LOCAL_PATH', '$PREFIX', binpath('smbclient3'), binpath('wbinfo'), configuration])
142
143 for env in ["s3dc"]:
144     plantestsuite("samba3.blackbox.smbclient_s3.sign (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_s3.sh"), '$SERVER', '$SERVER_IP', '$DOMAIN', '$DC_USERNAME', '$DC_PASSWORD', '$USERID', '$LOCAL_PATH', '$PREFIX', binpath('smbclient3'), binpath('wbinfo'), configuration, "--signing=required"])
145
146 for env in ["member"]:
147     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', '$SERVER\\\\$USERNAME', '$PASSWORD', '$USERID', '$LOCAL_PATH', '$PREFIX', binpath('smbclient3'), binpath('wbinfo'), configuration, "--signing=required"])
148
149 # encrypted
150 for env in ["s3dc"]:
151     plantestsuite("samba3.blackbox.smbclient_s3.crypt (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_s3.sh"), '$SERVER', '$SERVER_IP', '$DOMAIN', '$USERNAME', '$PASSWORD', '$USERID', '$LOCAL_PATH', '$PREFIX', binpath('smbclient3'), binpath('wbinfo'), configuration, "-e"])
152
153 #TODO encrypted against member, with member creds, and with DC creds
154 plantestsuite("samba3.blackbox.net.misc", "s3dc:local", [os.path.join(samba3srcdir, "script/tests/test_net_misc.sh"),
155                                                        scriptdir, "$SMB_CONF_PATH", binpath('net'), configuration])
156 plantestsuite("samba3.blackbox.net.local.registry", "s3dc:local", [os.path.join(samba3srcdir, "script/tests/test_net_registry.sh"),
157                                                        scriptdir, "$SMB_CONF_PATH", binpath('net'), configuration])
158 plantestsuite("samba3.blackbox.net.rpc.registry", "s3dc", [os.path.join(samba3srcdir, "script/tests/test_net_registry.sh"),
159                                                        scriptdir, "$SMB_CONF_PATH", binpath('net'), configuration, 'rpc'])
160
161 plantestsuite("samba3.blackbox.net.local.registry.roundtrip", "s3dc:local", [os.path.join(samba3srcdir, "script/tests/test_net_registry_roundtrip.sh"),
162                                                        scriptdir, "$SMB_CONF_PATH", binpath('net'), configuration,])
163 plantestsuite("samba3.blackbox.net.rpc.registry.roundtrip", "s3dc", [os.path.join(samba3srcdir, "script/tests/test_net_registry_roundtrip.sh"),
164                                                        scriptdir, "$SMB_CONF_PATH", binpath('net'), configuration, 'rpc'])
165
166 plantestsuite("samba3.blackbox.net.local.conf", "s3dc:local", [os.path.join(samba3srcdir, "script/tests/test_net_conf.sh"),
167                                                        scriptdir, "$SMB_CONF_PATH", binpath('net'), configuration,])
168 plantestsuite("samba3.blackbox.net.rpc.conf", "s3dc", [os.path.join(samba3srcdir, "script/tests/test_net_conf.sh"),
169                                                        scriptdir, "$SMB_CONF_PATH", binpath('net'), configuration, 'rpc'])
170
171
172 plantestsuite("samba3.blackbox.testparm", "s3dc:local", [os.path.join(samba3srcdir, "script/tests/test_testparm_s3.sh"),
173                                                        "$LOCAL_PATH"])
174
175 plantestsuite(
176     "samba3.pthreadpool", "s3dc",
177     [os.path.join(samba3srcdir, "script/tests/test_pthreadpool.sh")])
178
179 #smbtorture4 tests
180
181 base = ["base.attr", "base.charset", "base.chkpath", "base.defer_open", "base.delaywrite", "base.delete",
182         "base.deny1", "base.deny2", "base.deny3", "base.denydos", "base.dir1", "base.dir2",
183         "base.disconnect", "base.fdpass", "base.lock",
184         "base.mangle", "base.negnowait", "base.ntdeny1",
185         "base.ntdeny2", "base.open", "base.openattr", "base.properties", "base.rename", "base.rw1",
186         "base.secleak", "base.tcon", "base.tcondev", "base.trans2", "base.unlink", "base.vuid",
187         "base.xcopy", "base.samba3error"]
188
189 raw = ["raw.acls", "raw.chkpath", "raw.close", "raw.composite", "raw.context", "raw.eas",
190        "raw.ioctl", "raw.lock", "raw.mkdir", "raw.mux", "raw.notify", "raw.open", "raw.oplock"
191        "raw.qfileinfo", "raw.qfsinfo", "raw.read", "raw.rename", "raw.search", "raw.seek",
192        "raw.sfileinfo.base", "raw.sfileinfo.bug", "raw.streams", "raw.unlink", "raw.write",
193        "raw.samba3hide", "raw.samba3badpath", "raw.sfileinfo.rename",
194        "raw.samba3caseinsensitive", "raw.samba3posixtimedlock",
195        "raw.samba3rootdirfid", "raw.sfileinfo.end-of-file",
196        "raw.bench-oplock", "raw.bench-lock", "raw.bench-open", "raw.bench-tcon",
197        "raw.samba3checkfsp", "raw.samba3closeerr", "raw.samba3oplocklogoff"]
198
199 smb2 = ["smb2.lock", "smb2.read", "smb2.compound", "smb2.connect", "smb2.scan", "smb2.scanfind",
200         "smb2.bench-oplock"]
201
202 rpc = ["rpc.authcontext", "rpc.samba3.bind", "rpc.samba3.srvsvc", "rpc.samba3.sharesec",
203        "rpc.samba3.spoolss", "rpc.samba3.wkssvc", "rpc.samba3.winreg",
204        "rpc.samba3.getaliasmembership-0",
205        "rpc.samba3.netlogon", "rpc.samba3.sessionkey", "rpc.samba3.getusername",
206        "rpc.svcctl", "rpc.ntsvcs", "rpc.winreg", "rpc.eventlog",
207        "rpc.spoolss.printserver", "rpc.spoolss.win", "rpc.spoolss.notify", "rpc.spoolss.printer",
208        "rpc.spoolss.driver",
209        "rpc.lsa", "rpc.lsa-getuser", "rpc.lsa.lookupsids", "rpc.lsa.lookupnames",
210        "rpc.lsa.privileges", "rpc.lsa.secrets",
211        "rpc.samr", "rpc.samr.users", "rpc.samr.users.privileges", "rpc.samr.passwords",
212        "rpc.samr.passwords.pwdlastset", "rpc.samr.large-dc", "rpc.samr.machine.auth",
213        "rpc.samr.priv",
214        "rpc.netlogon.admin",
215        "rpc.schannel", "rpc.schannel2", "rpc.bench-schannel1", "rpc.join", "rpc.bind"]
216
217 local = ["local.nss-wrapper", "local.ndr"]
218
219 winbind = ["winbind.struct", "winbind.wbclient"]
220
221 rap = ["rap.basic", "rap.rpc", "rap.printing", "rap.sam"]
222
223 unix = ["unix.info2", "unix.whoami"]
224
225 nbt = ["nbt.dgram" ]
226
227 libsmbclient = ["libsmbclient"]
228
229 tests= base + raw + smb2 + rpc + unix + local + winbind + rap + nbt + libsmbclient
230
231 sub = subprocess.Popen("%s --version 2> /dev/null" % smb4torture, stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=True)
232 sub.communicate("")
233
234 if sub.returncode == 0:
235     for t in tests:
236         if t == "base.delaywrite":
237             plansmbtorturetestsuite(t, "s3dc", '//$SERVER_IP/tmp -U$USERNAME%$PASSWORD --maximum-runtime=900')
238         elif t == "rap.sam":
239             plansmbtorturetestsuite(t, "s3dc", '//$SERVER_IP/tmp -U$USERNAME%$PASSWORD --option=doscharset=ISO-8859-1')
240         elif t == "unix.whoami":
241             plansmbtorturetestsuite(t, "s3dc", '//$SERVER_IP/tmpguest -U$USERNAME%$PASSWORD')
242         elif t == "raw.samba3posixtimedlock":
243             plansmbtorturetestsuite(t, "s3dc", '//$SERVER_IP/tmpguest -U$USERNAME%$PASSWORD --option=torture:localdir=$SELFTEST_PREFIX/s3dc/share')
244         elif t == "raw.chkpath":
245             plansmbtorturetestsuite(t, "s3dc", '//$SERVER_IP/tmpcase -U$USERNAME%$PASSWORD')
246         else:
247             plansmbtorturetestsuite(t, "s3dc", '//$SERVER_IP/tmp -U$USERNAME%$PASSWORD')
248
249
250     test = 'rpc.lsa.lookupsids'
251     auth_options = ["", "ntlm", "spnego" ]
252     signseal_options = ["", ",connect", ",sign", ",seal"]
253     smb_options = ["", ",smb2"]
254     endianness_options = ["", ",bigendian"]
255     for z in smb_options:
256         for s in signseal_options:
257             for e in endianness_options:
258                 for a in auth_options:
259                     binding_string = "ncacn_np:$SERVER[%s%s%s%s]" % (a, s, z, e)
260                     options = binding_string + " -U$USERNAME%$PASSWORD"
261                     plansmbtorturetestsuite(test, "s3dc", options, 'over ncacn_np with [%s%s%s%s] ' % (a, s, z, e))
262
263             # We should try more combinations in future, but this is all
264             # the pre-calculated credentials cache supports at the moment
265             e = ""
266             a = ""
267             binding_string = "ncacn_np:$SERVER[%s%s%s%s]" % (a, s, z, e)
268             options = binding_string + " -k yes --krb5-ccache=$PREFIX/ktest/krb5_ccache-2"
269             plansmbtorturetestsuite(test, "ktest", options, 'over kerberos with old ccache ncacn_np with [%s%s%s%s] ' % (a, s, z, e))
270
271             options = binding_string + " -k yes --krb5-ccache=$PREFIX/ktest/krb5_ccache-3"
272             plansmbtorturetestsuite(test, "ktest", options, 'over kerberos ncacn_np with [%s%s%s%s] ' % (a, s, z, e))
273
274
275
276     for e in endianness_options:
277         for a in auth_options:
278             for s in signseal_options:
279                 binding_string = "ncacn_ip_tcp:$SERVER_IP[%s%s%s]" % (a, s, e)
280                 options = binding_string + " -U$USERNAME%$PASSWORD"
281                 plansmbtorturetestsuite(test, "s3dc", options, 'over ncacn_ip_tcp with [%s%s%s] ' % (a, s, e))
282
283     test = 'rpc.epmapper'
284     env = 's3dc:local'
285     binding_string = 'ncalrpc:'
286     options = binding_string + " -U$USERNAME%$PASSWORD"
287
288     plansmbtorturetestsuite(test, env, options, 'over ncalrpc')