7715e96caa50c3ff1dc5f2c3f2edb4225e92371a
[mat/samba.git] / source4 / 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 4 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 4, 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/knownfail. This makes it
12 # very easy to see what functionality is still missing in Samba 4 and makes
13 # it possible to run the testsuite against other servers, such as Samba 3 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.join(os.path.dirname(__file__), "../../selftest"))
23 from selftesthelpers import *
24 import subprocess
25
26 samba4srcdir = source4dir()
27 samba4bindir = bindir()
28 smb4torture = binpath("smbtorture4")
29 smb4torture_testsuite_list = subprocess.Popen([smb4torture, "--list-suites"], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate("")[0].splitlines()
30 validate = os.getenv("VALIDATE", "")
31 if validate:
32     validate_list = [validate]
33 else:
34     validate_list = []
35
36 def plansmbtorturetestsuite(name, env, options, modname=None):
37     if modname is None:
38         modname = "samba4.%s" % name
39     cmdline = "%s $LISTOPT %s %s" % (valgrindify(smb4torture), options, name)
40     plantestsuite_loadlist(modname, env, cmdline)
41
42 def smb4torture_testsuites(prefix):
43     return filter(lambda x: x.startswith(prefix), smb4torture_testsuite_list)
44
45 subprocess.call([smb4torture, "-V"])
46
47 bbdir = os.path.join(srcdir(), "testprogs/blackbox")
48
49 configuration = "--configfile=$SMB_CONF_PATH"
50
51 torture_options = [configuration, "--maximum-runtime=$SELFTEST_MAXTIME", "--target=samba4", "--basedir=$SELFTEST_TMPDIR"]
52 if not os.getenv("SELFTEST_VERBOSE"):
53     torture_options.append("--option=torture:progress=no")
54 torture_options.append("--format=subunit")
55 if os.getenv("SELFTEST_QUICK"):
56     torture_options.append("--option=torture:quick=yes")
57 smb4torture += " " + " ".join(torture_options)
58
59 print "OPTIONS %s" % " ".join(torture_options)
60
61 # Simple tests for LDAP and CLDAP
62 for options in ['-U"$USERNAME%$PASSWORD" --option=socket:testnonblock=true', '-U"$USERNAME%$PASSWORD"', '-U"$USERNAME%$PASSWORD" -k yes', '-U"$USERNAME%$PASSWORD" -k no', '-U"$USERNAME%$PASSWORD" -k no --sign', '-U"$USERNAME%$PASSWORD" -k no --encrypt', '-U"$USERNAME%$PASSWORD" -k yes --encrypt', '-U"$USERNAME%$PASSWORD" -k yes --sign']:
63     plantestsuite("samba4.ldb.ldap with options %s(dc)" % options, "dc", "%s/test_ldb.sh ldap $SERVER %s" % (bbdir, options))
64
65 # see if we support ADS on the Samba3 side
66 try:
67     config_h = os.environ["CONFIG_H"]
68 except KeyError:
69     config_h = os.path.join(samba4bindir, "default/include/config.h")
70
71 f = open(config_h, 'r')
72 try:
73     # The other parts of the HAVE_ADS test are always supplied by the top level build
74     have_ads_support = ("HAVE_LDAP 1" in f.read())
75 finally:
76     f.close()
77
78 # see if we support ldaps
79 f = open(config_h, 'r')
80 try:
81     have_tls_support = ("ENABLE_GNUTLS 1" in f.read())
82 finally:
83     f.close()
84
85 if have_tls_support:
86     for options in ['-U"$USERNAME%$PASSWORD"']:
87         plantestsuite("samba4.ldb.ldaps with options %s(dc)" % options, "dc",
88                 "%s/test_ldb.sh ldaps $SERVER_IP %s" % (bbdir, options))
89
90 for options in ['-U"$USERNAME%$PASSWORD"']:
91     plantestsuite("samba4.ldb.ldapi with options %s(dc:local)" % options, "dc:local",
92             "%s/test_ldb.sh ldapi $PREFIX_ABS/dc/private/ldapi %s" % (bbdir, options))
93
94 for t in smb4torture_testsuites("ldap."):
95     plansmbtorturetestsuite(t, "dc", '-U"$USERNAME%$PASSWORD" //$SERVER_IP/_none_')
96
97 ldbdir = os.path.join(srcdir(), "lib/ldb")
98 # Don't run LDB tests when using system ldb, as we won't have ldbtest installed
99 if os.path.exists(os.path.join(samba4bindir, "ldbtest")):
100     plantestsuite("ldb.base", "none", "%s/tests/test-tdb.sh" % ldbdir,
101                   allow_empty_output=True)
102 else:
103     skiptestsuite("ldb.base", "Using system LDB, ldbtest not available")
104
105 # Tests for RPC
106
107 # add tests to this list as they start passing, so we test
108 # that they stay passing
109 ncacn_np_tests = ["rpc.schannel", "rpc.join", "rpc.lsa", "rpc.dssetup", "rpc.altercontext", "rpc.multibind", "rpc.netlogon", "rpc.handles", "rpc.samsync", "rpc.samba3-sessionkey", "rpc.samba3-getusername", "rpc.samba3-lsa", "rpc.samba3-bind", "rpc.samba3-netlogon", "rpc.asyncbind", "rpc.lsalookup", "rpc.lsa-getuser", "rpc.schannel2", "rpc.authcontext"]
110 ncalrpc_tests = ["rpc.schannel", "rpc.join", "rpc.lsa", "rpc.dssetup", "rpc.altercontext", "rpc.multibind", "rpc.netlogon", "rpc.drsuapi", "rpc.asyncbind", "rpc.lsalookup", "rpc.lsa-getuser", "rpc.schannel2", "rpc.authcontext"]
111 drs_rpc_tests = smb4torture_testsuites("drs.rpc")
112 ncacn_ip_tcp_tests = ["rpc.schannel", "rpc.join", "rpc.lsa", "rpc.dssetup", "rpc.altercontext", "rpc.multibind", "rpc.netlogon", "rpc.handles", "rpc.asyncbind", "rpc.lsalookup", "rpc.lsa-getuser", "rpc.schannel2", "rpc.authcontext", "rpc.objectuuid"] + drs_rpc_tests
113 slow_ncacn_np_tests = ["rpc.samlogon", "rpc.samr.users", "rpc.samr.large-dc", "rpc.samr.users.privileges", "rpc.samr.passwords", "rpc.samr.passwords.pwdlastset"]
114 slow_ncacn_ip_tcp_tests = ["rpc.samr", "rpc.cracknames"]
115
116 all_rpc_tests = ncalrpc_tests + ncacn_np_tests + ncacn_ip_tcp_tests + slow_ncacn_np_tests + slow_ncacn_ip_tcp_tests + ["rpc.lsa.secrets", "rpc.pac", "rpc.samba3-sharesec", "rpc.countcalls"]
117
118 # Make sure all tests get run
119 rpc_tests = smb4torture_testsuites("rpc.")
120 auto_rpc_tests = filter(lambda t: t not in all_rpc_tests, rpc_tests)
121
122 for bindoptions in ["seal,padcheck"] + validate_list + ["bigendian"]:
123     for transport in ["ncalrpc", "ncacn_np", "ncacn_ip_tcp"]:
124         env = "dc"
125         if transport == "ncalrpc":
126             tests = ncalrpc_tests
127             env = "dc:local"
128         elif transport == "ncacn_np":
129             tests = ncacn_np_tests
130         elif transport == "ncacn_ip_tcp":
131             tests = ncacn_ip_tcp_tests
132         for t in tests:
133             plantestsuite_loadlist("samba4.%s on %s with %s" % (t, transport, bindoptions), env, [valgrindify(smb4torture), "$LISTOPT", "%s:$SERVER[%s]" % (transport, bindoptions), '-U$USERNAME%$PASSWORD', '-W', '$DOMAIN', t])
134         plantestsuite_loadlist("samba4.rpc.samba3.sharesec on %s with %s" % (transport, bindoptions), env, [valgrindify(smb4torture), "$LISTOPT", "%s:$SERVER[%s]" % (transport, bindoptions), '-U$USERNAME%$PASSWORD', '-W', '$DOMAIN', '--option=torture:share=tmp', 'rpc.samba3-sharesec'])
135
136 #Plugin S4 DC tests (confirms named pipe auth forwarding).  This can be expanded once kerberos is supported in the plugin DC
137 #
138 if have_ads_support:
139     for bindoptions in ["seal,padcheck"] + validate_list + ["bigendian"]:
140         for t in ncacn_np_tests:
141             env = "plugin_s4_dc"
142             transport = "ncacn_np"
143             plantestsuite_loadlist("samba4.%s with %s" % (t, bindoptions), env, [valgrindify(smb4torture), "$LISTOPT", "%s:$SERVER[%s]" % (transport, bindoptions), '-U$USERNAME%$PASSWORD', '-W', '$DOMAIN', '-k', 'no', t])
144
145 for bindoptions in [""] + validate_list + ["bigendian"]:
146     for t in auto_rpc_tests:
147         plantestsuite_loadlist("samba4.%s with %s" % (t, bindoptions), "dc", [valgrindify(smb4torture), "$LISTOPT", "$SERVER[%s]" % bindoptions, '-U$USERNAME%$PASSWORD', '-W', '$DOMAIN', t])
148
149 t = "rpc.countcalls"
150 plantestsuite_loadlist("samba4.%s" % t, "dc:local", [valgrindify(smb4torture), "$LISTOPT", "$SERVER[%s]" % bindoptions, '-U$USERNAME%$PASSWORD', '-W', '$DOMAIN', t])
151
152 for transport in ["ncacn_np", "ncacn_ip_tcp"]:
153     env = "dc"
154     if transport == "ncacn_np":
155         tests = slow_ncacn_np_tests
156     elif transport == "ncacn_ip_tcp":
157         tests = slow_ncacn_ip_tcp_tests
158     for t in tests:
159         plantestsuite_loadlist("samba4.%s on %s" % (t, transport), env, [valgrindify(smb4torture), "$LISTOPT", "%s:$SERVER" % transport, '-U$USERNAME%$PASSWORD', '-W', '$DOMAIN', t])
160
161 # Tests for the DFS referral calls implementation
162 for t in smb4torture_testsuites("dfs."):
163     plansmbtorturetestsuite(t, "dc", '//$SERVER/ipc\$ -U$USERNAME%$PASSWORD')
164     plansmbtorturetestsuite(t, "plugin_s4_dc", '//$SERVER/ipc\$ -U$USERNAME%$PASSWORD')
165
166 # Tests for the NET API (net.api.become.dc tested below against all the roles)
167 net_tests = filter(lambda x: "net.api.become.dc" not in x, smb4torture_testsuites("net."))
168 for t in net_tests:
169     plansmbtorturetestsuite(t, "dc", '$SERVER[%s] -U$USERNAME%%$PASSWORD -W $DOMAIN' % validate)
170
171 # Tests for session keys and encryption of RPC pipes
172 # FIXME: Integrate these into a single smbtorture test
173
174 transport = "ncacn_np"
175 for ntlmoptions in [
176     "-k no --option=usespnego=yes",
177     "-k no --option=usespnego=yes --option=ntlmssp_client:128bit=no",
178     "-k no --option=usespnego=yes --option=ntlmssp_client:56bit=yes",
179     "-k no --option=usespnego=yes --option=ntlmssp_client:56bit=no",
180     "-k no --option=usespnego=yes --option=ntlmssp_client:128bit=no --option=ntlmssp_client:56bit=yes",
181     "-k no --option=usespnego=yes --option=ntlmssp_client:128bit=no --option=ntlmssp_client:56bit=no",
182     "-k no --option=usespnego=yes --option=clientntlmv2auth=yes",
183     "-k no --option=usespnego=yes --option=clientntlmv2auth=yes --option=ntlmssp_client:128bit=no",
184     "-k no --option=usespnego=yes --option=clientntlmv2auth=yes --option=ntlmssp_client:128bit=no --option=ntlmssp_client:56bit=yes",
185     "-k no --option=usespnego=no --option=clientntlmv2auth=yes",
186     "-k no --option=gensec:spnego=no --option=clientntlmv2auth=yes",
187     "-k no --option=usespnego=no"]:
188     name = "rpc.lsa.secrets on %s with with %s" % (transport, ntlmoptions)
189     plantestsuite_loadlist("samba4.%s" % name, "dc", [smb4torture, "$LISTOPT", "%s:$SERVER[]" % (transport), ntlmoptions, '-U$USERNAME%$PASSWORD', '-W', '$DOMAIN', '--option=gensec:target_hostname=$NETBIOSNAME', 'rpc.lsa.secrets'])
190
191 transports = ["ncacn_np", "ncacn_ip_tcp"]
192
193 #Kerberos varies between functional levels, so it is important to check this on all of them
194 for env in ["dc", "fl2000dc", "fl2003dc", "fl2008r2dc"]:
195     transport = "ncacn_np"
196     plantestsuite_loadlist("samba4.rpc.pac on %s" % (transport,), env, [smb4torture, "$LISTOPT", "%s:$SERVER[]" % (transport, ), '-U$USERNAME%$PASSWORD', '-W', '$DOMAIN', 'rpc.pac'])
197     for transport in transports:
198         plantestsuite_loadlist("samba4.rpc.lsa.secrets on %s with Kerberos" % (transport,), env, [smb4torture, "$LISTOPT", "%s:$SERVER[]" % (transport, ), '-k', 'yes', '-U$USERNAME%$PASSWORD', '-W', '$DOMAIN', '--option=gensec:target_hostname=$NETBIOSNAME', 'rpc.lsa.secrets'])
199         plantestsuite_loadlist("samba4.rpc.lsa.secrets on %s with Kerberos - use target principal" % (transport,), env, [smb4torture, "$LISTOPT", "%s:$SERVER[]" % (transport, ), '-k', 'yes', '-U$USERNAME%$PASSWORD', '-W', '$DOMAIN', "--option=clientusespnegoprincipal=yes", '--option=gensec:target_hostname=$NETBIOSNAME', 'rpc.lsa.secrets'])
200         plantestsuite_loadlist("samba4.rpc.lsa.secrets on %s with Kerberos - use Samba3 style login" % transport, env, [smb4torture, "$LISTOPT", "%s:$SERVER" % transport, '-k', 'yes', '-U$USERNAME%$PASSWORD', '-W', '$DOMAIN', "--option=gensec:fake_gssapi_krb5=yes", '--option=gensec:gssapi_krb5=no', '--option=gensec:target_hostname=$NETBIOSNAME', "rpc.lsa.secrets.none*"])
201         plantestsuite_loadlist("samba4.rpc.lsa.secrets on %s with Kerberos - use Samba3 style login, use target principal" % transport, env, [smb4torture, "$LISTOPT", "%s:$SERVER" % transport, '-k', 'yes', '-U$USERNAME%$PASSWORD', '-W', '$DOMAIN', "--option=clientusespnegoprincipal=yes", '--option=gensec:fake_gssapi_krb5=yes', '--option=gensec:gssapi_krb5=no', '--option=gensec:target_hostname=$NETBIOSNAME', "rpc.lsa.secrets.none*"])
202         plantestsuite_loadlist("samba4.rpc.echo on %s" % (transport, ), env, [smb4torture, "$LISTOPT", "%s:$SERVER[]" % (transport,), '-U$USERNAME%$PASSWORD', '-W', '$DOMAIN', 'rpc.echo'])
203
204         # Echo tests test bulk Kerberos encryption of DCE/RPC
205         for bindoptions in ["connect", "spnego", "spnego,sign", "spnego,seal"] + validate_list + ["padcheck", "bigendian", "bigendian,seal"]:
206             echooptions = "--option=socket:testnonblock=True --option=torture:quick=yes -k yes"
207             plantestsuite_loadlist("samba4.rpc.echo on %s with %s and %s" % (transport, bindoptions, echooptions), env, [smb4torture, "$LISTOPT", "%s:$SERVER[%s]" % (transport, bindoptions), echooptions, '-U$USERNAME%$PASSWORD', '-W', '$DOMAIN', 'rpc.echo'])
208     plansmbtorturetestsuite("net.api.become.dc", env, '$SERVER[%s] -U$USERNAME%%$PASSWORD -W $DOMAIN' % validate)
209
210 for bindoptions in ["sign", "seal"]:
211     env = "dc"
212     plantestsuite_loadlist("samba4.rpc.backupkey with %s" % (bindoptions), env, [smb4torture, "$LISTOPT", "ncacn_np:$SERVER[%s]" % ( bindoptions), '-U$USERNAME%$PASSWORD', '-W', '$DOMAIN', 'rpc.backupkey'])
213
214 for transport in transports:
215     for bindoptions in ["sign", "seal"]:
216         for ntlmoptions in [
217         "--option=ntlmssp_client:ntlm2=yes --option=torture:quick=yes",
218         "--option=ntlmssp_client:ntlm2=no --option=torture:quick=yes",
219         "--option=ntlmssp_client:ntlm2=yes --option=ntlmssp_client:128bit=no --option=torture:quick=yes",
220         "--option=ntlmssp_client:ntlm2=no --option=ntlmssp_client:128bit=no --option=torture:quick=yes",
221         "--option=ntlmssp_client:ntlm2=yes --option=ntlmssp_client:keyexchange=no --option=torture:quick=yes",
222         "--option=ntlmssp_client:ntlm2=no --option=ntlmssp_client:keyexchange=no --option=torture:quick=yes",
223         "--option=clientntlmv2auth=yes --option=ntlmssp_client:keyexchange=no --option=torture:quick=yes",
224         "--option=clientntlmv2auth=yes --option=ntlmssp_client:128bit=no --option=ntlmssp_client:keyexchange=yes --option=torture:quick=yes",
225         "--option=clientntlmv2auth=yes --option=ntlmssp_client:128bit=no --option=ntlmssp_client:keyexchange=no --option=torture:quick=yes"]:
226             if transport == "ncalrpc":
227                 env = "dc:local"
228             else:
229                 env = "dc"
230             plantestsuite_loadlist("samba4.rpc.echo on %s with %s and %s" % (transport, bindoptions, ntlmoptions), env, [smb4torture, "$LISTOPT", "%s:$SERVER[%s]" % (transport, bindoptions), ntlmoptions, '-U$USERNAME%$PASSWORD', '-W', '$DOMAIN', 'rpc.echo'])
231
232 plantestsuite_loadlist("samba4.rpc.echo on ncacn_np over smb2", "dc", [smb4torture, "$LISTOPT", 'ncacn_np:$SERVER[smb2]', '-U$USERNAME%$PASSWORD', '-W', '$DOMAIN', 'rpc.echo'])
233
234 plantestsuite_loadlist("samba4.ntp.signd", "dc:local", [smb4torture, "$LISTOPT", 'ncacn_np:$SERVER', '-U$USERNAME%$PASSWORD', '-W', '$DOMAIN', 'ntp.signd'])
235
236 nbt_tests = smb4torture_testsuites("nbt.")
237 for t in nbt_tests:
238     plansmbtorturetestsuite(t, "dc", "//$SERVER/_none_ -U\"$USERNAME%$PASSWORD\"")
239
240 # Tests against the NTVFS POSIX backend
241 ntvfsargs = ["--option=torture:sharedelay=10000", "--option=torture:oplocktimeout=3", "--option=torture:writetimeupdatedelay=50000"]
242
243 smb2 = smb4torture_testsuites("smb2.")
244 #The QFILEINFO-IPC test needs to be on ipc$
245 raw = filter(lambda x: "raw.qfileinfo.ipc" not in x, smb4torture_testsuites("raw."))
246 base = smb4torture_testsuites("base.")
247
248 netapi = smb4torture_testsuites("netapi.")
249
250 libsmbclient = smb4torture_testsuites("libsmbclient.")
251
252 for t in base + raw + smb2 + netapi + libsmbclient:
253     plansmbtorturetestsuite(t, "dc", '//$SERVER/tmp -U$USERNAME%$PASSWORD' + " " + " ".join(ntvfsargs))
254
255 plansmbtorturetestsuite("raw.qfileinfo.ipc", "dc", '//$SERVER/ipc\$ -U$USERNAME%$PASSWORD')
256
257 for t in smb4torture_testsuites("rap."):
258     plansmbtorturetestsuite(t, "dc", '//$SERVER/IPC\$ -U$USERNAME%$PASSWORD')
259
260 # Tests against the NTVFS CIFS backend
261 for t in base + raw:
262     plantestsuite_loadlist("samba4.ntvfs.cifs.krb5.%s" % t, "dc", [valgrindify(smb4torture), "$LISTOPT", '//$NETBIOSNAME/cifs', '-U$USERNAME%$PASSWORD', '--kerberos=yes'] + ntvfsargs + [t])
263
264 # Test NTVFS CIFS backend with S4U2Self and S4U2Proxy
265 t = "base.unlink"
266 plantestsuite_loadlist("samba4.ntvfs.cifs.ntlm.%s" % t, "dc", [valgrindify(smb4torture), "$LISTOPT", '//$NETBIOSNAME/cifs', '-U$USERNAME%$PASSWORD', '--kerberos=no'] + ntvfsargs + [t])
267 plantestsuite_loadlist("samba4.ntvfs.cifs.krb5.%s" % t, "rpc_proxy", [valgrindify(smb4torture), "$LISTOPT", '//$NETBIOSNAME/cifs_to_dc', '-U$DC_USERNAME%$DC_PASSWORD', '--kerberos=yes'] + ntvfsargs + [t])
268 plantestsuite_loadlist("samba4.ntvfs.cifs.ntlm.%s" % t, "rpc_proxy", [valgrindify(smb4torture), "$LISTOPT", '//$NETBIOSNAME/cifs_to_dc', '-U$DC_USERNAME%$DC_PASSWORD', '--kerberos=no'] + ntvfsargs + [t])
269
270 plansmbtorturetestsuite('echo.udp', 'dc:local', '//$SERVER/whatever')
271
272 # Local tests
273 for t in smb4torture_testsuites("local."):
274     plansmbtorturetestsuite(t, "none", "ncalrpc:")
275
276 # Confirm these tests with the system iconv too
277 for t in ["local.convert_string_handle", "local.convert_string", "local.ndr"]:
278     options = "ncalrpc: --option='iconv:use_builtin_handlers=false'"
279     plansmbtorturetestsuite(t, "none", options,
280         modname="samba4.%s.system.iconv" % t)
281
282 tdbtorture4 = binpath("tdbtorture")
283 if os.path.exists(tdbtorture4):
284     plantestsuite("tdb.stress", "none", valgrindify(tdbtorture4))
285 else:
286     skiptestsuite("tdb.stress", "Using system TDB, tdbtorture not available")
287
288 plansmbtorturetestsuite("drs.unit", "none", "ncalrpc:")
289
290 # Pidl tests
291 for f in sorted(os.listdir(os.path.join(samba4srcdir, "../pidl/tests"))):
292     if f.endswith(".pl"):
293         planperltestsuite("pidl.%s" % f[:-3], os.path.normpath(os.path.join(samba4srcdir, "../pidl/tests", f)))
294
295 # Blackbox Tests:
296 # tests that interact directly with the command-line tools rather than using
297 # the API. These mainly test that the various command-line options of commands
298 # work correctly.
299
300 planpythontestsuite("none", "samba.tests.blackbox.ndrdump")
301 planpythontestsuite("none", "samba.tests.source")
302 plantestsuite("samba4.blackbox.samba_tool(dc:local)", "dc:local", [os.path.join(samba4srcdir, "utils/tests/test_samba_tool.sh"),  '$SERVER', "$USERNAME", "$PASSWORD", "$DOMAIN"])
303 plantestsuite("samba4.blackbox.pkinit(dc:local)", "dc:local", [os.path.join(bbdir, "test_pkinit.sh"), '$SERVER', '$USERNAME', '$PASSWORD', '$REALM', '$DOMAIN', '$PREFIX', "aes256-cts-hmac-sha1-96", configuration])
304 plantestsuite("samba4.blackbox.kinit(dc:local)", "dc:local", [os.path.join(bbdir, "test_kinit.sh"), '$SERVER', '$USERNAME', '$PASSWORD', '$REALM', '$DOMAIN', '$PREFIX', "aes256-cts-hmac-sha1-96", configuration])
305 plantestsuite("samba4.blackbox.kinit(fl2000dc:local)", "fl2000dc:local", [os.path.join(bbdir, "test_kinit.sh"), '$SERVER', '$USERNAME', '$PASSWORD', '$REALM', '$DOMAIN', '$PREFIX', "arcfour-hmac-md5", configuration])
306 plantestsuite("samba4.blackbox.kinit(fl2008r2dc:local)", "fl2008r2dc:local", [os.path.join(bbdir, "test_kinit.sh"), '$SERVER', '$USERNAME', '$PASSWORD', '$REALM', '$DOMAIN', '$PREFIX', "aes256-cts-hmac-sha1-96", configuration])
307 plantestsuite("samba4.blackbox.ktpass(dc)", "dc", [os.path.join(bbdir, "test_ktpass.sh"), '$PREFIX'])
308 plantestsuite("samba4.blackbox.passwords(dc:local)", "dc:local", [os.path.join(bbdir, "test_passwords.sh"), '$SERVER', '$USERNAME', '$PASSWORD', '$REALM', '$DOMAIN', "$PREFIX"])
309 plantestsuite("samba4.blackbox.export.keytab(dc:local)", "dc:local", [os.path.join(bbdir, "test_export_keytab.sh"), '$SERVER', '$USERNAME', '$REALM', '$DOMAIN', "$PREFIX"])
310 plantestsuite("samba4.blackbox.cifsdd(dc)", "dc", [os.path.join(samba4srcdir, "client/tests/test_cifsdd.sh"), '$SERVER', '$USERNAME', '$PASSWORD', "$DOMAIN"])
311 plantestsuite("samba4.blackbox.nmblookup(dc)", "dc", [os.path.join(samba4srcdir, "utils/tests/test_nmblookup.sh"), '$NETBIOSNAME', '$NETBIOSALIAS', '$SERVER', '$SERVER_IP'])
312 plantestsuite("samba4.blackbox.locktest(dc)", "dc", [os.path.join(samba4srcdir, "torture/tests/test_locktest.sh"), '$SERVER', '$USERNAME', '$PASSWORD', '$DOMAIN', '$PREFIX'])
313 plantestsuite("samba4.blackbox.masktest", "dc", [os.path.join(samba4srcdir, "torture/tests/test_masktest.sh"), '$SERVER', '$USERNAME', '$PASSWORD', '$DOMAIN', '$PREFIX'])
314 plantestsuite("samba4.blackbox.gentest(dc)", "dc", [os.path.join(samba4srcdir, "torture/tests/test_gentest.sh"), '$SERVER', '$USERNAME', '$PASSWORD', '$DOMAIN', "$PREFIX"])
315 plantestsuite("samba4.blackbox.wbinfo(dc:local)", "dc:local", [os.path.join(samba4srcdir, "../nsswitch/tests/test_wbinfo.sh"), '$DOMAIN', '$USERNAME', '$PASSWORD', "dc"])
316 plantestsuite("samba4.blackbox.wbinfo(s4member:local)", "s4member:local", [os.path.join(samba4srcdir, "../nsswitch/tests/test_wbinfo.sh"), '$DOMAIN', '$DC_USERNAME', '$DC_PASSWORD', "s4member"])
317 plantestsuite("samba4.blackbox.chgdcpass(dc)", "dc", [os.path.join(bbdir, "test_chgdcpass.sh"), '$SERVER', "LOCALDC\$", '$REALM', '$DOMAIN', '$PREFIX', "aes256-cts-hmac-sha1-96", '$SELFTEST_PREFIX/dc'])
318
319 # Tests using the "Simple" NTVFS backend
320 for t in ["base.rw1"]:
321     plantestsuite_loadlist("samba4.ntvfs.simple.%s" % t, "dc", [valgrindify(smb4torture), "$LISTOPT", "//$SERVER/simple", '-U$USERNAME%$PASSWORD', t])
322
323 # Domain S4member Tests
324 plantestsuite_loadlist("samba4.rpc.echo against s4member server with local creds", "s4member", [valgrindify(smb4torture), "$LISTOPT", 'ncacn_np:$NETBIOSNAME', '-U$NETBIOSNAME/$USERNAME%$PASSWORD', 'rpc.echo'])
325 plantestsuite_loadlist("samba4.rpc.echo against s4member server with domain creds", "s4member", [valgrindify(smb4torture), "$LISTOPT", 'ncacn_np:$NETBIOSNAME', '-U$DOMAIN/$DC_USERNAME%$DC_PASSWORD', 'rpc.echo'])
326 plantestsuite_loadlist("samba4.rpc.samr against s4member server with local creds", "s4member", [valgrindify(smb4torture), "$LISTOPT", 'ncacn_np:$NETBIOSNAME', '-U$NETBIOSNAME/$USERNAME%$PASSWORD', "rpc.samr"])
327 plantestsuite_loadlist("samba4.rpc.samr.users against s4member server with local creds", "s4member", [valgrindify(smb4torture), "$LISTOPT", 'ncacn_np:$NETBIOSNAME', '-U$NETBIOSNAME/$USERNAME%$PASSWORD', "rpc.samr.users"])
328 plantestsuite_loadlist("samba4.rpc.samr.passwords against s4member server with local creds", "s4member", [valgrindify(smb4torture), "$LISTOPT", 'ncacn_np:$NETBIOSNAME', '-U$NETBIOSNAME/$USERNAME%$PASSWORD', "rpc.samr.passwords"])
329 plantestsuite("samba4.blackbox.smbclient against s4member server with local creds", "s4member", [os.path.join(samba4srcdir, "client/tests/test_smbclient.sh"), '$NETBIOSNAME', '$USERNAME', '$PASSWORD', '$NETBIOSNAME', '$PREFIX'])
330
331 # RPC Proxy
332 plantestsuite_loadlist("samba4.rpc.echo against rpc proxy with domain creds", "rpc_proxy", [valgrindify(smb4torture), "$LISTOPT", 'ncacn_ip_tcp:$NETBIOSNAME', '-U$DOMAIN/$DC_USERNAME%$DC_PASSWORD', "rpc.echo"])
333
334 # Tests SMB signing
335 for mech in [
336     "-k no",
337     "-k no --option=usespnego=no",
338     "-k no --option=gensec:spengo=no",
339     "-k yes",
340     "-k yes --option=gensec:fake_gssapi_krb5=yes --option=gensec:gssapi_krb5=no"]:
341     for signing in ["--signing=on", "--signing=required"]:
342         signoptions = "%s %s" % (mech, signing)
343         name = "smb.signing on with %s" % signoptions
344         plantestsuite_loadlist("samba4.%s" % name, "dc", [valgrindify(smb4torture), "$LISTOPT", '//$NETBIOSNAME/xcopy_share', signoptions, '-U$USERNAME%$PASSWORD', 'base.xcopy'])
345
346 for mech in [
347     "-k no",
348     "-k no --option=usespnego=no",
349     "-k no --option=gensec:spengo=no",
350     "-k yes"]:
351     signoptions = "%s --signing=off" % mech
352     name = "smb.signing disabled on with %s" % signoptions
353     plantestsuite_loadlist("samba4.%s domain-creds" % name, "s4member", [valgrindify(smb4torture), "$LISTOPT", '//$NETBIOSNAME/xcopy_share', signoptions, '-U$DC_USERNAME%$DC_PASSWORD', 'base.xcopy'])
354     if have_ads_support:
355         plantestsuite_loadlist("samba4.%s domain-creds" % name, "s3member", [valgrindify(smb4torture), "$LISTOPT", '//$NETBIOSNAME/xcopy_share', signoptions, '-U$DC_USERNAME%$DC_PASSWORD', 'base.xcopy'])
356         plantestsuite_loadlist("samba4.%s" % name, "plugin_s4_dc", [valgrindify(smb4torture), "$LISTOPT", '//$NETBIOSNAME/xcopy_share', signoptions, '-U$USERNAME%$PASSWORD', 'base.xcopy'])
357         plantestsuite_loadlist("samba4.%s administrator" % name, "plugin_s4_dc",
358                                [valgrindify(smb4torture), "$LISTOPT", '//$NETBIOSNAME/xcopy_share', signoptions, '-U$DC_USERNAME%$DC_PASSWORD', 'base.xcopy'])
359
360 for mech in [
361     "-k no",
362     "-k no --option=usespnego=no",
363     "-k no --option=gensec:spengo=no"]:
364     signoptions = "%s --signing=off" % mech
365     name = "smb.signing on with %s" % signoptions
366     plantestsuite_loadlist("samba4.%s local-creds" % name, "s4member", [valgrindify(smb4torture), "$LISTOPT", '//$NETBIOSNAME/xcopy_share', signoptions, '-U$NETBIOSNAME/$USERNAME%$PASSWORD', 'base.xcopy'])
367
368 plantestsuite_loadlist("samba4.smb.signing --signing=yes anon", "dc", [valgrindify(smb4torture), "$LISTOPT", '//$NETBIOSNAME/xcopy_share', '-k', 'no', '--signing=yes', '-U%', 'base.xcopy'])
369 plantestsuite_loadlist("samba4.smb.signing --signing=required anon", "dc", [valgrindify(smb4torture), "$LISTOPT", '//$NETBIOSNAME/xcopy_share', '-k', 'no', '--signing=required', '-U%', 'base.xcopy'])
370 plantestsuite_loadlist("samba4.smb.signing --signing=no anon", "s4member",  [valgrindify(smb4torture), "$LISTOPT", '//$NETBIOSNAME/xcopy_share', '-k', 'no', '--signing=no', '-U%', 'base.xcopy'])
371
372
373 wb_opts = ["--option=\"torture:strict mode=no\"", "--option=\"torture:timelimit=1\"", "--option=\"torture:winbindd_separator=/\"", "--option=\"torture:winbindd_netbios_name=$SERVER\"", "--option=\"torture:winbindd_netbios_domain=$DOMAIN\""]
374
375 winbind_struct_tests = smb4torture_testsuites("winbind.struct")
376 winbind_ndr_tests = smb4torture_testsuites("winbind.ndr")
377 for env in ["dc", "s4member"]:
378     for t in winbind_struct_tests:
379         plansmbtorturetestsuite(t, env, "%s //_none_/_none_" % " ".join(wb_opts))
380
381     for t in winbind_ndr_tests:
382         plansmbtorturetestsuite(t, env, "%s //_none_/_none_" % " ".join(wb_opts))
383
384 nsstest4 = binpath("nsstest")
385 if os.path.exists(nsstest4):
386     plantestsuite("samba4.nss.test using winbind(s4member)", "s4member", [valgrindify(nsstest4), os.path.join(samba4bindir, "shared/libnss_winbind.so")])
387 else:
388     skiptestsuite("samba4.nss.test using winbind(s4member)", "nsstest not available")
389
390 subunitrun = valgrindify(python) + " " + os.path.join(samba4srcdir, "scripting/bin/subunitrun")
391 def planoldpythontestsuite(env, module, name=None, extra_path=[], environ={}, extra_args=[]):
392     environ = dict(environ)
393     py_path = list(extra_path)
394     if py_path:
395         environ["PYTHONPATH"] = ":".join(["$PYTHONPATH"] + py_path)
396     args = ["%s=%s" % item for item in environ.iteritems()]
397     args += [subunitrun, "$LISTOPT", module]
398     args += extra_args
399     if name is None:
400         name = module
401     plantestsuite(name, env, args)
402
403 planpythontestsuite("none", "api", name="ldb.python", extra_path=['lib/ldb/tests/python'])
404 planpythontestsuite("none", "samba.tests.credentials")
405 planoldpythontestsuite("dc:local", "samba.tests.gensec", extra_args=['-U"$USERNAME%$PASSWORD"'])
406 planpythontestsuite("none", "samba.tests.registry")
407 planoldpythontestsuite("none", "simple", extra_path=["%s/lib/tdb/python/tests" % srcdir()], name="tdb.python")
408 planpythontestsuite("none", "samba.tests.auth")
409 planpythontestsuite("none", "samba.tests.getopt")
410 planpythontestsuite("none", "samba.tests.security")
411 planpythontestsuite("none", "samba.tests.dcerpc.misc")
412 planpythontestsuite("none", "samba.tests.param")
413 planpythontestsuite("none", "samba.tests.upgrade")
414 planpythontestsuite("none", "samba.tests.core")
415 planpythontestsuite("none", "samba.tests.provision")
416 planpythontestsuite("none", "samba.tests.samba3")
417 planpythontestsuite("none", "samba.tests.strings")
418 planpythontestsuite("dc:local", "samba.tests.dcerpc.sam")
419 planpythontestsuite("dc:local", "samba.tests.dsdb")
420 planpythontestsuite("none", "samba.tests.netcmd")
421 planpythontestsuite("dc:local", "samba.tests.dcerpc.bare")
422 planpythontestsuite("dc:local", "samba.tests.dcerpc.unix")
423 planpythontestsuite("none", "samba.tests.dcerpc.rpc_talloc")
424 planpythontestsuite("none", "samba.tests.samdb")
425 planpythontestsuite("none", "samba.tests.hostconfig")
426 planpythontestsuite("none", "samba.tests.messaging")
427 planpythontestsuite("none", "samba.tests.samba3sam")
428
429 planpythontestsuite("dc:local", "samba.tests.samba_tool.timecmd")
430 planpythontestsuite("dc:local", "samba.tests.samba_tool.user")
431
432 planpythontestsuite("none", "subunit")
433 planpythontestsuite("dc:local", "samba.tests.dcerpc.rpcecho")
434 planoldpythontestsuite("dc:local", "samba.tests.dcerpc.registry", extra_args=['-U"$USERNAME%$PASSWORD"'])
435 planoldpythontestsuite("dc", "samba.tests.dcerpc.dnsserver", extra_args=['-U"$USERNAME%$PASSWORD"'])
436 plantestsuite("samba4.ldap.python(dc)", "dc", [python, os.path.join(samba4srcdir, "dsdb/tests/python/ldap.py"), '$SERVER', '-U"$USERNAME%$PASSWORD"', '-W', '$DOMAIN'])
437 plantestsuite("samba4.tokengroups.python(dc)", "dc:local", [python, os.path.join(samba4srcdir, "dsdb/tests/python/token_group.py"), '$SERVER', '-U"$USERNAME%$PASSWORD"', '-W', '$DOMAIN'])
438 plantestsuite("samba4.sam.python(dc)", "dc", [python, os.path.join(samba4srcdir, "dsdb/tests/python/sam.py"), '$SERVER', '-U"$USERNAME%$PASSWORD"', '-W', '$DOMAIN'])
439 planoldpythontestsuite("dc", "dsdb_schema_info",
440         extra_path=[os.path.join(samba4srcdir, 'dsdb/tests/python')],
441         name="samba4.schemaInfo.python(dc)",
442         extra_args=['-U"$DOMAIN/$DC_USERNAME%$DC_PASSWORD"'])
443 plantestsuite("samba4.urgent_replication.python(dc)", "dc:local", [python, os.path.join(samba4srcdir, "dsdb/tests/python/urgent_replication.py"), '$PREFIX_ABS/dc/private/sam.ldb'], allow_empty_output=True)
444 plantestsuite("samba4.ldap.dirsync.python(dc)", "dc", [python, os.path.join(samba4srcdir, "dsdb/tests/python/dirsync.py"), '$SERVER', '-U"$USERNAME%$PASSWORD"', '-W', '$DOMAIN'])
445 plantestsuite("samba4.ldap.sites.python(dc)", "dc", [python, os.path.join(samba4srcdir, "dsdb/tests/python/sites.py"), '$SERVER', '-U"$USERNAME%$PASSWORD"', '-W', '$DOMAIN'])
446 for env in ["dc", "fl2000dc", "fl2003dc", "fl2008r2dc"]:
447     plantestsuite("samba4.ldap_schema.python(%s)" % env, env, [python, os.path.join(samba4srcdir, "dsdb/tests/python/ldap_schema.py"), '$SERVER', '-U"$USERNAME%$PASSWORD"', '-W', '$DOMAIN'])
448     plantestsuite("samba4.ldap.possibleInferiors.python(%s)" % env, env, [python, os.path.join(samba4srcdir, "dsdb/samdb/ldb_modules/tests/possibleinferiors.py"), "ldap://$SERVER", '-U"$USERNAME%$PASSWORD"', "-W", "$DOMAIN"])
449     plantestsuite("samba4.ldap.secdesc.python(%s)" % env, env, [python, os.path.join(samba4srcdir, "dsdb/tests/python/sec_descriptor.py"), '$SERVER', '-U"$USERNAME%$PASSWORD"', '-W', '$DOMAIN'])
450     plantestsuite("samba4.ldap.acl.python(%s)" % env, env, [python, os.path.join(samba4srcdir, "dsdb/tests/python/acl.py"), '$SERVER', '-U"$USERNAME%$PASSWORD"', '-W', '$DOMAIN'])
451     if env != "fl2000dc":
452         # This test makes excessive use of the "userPassword" attribute which
453         # isn't available on DCs with Windows 2000 domain function level -
454         # therefore skip it in that configuration
455         plantestsuite("samba4.ldap.passwords.python(%s)" % env, env, [python, os.path.join(samba4srcdir, "dsdb/tests/python/passwords.py"), "$SERVER", '-U"$USERNAME%$PASSWORD"', "-W", "$DOMAIN"])
456 planpythontestsuite("dc:local", "samba.tests.upgradeprovisionneeddc")
457 planpythontestsuite("none", "samba.tests.upgradeprovision")
458 planpythontestsuite("none", "samba.tests.xattr")
459 planpythontestsuite("none", "samba.tests.ntacls")
460 plantestsuite("samba4.deletetest.python(dc)", "dc", ['PYTHONPATH="$PYTHONPATH:%s/lib/subunit/python:%s/lib/testtools"' % (srcdir(), srcdir()),
461                                                      python, os.path.join(samba4srcdir, "dsdb/tests/python/deletetest.py"),
462                                                      '$SERVER', '-U"$USERNAME%$PASSWORD"', '-W', '$DOMAIN'])
463 planpythontestsuite("none", "bindings", extra_path=["%s/lib/policy/tests/python" % samba4srcdir], name="samba4.policy.python")
464 plantestsuite("samba4.blackbox.samba3dump", "none", [python, os.path.join(samba4srcdir, "scripting/bin/samba3dump"), os.path.join(samba4srcdir, "../testdata/samba3")], allow_empty_output=True)
465 plantestsuite("samba4.blackbox.upgrade", "none", ["PYTHON=%s" % python, os.path.join(samba4srcdir, "setup/tests/blackbox_s3upgrade.sh"), '$PREFIX/provision'])
466 plantestsuite("samba4.blackbox.provision.py", "none", ["PYTHON=%s" % python, os.path.join(samba4srcdir, "setup/tests/blackbox_provision.sh"), '$PREFIX/provision'])
467 plantestsuite("samba4.blackbox.upgradeprovision.py", "none", ["PYTHON=%s" % python, os.path.join(samba4srcdir, "setup/tests/blackbox_upgradeprovision.sh"), '$PREFIX/provision'])
468 plantestsuite("samba4.blackbox.setpassword.py", "none", ["PYTHON=%s" % python, os.path.join(samba4srcdir, "setup/tests/blackbox_setpassword.sh"), '$PREFIX/provision'])
469 plantestsuite("samba4.blackbox.newuser.py", "none", ["PYTHON=%s" % python, os.path.join(samba4srcdir, "setup/tests/blackbox_newuser.sh"), '$PREFIX/provision'])
470 plantestsuite("samba4.blackbox.group.py", "none", ["PYTHON=%s" % python, os.path.join(samba4srcdir, "setup/tests/blackbox_group.sh"), '$PREFIX/provision'])
471 plantestsuite("samba4.blackbox.spn.py(dc:local)", "dc:local", ["PYTHON=%s" % python, os.path.join(samba4srcdir, "setup/tests/blackbox_spn.sh"), '$PREFIX/dc'])
472 plantestsuite("samba4.ldap.bind(dc)", "dc", [python, os.path.join(srcdir(), "auth/credentials/tests/bind.py"), '$SERVER', '-U"$USERNAME%$PASSWORD"'])
473
474 # DRS python tests
475 planoldpythontestsuite("vampire_dc", "samba.tests.blackbox.samba_tool_drs",
476         environ={'DC1': '$DC_SERVER', 'DC2': '$VAMPIRE_DC_SERVER'},
477         extra_args=['-U$DOMAIN/$DC_USERNAME%$DC_PASSWORD'])
478 planoldpythontestsuite("vampire_dc", "replica_sync",
479         extra_path=[os.path.join(samba4srcdir, 'torture/drs/python')],
480         name="samba4.drs.replica_sync.python(vampire_dc)",
481         environ={'DC1': '$DC_SERVER', 'DC2': '$VAMPIRE_DC_SERVER'},
482         extra_args=['-U$DOMAIN/$DC_USERNAME%$DC_PASSWORD'])
483 planoldpythontestsuite("vampire_dc", "delete_object",
484         extra_path=[os.path.join(samba4srcdir, 'torture/drs/python')],
485         name="samba4.drs.delete_object.python(vampire_dc)",
486         environ={'DC1': '$DC_SERVER', 'DC2': '$VAMPIRE_DC_SERVER'},
487         extra_args=['-U$DOMAIN/$DC_USERNAME%$DC_PASSWORD'])
488 planoldpythontestsuite("vampire_dc", "fsmo",
489         name="samba4.drs.fsmo.python(vampire_dc)",
490         extra_path=[os.path.join(samba4srcdir, 'torture/drs/python')],
491         environ={'DC1': "$DC_SERVER", 'DC2': "$VAMPIRE_DC_SERVER"},
492         extra_args=['-U$DOMAIN/$DC_USERNAME%$DC_PASSWORD'])
493 planoldpythontestsuite("vampire_dc", "repl_schema",
494         extra_path=[os.path.join(samba4srcdir, 'torture/drs/python')],
495         name="samba4.drs.repl_schema.python(vampire_dc)",
496         environ={'DC1': "$DC_SERVER", 'DC2': '$VAMPIRE_DC_SERVER'},
497         extra_args=['-U$DOMAIN/$DC_USERNAME%$DC_PASSWORD'])
498
499 # This makes sure we test the rid allocation code
500 t = "rpc.samr.large-dc"
501 plantestsuite_loadlist("samba4.%s.one" % t, "vampire_dc", [valgrindify(smb4torture), "$LISTOPT", '$SERVER', '-U$USERNAME%$PASSWORD', '-W', '$DOMAIN', t])
502 plantestsuite_loadlist("samba4.%s.two" % t, "vampire_dc", [valgrindify(smb4torture), "$LISTOPT", '$SERVER', '-U$USERNAME%$PASSWORD', '-W', '$DOMAIN', t])
503
504 # some RODC testing
505 for env in ['rodc']:
506     plantestsuite_loadlist("samba4.rpc.echo", env, [smb4torture, "$LISTOPT", 'ncacn_np:$SERVER', "-k", "yes", '-U$USERNAME%$PASSWORD', '-W' '$DOMAIN', 'rpc.echo'])
507     plantestsuite_loadlist("samba4.rpc.echo", "%s:local" % env, [smb4torture, "$LISTOPT", 'ncacn_np:$SERVER', "-k", "yes", '-P', '-W' '$DOMAIN', 'rpc.echo'])
508 plantestsuite("samba4.blackbox.provision-backend.py", "none", ["PYTHON=%s" % python, os.path.join(samba4srcdir, "setup/tests/blackbox_provision-backend.sh"), '$PREFIX/provision'])
509
510 # Test renaming the DC
511 plantestsuite("samba4.blackbox.renamedc.sh", "none", ["PYTHON=%s" % python, os.path.join(bbdir, "renamedc.sh"), '$PREFIX/provision'])
512
513 # check the databases are all OK. PLEASE LEAVE THIS AS THE LAST TEST
514 for env in ["dc", "fl2000dc", "fl2003dc", "fl2008r2dc"]:
515     plantestsuite("samba4.blackbox.dbcheck(%s)" % env, env + ":local" , ["PYTHON=%s" % python, os.path.join(bbdir, "dbcheck.sh"), '$PREFIX/provision', configuration])