s4:selftest: change the blackbox.pkinit test to use a binary mapping for smbclient
[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 nmblookup = binpath('nmblookup4')
37 smbclient = binpath('smbclient4')
38
39 def plansmbtorturetestsuite(name, env, options, modname=None):
40     if modname is None:
41         modname = "samba4.%s" % name
42     if isinstance(options, list):
43         options = " ".join(options)
44     cmdline = "%s $LISTOPT %s %s" % (valgrindify(smb4torture), options, name)
45     plantestsuite_loadlist(modname, env, cmdline)
46
47 def smb4torture_testsuites(prefix):
48     return filter(lambda x: x.startswith(prefix), smb4torture_testsuite_list)
49
50 subprocess.call([smb4torture, "-V"], stdout=sys.stderr)
51
52 bbdir = os.path.join(srcdir(), "testprogs/blackbox")
53
54 configuration = "--configfile=$SMB_CONF_PATH"
55
56 torture_options = [configuration, "--maximum-runtime=$SELFTEST_MAXTIME", "--target=samba4", "--basedir=$SELFTEST_TMPDIR"]
57 if not os.getenv("SELFTEST_VERBOSE"):
58     torture_options.append("--option=torture:progress=no")
59 torture_options.append("--format=subunit")
60 if os.getenv("SELFTEST_QUICK"):
61     torture_options.append("--option=torture:quick=yes")
62 smb4torture += " " + " ".join(torture_options)
63
64 print >>sys.stderr, "OPTIONS %s" % " ".join(torture_options)
65
66 # Simple tests for LDAP and CLDAP
67 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']:
68     plantestsuite("samba4.ldb.ldap with options %s(dc)" % options, "dc", "%s/test_ldb.sh ldap $SERVER %s" % (bbdir, options))
69
70 # see if we support ADS on the Samba3 side
71 try:
72     config_h = os.environ["CONFIG_H"]
73 except KeyError:
74     config_h = os.path.join(samba4bindir, "default/include/config.h")
75
76 # see if we support ldaps
77 f = open(config_h, 'r')
78 try:
79     have_tls_support = ("ENABLE_GNUTLS 1" in f.read())
80 finally:
81     f.close()
82
83 if have_tls_support:
84     for options in ['-U"$USERNAME%$PASSWORD"']:
85         plantestsuite("samba4.ldb.ldaps with options %s(dc)" % options, "dc",
86                 "%s/test_ldb.sh ldaps $SERVER_IP %s" % (bbdir, options))
87
88 for options in ['-U"$USERNAME%$PASSWORD"']:
89     plantestsuite("samba4.ldb.ldapi with options %s(dc:local)" % options, "dc:local",
90             "%s/test_ldb.sh ldapi $PREFIX_ABS/dc/private/ldapi %s" % (bbdir, options))
91
92 for t in smb4torture_testsuites("ldap."):
93     plansmbtorturetestsuite(t, "dc", '-U"$USERNAME%$PASSWORD" //$SERVER_IP/_none_')
94
95 ldbdir = os.path.join(srcdir(), "lib/ldb")
96 # Don't run LDB tests when using system ldb, as we won't have ldbtest installed
97 if os.path.exists(os.path.join(samba4bindir, "ldbtest")):
98     plantestsuite("ldb.base", "none", "%s/tests/test-tdb-subunit.sh %s" % (ldbdir, samba4bindir))
99 else:
100     skiptestsuite("ldb.base", "Using system LDB, ldbtest not available")
101
102 # Tests for RPC
103
104 # add tests to this list as they start passing, so we test
105 # that they stay passing
106 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"]
107 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"]
108 drs_rpc_tests = smb4torture_testsuites("drs.rpc")
109 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
110 slow_ncacn_np_tests = ["rpc.samlogon", "rpc.samr.users", "rpc.samr.large-dc", "rpc.samr.users.privileges", "rpc.samr.passwords", "rpc.samr.passwords.pwdlastset"]
111 slow_ncacn_ip_tcp_tests = ["rpc.samr", "rpc.cracknames"]
112
113 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"]
114
115 # Make sure all tests get run
116 rpc_tests = smb4torture_testsuites("rpc.")
117 auto_rpc_tests = filter(lambda t: t not in all_rpc_tests, rpc_tests)
118
119 for bindoptions in ["seal,padcheck"] + validate_list + ["bigendian"]:
120     for transport in ["ncalrpc", "ncacn_np", "ncacn_ip_tcp"]:
121         env = "dc"
122         if transport == "ncalrpc":
123             tests = ncalrpc_tests
124             env = "dc:local"
125         elif transport == "ncacn_np":
126             tests = ncacn_np_tests
127         elif transport == "ncacn_ip_tcp":
128             tests = ncacn_ip_tcp_tests
129         else:
130             raise AssertionError("invalid transport %r"% transport)
131         for t in tests:
132             plansmbtorturetestsuite(t, env, ["%s:$SERVER[%s]" % (transport, bindoptions), '-U$USERNAME%$PASSWORD', '--workgroup=$DOMAIN'], "samba4.%s on %s with %s" % (t, transport, bindoptions))
133         plansmbtorturetestsuite('rpc.samba3-sharesec', env, ["%s:$SERVER[%s]" % (transport, bindoptions), '-U$USERNAME%$PASSWORD', '--workgroup=$DOMAIN', '--option=torture:share=tmp'], "samba4.rpc.samba3.sharesec on %s with %s" % (transport, bindoptions))
134
135 #Plugin S4 DC tests (confirms named pipe auth forwarding).  This can be expanded once kerberos is supported in the plugin DC
136 #
137 for bindoptions in ["seal,padcheck"] + validate_list + ["bigendian"]:
138     for t in ncacn_np_tests:
139         env = "plugin_s4_dc"
140         transport = "ncacn_np"
141         plansmbtorturetestsuite(t, env, ["%s:$SERVER[%s]" % (transport, bindoptions), '-U$USERNAME%$PASSWORD', '--workgroup=$DOMAIN'], "samba4.%s with %s" % (t, bindoptions))
142
143 for bindoptions in [""] + validate_list + ["bigendian"]:
144     for t in auto_rpc_tests:
145         plansmbtorturetestsuite(t, "dc", ["$SERVER[%s]" % bindoptions, '-U$USERNAME%$PASSWORD', '--workgroup=$DOMAIN'], "samba4.%s with %s" % (t, bindoptions))
146
147 t = "rpc.countcalls"
148 plansmbtorturetestsuite(t, "dc:local", ["$SERVER[%s]" % bindoptions, '-U$USERNAME%$PASSWORD', '--workgroup=$DOMAIN'], modname="samba4.%s" % t)
149
150 for transport in ["ncacn_np", "ncacn_ip_tcp"]:
151     env = "dc"
152     if transport == "ncacn_np":
153         tests = slow_ncacn_np_tests
154     elif transport == "ncacn_ip_tcp":
155         tests = slow_ncacn_ip_tcp_tests
156     else:
157         raise AssertionError("Invalid transport %r" % transport)
158     for t in tests:
159         plansmbtorturetestsuite(t, env, ["%s:$SERVER" % transport, '-U$USERNAME%$PASSWORD', '--workgroup=$DOMAIN'], "samba4.%s on %s" % (t, transport))
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     plansmbtorturetestsuite('rpc.lsa.secrets', "dc", ["%s:$SERVER[]" % (transport), ntlmoptions, '-U$USERNAME%$PASSWORD', '--workgroup=$DOMAIN', '--option=gensec:target_hostname=$NETBIOSNAME'], "samba4.%s" % name)
190     plansmbtorturetestsuite('rpc.lsa.secrets', "s3dc", ["%s:$SERVER[]" % (transport), ntlmoptions, '-U$USERNAME%$PASSWORD', '--workgroup=$DOMAIN', '--option=gensec:target_hostname=$NETBIOSNAME'], "samba4.%s" % name)
191
192 transports = ["ncacn_np", "ncacn_ip_tcp"]
193
194 #Kerberos varies between functional levels, so it is important to check this on all of them
195 for env in ["dc", "fl2000dc", "fl2003dc", "fl2008r2dc", "plugin_s4_dc"]:
196     transport = "ncacn_np"
197     plansmbtorturetestsuite('rpc.pac', env, ["%s:$SERVER[]" % (transport, ), '-U$USERNAME%$PASSWORD', '--workgroup=$DOMAIN'], "samba4.rpc.pac on %s" % (transport,))
198     for transport in transports:
199         plansmbtorturetestsuite('rpc.lsa.secrets', env, ["%s:$SERVER[]" % (transport, ), '-k', 'yes', '-U$USERNAME%$PASSWORD', '--workgroup=$DOMAIN', '--option=gensec:target_hostname=$NETBIOSNAME', 'rpc.lsa.secrets'], "samba4.rpc.lsa.secrets on %s with Kerberos" % (transport,))
200         plansmbtorturetestsuite('rpc.lsa.secrets', env, ["%s:$SERVER[]" % (transport, ), '-k', 'yes', '-U$USERNAME%$PASSWORD', '--workgroup=$DOMAIN', "--option=clientusespnegoprincipal=yes", '--option=gensec:target_hostname=$NETBIOSNAME'], "samba4.rpc.lsa.secrets on %s with Kerberos - use target principal" % (transport,))
201         plansmbtorturetestsuite('rpc.lsa.secrets.none*', env, ["%s:$SERVER" % transport, '-k', 'yes', '-U$USERNAME%$PASSWORD', '--workgroup=$DOMAIN', "--option=gensec:fake_gssapi_krb5=yes", '--option=gensec:gssapi_krb5=no', '--option=gensec:target_hostname=$NETBIOSNAME'], "samba4.rpc.lsa.secrets on %s with Kerberos - use Samba3 style login" % transport)
202         plansmbtorturetestsuite('rpc.lsa.secrets.none*', env, ["%s:$SERVER" % transport, '-k', 'yes', '-U$USERNAME%$PASSWORD', '--workgroup=$DOMAIN', "--option=clientusespnegoprincipal=yes", '--option=gensec:fake_gssapi_krb5=yes', '--option=gensec:gssapi_krb5=no', '--option=gensec:target_hostname=$NETBIOSNAME'], "samba4.rpc.lsa.secrets on %s with Kerberos - use Samba3 style login, use target principal" % transport)
203         plansmbtorturetestsuite('rpc.echo', env, ["%s:$SERVER[]" % (transport,), '-U$USERNAME%$PASSWORD', '--workgroup=$DOMAIN'], "samba4.rpc.echo on %s" % (transport, ))
204
205         # Echo tests test bulk Kerberos encryption of DCE/RPC
206         for bindoptions in ["connect", "spnego", "spnego,sign", "spnego,seal"] + validate_list + ["padcheck", "bigendian", "bigendian,seal"]:
207             echooptions = "--option=socket:testnonblock=True --option=torture:quick=yes -k yes"
208             plansmbtorturetestsuite('rpc.echo', env, ["%s:$SERVER[%s]" % (transport, bindoptions), echooptions, '-U$USERNAME%$PASSWORD', '--workgroup=$DOMAIN'], "samba4.rpc.echo on %s with %s and %s" % (transport, bindoptions, echooptions))
209     plansmbtorturetestsuite("net.api.become.dc", env, '$SERVER[%s] -U$USERNAME%%$PASSWORD -W$DOMAIN' % validate)
210
211 for bindoptions in ["sign", "seal"]:
212     plansmbtorturetestsuite('rpc.backupkey', "dc", ["ncacn_np:$SERVER[%s]" % ( bindoptions), '-U$USERNAME%$PASSWORD', '--workgroup=$DOMAIN'], "samba4.rpc.backupkey with %s" % (bindoptions))
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             plansmbtorturetestsuite('rpc.echo', env, ["%s:$SERVER[%s]" % (transport, bindoptions), ntlmoptions, '-U$USERNAME%$PASSWORD', '--workgroup=$DOMAIN'], "samba4.rpc.echo on %s with %s and %s" % (transport, bindoptions, ntlmoptions))
231
232 plansmbtorturetestsuite('rpc.echo', "dc", ['ncacn_np:$SERVER[smb2]', '-U$USERNAME%$PASSWORD', '--workgroup=$DOMAIN'], "samba4.rpc.echo on ncacn_np over smb2")
233
234 plansmbtorturetestsuite('ntp.signd', "dc:local", ['ncacn_np:$SERVER', '-U$USERNAME%$PASSWORD', '--workgroup=$DOMAIN'], "samba4.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'] + 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     plansmbtorturetestsuite(t, "dc", ['//$NETBIOSNAME/cifs', '-U$USERNAME%$PASSWORD', '--kerberos=yes'] + ntvfsargs, modname="samba4.ntvfs.cifs.krb5.%s" % t)
263
264 # Test NTVFS CIFS backend with S4U2Self and S4U2Proxy
265 t = "base.unlink"
266 plansmbtorturetestsuite(t, "dc", ['//$NETBIOSNAME/cifs', '-U$USERNAME%$PASSWORD', '--kerberos=no'] + ntvfsargs, "samba4.ntvfs.cifs.ntlm.%s" % t)
267 plansmbtorturetestsuite(t, "rpc_proxy", ['//$NETBIOSNAME/cifs_to_dc', '-U$DC_USERNAME%$DC_PASSWORD', '--kerberos=yes'] + ntvfsargs, "samba4.ntvfs.cifs.krb5.%s" % t)
268 plansmbtorturetestsuite(t, "rpc_proxy", ['//$NETBIOSNAME/cifs_to_dc', '-U$DC_USERNAME%$DC_PASSWORD', '--kerberos=no'] + ntvfsargs, "samba4.ntvfs.cifs.ntlm.%s" % t)
269
270 plansmbtorturetestsuite('echo.udp', 'dc:local', '//$SERVER/whatever')
271
272 # Local tests
273 for t in smb4torture_testsuites("local."):
274     #The local.resolve test needs a name to look up using real system (not emulated) name routines
275     plansmbtorturetestsuite(t, "none", "ncalrpc:localhost")
276
277 # Confirm these tests with the system iconv too
278 for t in ["local.convert_string_handle", "local.convert_string", "local.ndr"]:
279     options = "ncalrpc: --option='iconv:use_builtin_handlers=false'"
280     plansmbtorturetestsuite(t, "none", options,
281         modname="samba4.%s.system.iconv" % t)
282
283 tdbtorture4 = binpath("tdbtorture")
284 if os.path.exists(tdbtorture4):
285     plantestsuite("tdb.stress", "none", valgrindify(tdbtorture4))
286 else:
287     skiptestsuite("tdb.stress", "Using system TDB, tdbtorture not available")
288
289 plansmbtorturetestsuite("drs.unit", "none", "ncalrpc:")
290
291 # Pidl tests
292 for f in sorted(os.listdir(os.path.join(samba4srcdir, "../pidl/tests"))):
293     if f.endswith(".pl"):
294         planperltestsuite("pidl.%s" % f[:-3], os.path.normpath(os.path.join(samba4srcdir, "../pidl/tests", f)))
295
296 # DNS tests
297 planpythontestsuite("dc", "samba.tests.dns")
298
299 # Blackbox Tests:
300 # tests that interact directly with the command-line tools rather than using
301 # the API. These mainly test that the various command-line options of commands
302 # work correctly.
303
304 planpythontestsuite("none", "samba.tests.blackbox.ndrdump")
305 planpythontestsuite("none", "samba.tests.source")
306 plantestsuite("samba4.blackbox.samba_tool(dc:local)", "dc:local", [os.path.join(samba4srcdir, "utils/tests/test_samba_tool.sh"), '$SERVER', '$SERVER_IP', '$USERNAME', '$PASSWORD', '$DOMAIN', smbclient])
307 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", smbclient, configuration])
308 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", smbclient, configuration])
309 plantestsuite("samba4.blackbox.kinit(fl2000dc:local)", "fl2000dc:local", [os.path.join(bbdir, "test_kinit.sh"), '$SERVER', '$USERNAME', '$PASSWORD', '$REALM', '$DOMAIN', '$PREFIX', "arcfour-hmac-md5", smbclient, configuration])
310 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", smbclient, configuration])
311 plantestsuite("samba4.blackbox.ktpass(dc)", "dc", [os.path.join(bbdir, "test_ktpass.sh"), '$PREFIX'])
312 plantestsuite("samba4.blackbox.passwords(dc:local)", "dc:local", [os.path.join(bbdir, "test_passwords.sh"), '$SERVER', '$USERNAME', '$PASSWORD', '$REALM', '$DOMAIN', "$PREFIX"])
313 plantestsuite("samba4.blackbox.export.keytab(dc:local)", "dc:local", [os.path.join(bbdir, "test_export_keytab.sh"), '$SERVER', '$USERNAME', '$REALM', '$DOMAIN', "$PREFIX", smbclient])
314 plantestsuite("samba4.blackbox.cifsdd(dc)", "dc", [os.path.join(samba4srcdir, "client/tests/test_cifsdd.sh"), '$SERVER', '$USERNAME', '$PASSWORD', "$DOMAIN"])
315 plantestsuite("samba4.blackbox.nmblookup(dc)", "dc", [os.path.join(samba4srcdir, "utils/tests/test_nmblookup.sh"), '$NETBIOSNAME', '$NETBIOSALIAS', '$SERVER', '$SERVER_IP', nmblookup])
316 plantestsuite("samba4.blackbox.locktest(dc)", "dc", [os.path.join(samba4srcdir, "torture/tests/test_locktest.sh"), '$SERVER', '$USERNAME', '$PASSWORD', '$DOMAIN', '$PREFIX'])
317 plantestsuite("samba4.blackbox.masktest", "dc", [os.path.join(samba4srcdir, "torture/tests/test_masktest.sh"), '$SERVER', '$USERNAME', '$PASSWORD', '$DOMAIN', '$PREFIX'])
318 plantestsuite("samba4.blackbox.gentest(dc)", "dc", [os.path.join(samba4srcdir, "torture/tests/test_gentest.sh"), '$SERVER', '$USERNAME', '$PASSWORD', '$DOMAIN', "$PREFIX"])
319 plantestsuite("samba4.blackbox.wbinfo(dc:local)", "dc:local", [os.path.join(samba4srcdir, "../nsswitch/tests/test_wbinfo.sh"), '$DOMAIN', '$USERNAME', '$PASSWORD', "dc"])
320 plantestsuite("samba4.blackbox.wbinfo(s4member:local)", "s4member:local", [os.path.join(samba4srcdir, "../nsswitch/tests/test_wbinfo.sh"), '$DOMAIN', '$DC_USERNAME', '$DC_PASSWORD', "s4member"])
321 plantestsuite("samba4.blackbox.chgdcpass", "chgdcpass", [os.path.join(bbdir, "test_chgdcpass.sh"), '$SERVER', "CHGDCPASS\$", '$REALM', '$DOMAIN', '$PREFIX', "aes256-cts-hmac-sha1-96", '$SELFTEST_PREFIX/chgdcpass', smbclient])
322 plantestsuite_loadlist("samba4.rpc.echo against NetBIOS alias", "dc", [valgrindify(smb4torture), "$LISTOPT", 'ncacn_np:$NETBIOSALIAS', '-U$DOMAIN/$USERNAME%$PASSWORD', 'rpc.echo'])
323
324 # Tests using the "Simple" NTVFS backend
325 for t in ["base.rw1"]:
326     plansmbtorturetestsuite(t, "dc", ["//$SERVER/simple", '-U$USERNAME%$PASSWORD'], modname="samba4.ntvfs.simple.%s" % t)
327
328 # Domain S4member Tests
329 plansmbtorturetestsuite('rpc.echo', "s4member", ['ncacn_np:$NETBIOSNAME', '-U$NETBIOSNAME/$USERNAME%$PASSWORD'], "samba4.rpc.echo against s4member server with local creds")
330 plansmbtorturetestsuite('rpc.echo', "s4member", ['ncacn_np:$NETBIOSNAME', '-U$DOMAIN/$DC_USERNAME%$DC_PASSWORD'], "samba4.rpc.echo against s4member server with domain creds")
331 plansmbtorturetestsuite('rpc.samr', "s4member", ['ncacn_np:$NETBIOSNAME', '-U$NETBIOSNAME/$USERNAME%$PASSWORD'], "samba4.rpc.samr against s4member server with local creds")
332 plansmbtorturetestsuite('rpc.samr.users', "s4member", ['ncacn_np:$NETBIOSNAME', '-U$NETBIOSNAME/$USERNAME%$PASSWORD'], "samba4.rpc.samr.users against s4member server with local creds",)
333 plansmbtorturetestsuite('rpc.samr.passwords', "s4member", ['ncacn_np:$NETBIOSNAME', '-U$NETBIOSNAME/$USERNAME%$PASSWORD'], "samba4.rpc.samr.passwords against s4member server with local creds")
334 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', smbclient])
335
336 # RPC Proxy
337 plansmbtorturetestsuite("rpc.echo", "rpc_proxy", ['ncacn_ip_tcp:$NETBIOSNAME', '-U$DOMAIN/$DC_USERNAME%$DC_PASSWORD'], modname="samba4.rpc.echo against rpc proxy with domain creds")
338
339 # Tests SMB signing
340 for mech in [
341     "-k no",
342     "-k no --option=usespnego=no",
343     "-k no --option=gensec:spengo=no",
344     "-k yes",
345     "-k yes --option=gensec:fake_gssapi_krb5=yes --option=gensec:gssapi_krb5=no"]:
346     for signing in ["--signing=on", "--signing=required"]:
347         signoptions = "%s %s" % (mech, signing)
348         name = "smb.signing on with %s" % signoptions
349         plansmbtorturetestsuite('base.xcopy', "dc", ['//$NETBIOSNAME/xcopy_share', signoptions, '-U$USERNAME%$PASSWORD'], modname="samba4.%s" % name)
350
351 for mech in [
352     "-k no",
353     "-k no --option=usespnego=no",
354     "-k no --option=gensec:spengo=no",
355     "-k yes"]:
356     signoptions = "%s --signing=off" % mech
357     name = "smb.signing disabled on with %s" % signoptions
358     plansmbtorturetestsuite('base.xcopy', "s4member", ['//$NETBIOSNAME/xcopy_share', signoptions, '-U$DC_USERNAME%$DC_PASSWORD'], "samba4.%s domain-creds" % name)
359     plansmbtorturetestsuite('base.xcopy', "s3member", ['//$NETBIOSNAME/xcopy_share', signoptions, '-U$DC_USERNAME%$DC_PASSWORD'], "samba4.%s domain-creds" % name)
360     plansmbtorturetestsuite('base.xcopy', "plugin_s4_dc", ['//$NETBIOSNAME/xcopy_share', signoptions, '-U$USERNAME%$PASSWORD'], "samba4.%s" % name)
361     plansmbtorturetestsuite('base.xcopy', "plugin_s4_dc",
362                             ['//$NETBIOSNAME/xcopy_share', signoptions, '-U$DC_USERNAME%$DC_PASSWORD'], "samba4.%s administrator" % name)
363
364 plantestsuite("samba4.blackbox.bogusdomain", "s3member", ["testprogs/blackbox/bogus.sh", "$NETBIOSNAME", "xcopy_share", '$USERNAME', '$PASSWORD', '$DC_USERNAME', '$DC_PASSWORD', smbclient])
365 for mech in [
366     "-k no",
367     "-k no --option=usespnego=no",
368     "-k no --option=gensec:spengo=no"]:
369     signoptions = "%s --signing=off" % mech
370     plansmbtorturetestsuite('base.xcopy', "s4member", ['//$NETBIOSNAME/xcopy_share', signoptions, '-U$NETBIOSNAME/$USERNAME%$PASSWORD'], modname="samba4.smb.signing on with %s local-creds" % signoptions)
371
372 plansmbtorturetestsuite('base.xcopy', "dc", ['//$NETBIOSNAME/xcopy_share', '-k', 'no', '--signing=yes', '-U%'], modname="samba4.smb.signing --signing=yes anon")
373 plansmbtorturetestsuite('base.xcopy', "dc", ['//$NETBIOSNAME/xcopy_share', '-k', 'no', '--signing=required', '-U%'], modname="samba4.smb.signing --signing=required anon")
374 plansmbtorturetestsuite('base.xcopy', "s4member", ['//$NETBIOSNAME/xcopy_share', '-k', 'no', '--signing=no', '-U%'], modname="samba4.smb.signing --signing=no anon")
375
376
377 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\""]
378
379 winbind_struct_tests = smb4torture_testsuites("winbind.struct")
380 winbind_ndr_tests = smb4torture_testsuites("winbind.ndr")
381 for env in ["plugin_s4_dc", "dc", "s4member"]:
382     for t in winbind_struct_tests:
383         plansmbtorturetestsuite(t, env, wb_opts + ['//_none_/_none_'])
384
385     for t in winbind_ndr_tests:
386         plansmbtorturetestsuite(t, env, wb_opts + ['//_none_/_none_'])
387
388 nsstest4 = binpath("nsstest")
389 for env in ["plugin_s4_dc", "dc", "s4member", "s3dc", "s3member", "member"]:
390     if os.path.exists(nsstest4):
391         plantestsuite("samba4.nss.test using winbind(%s)" % env, env, [os.path.join(bbdir, "nsstest.sh"), nsstest4, os.path.join(samba4bindir, "default/nsswitch/libnss-winbind.so")])
392     else:
393         skiptestsuite("samba4.nss.test using winbind(%s)" % env, "nsstest not available")
394
395 subunitrun = valgrindify(python) + " " + os.path.join(samba4srcdir, "scripting/bin/subunitrun")
396 def planoldpythontestsuite(env, module, name=None, extra_path=[], environ={}, extra_args=[]):
397     environ = dict(environ)
398     py_path = list(extra_path)
399     if py_path:
400         environ["PYTHONPATH"] = ":".join(["$PYTHONPATH"] + py_path)
401     args = ["%s=%s" % item for item in environ.iteritems()]
402     args += [subunitrun, "$LISTOPT", module]
403     args += extra_args
404     if name is None:
405         name = module
406     plantestsuite(name, env, args)
407
408 planpythontestsuite("none", "selftest.tests.test_suite", extra_path=[srcdir()])
409 planpythontestsuite("none", "api", name="ldb.python", extra_path=['lib/ldb/tests/python'])
410 planpythontestsuite("none", "samba.tests.credentials")
411 planoldpythontestsuite("dc:local", "samba.tests.gensec", extra_args=['-U"$USERNAME%$PASSWORD"'])
412 planpythontestsuite("none", "samba.tests.registry")
413 planoldpythontestsuite("none", "simple", extra_path=["%s/lib/tdb/python/tests" % srcdir()], name="tdb.python")
414 planpythontestsuite("none", "samba.tests.auth")
415 planpythontestsuite("none", "samba.tests.getopt")
416 planpythontestsuite("none", "samba.tests.security")
417 planpythontestsuite("none", "samba.tests.dcerpc.misc")
418 planpythontestsuite("none", "samba.tests.param")
419 planpythontestsuite("none", "samba.tests.upgrade")
420 planpythontestsuite("none", "samba.tests.core")
421 planpythontestsuite("none", "samba.tests.provision")
422 planpythontestsuite("none", "samba.tests.samba3")
423 planpythontestsuite("none", "samba.tests.strings")
424 planpythontestsuite("dc:local", "samba.tests.dcerpc.sam")
425 planpythontestsuite("dc:local", "samba.tests.dsdb")
426 planpythontestsuite("none", "samba.tests.netcmd")
427 planpythontestsuite("dc:local", "samba.tests.dcerpc.bare")
428 planpythontestsuite("dc:local", "samba.tests.dcerpc.unix")
429 planpythontestsuite("dc:local", "samba.tests.dcerpc.srvsvc")
430 planpythontestsuite("none", "samba.tests.dcerpc.rpc_talloc")
431 planpythontestsuite("none", "samba.tests.samdb")
432 planpythontestsuite("none", "samba.tests.hostconfig")
433 planpythontestsuite("none", "samba.tests.messaging")
434 planpythontestsuite("none", "samba.tests.samba3sam")
435
436 planpythontestsuite("dc:local", "samba.tests.samba_tool.timecmd")
437 planpythontestsuite("dc:local", "samba.tests.samba_tool.user")
438 planpythontestsuite("dc:local", "samba.tests.samba_tool.group")
439
440 planpythontestsuite("none", "subunit")
441 planpythontestsuite("dc:local", "samba.tests.dcerpc.rpcecho")
442 planpythontestsuite("none", "wafsamba.tests.test_suite", extra_path=[os.path.join(samba4srcdir, "..", "buildtools"), os.path.join(samba4srcdir, "..", "buildtools", "wafadmin")])
443 planoldpythontestsuite("dc:local", "samba.tests.dcerpc.registry", extra_args=['-U"$USERNAME%$PASSWORD"'])
444 planoldpythontestsuite("dc", "samba.tests.dcerpc.dnsserver", extra_args=['-U"$USERNAME%$PASSWORD"'])
445 planoldpythontestsuite("plugin_s4_dc", "samba.tests.dcerpc.dnsserver", extra_args=['-U"$USERNAME%$PASSWORD"'])
446 plantestsuite("samba4.ldap.python(dc)", "dc", [python, os.path.join(samba4srcdir, "dsdb/tests/python/ldap.py"), '$SERVER', '-U"$USERNAME%$PASSWORD"', '--workgroup=$DOMAIN'])
447 plantestsuite("samba4.tokengroups.python(dc)", "dc:local", [python, os.path.join(samba4srcdir, "dsdb/tests/python/token_group.py"), '$SERVER', '-U"$USERNAME%$PASSWORD"', '--workgroup=$DOMAIN'])
448 plantestsuite("samba4.sam.python(dc)", "dc", [python, os.path.join(samba4srcdir, "dsdb/tests/python/sam.py"), '$SERVER', '-U"$USERNAME%$PASSWORD"', '--workgroup=$DOMAIN'])
449 planoldpythontestsuite("dc", "dsdb_schema_info",
450         extra_path=[os.path.join(samba4srcdir, 'dsdb/tests/python')],
451         name="samba4.schemaInfo.python(dc)",
452         extra_args=['-U"$DOMAIN/$DC_USERNAME%$DC_PASSWORD"'])
453 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)
454 plantestsuite("samba4.ldap.dirsync.python(dc)", "dc", [python, os.path.join(samba4srcdir, "dsdb/tests/python/dirsync.py"), '$SERVER', '-U"$USERNAME%$PASSWORD"', '--workgroup=$DOMAIN'])
455 plantestsuite("samba4.ldap.sites.python(dc)", "dc", [python, os.path.join(samba4srcdir, "dsdb/tests/python/sites.py"), '$SERVER', '-U"$USERNAME%$PASSWORD"', '--workgroup=$DOMAIN'])
456 for env in ["dc", "fl2000dc", "fl2003dc", "fl2008r2dc"]:
457     plantestsuite("samba4.ldap_schema.python(%s)" % env, env, [python, os.path.join(samba4srcdir, "dsdb/tests/python/ldap_schema.py"), '$SERVER', '-U"$USERNAME%$PASSWORD"', '--workgroup=$DOMAIN'])
458     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"])
459     plantestsuite("samba4.ldap.secdesc.python(%s)" % env, env, [python, os.path.join(samba4srcdir, "dsdb/tests/python/sec_descriptor.py"), '$SERVER', '-U"$USERNAME%$PASSWORD"', '--workgroup=$DOMAIN'])
460     plantestsuite("samba4.ldap.acl.python(%s)" % env, env, [python, os.path.join(samba4srcdir, "dsdb/tests/python/acl.py"), '$SERVER', '-U"$USERNAME%$PASSWORD"', '--workgroup=$DOMAIN'])
461     if env != "fl2000dc":
462         # This test makes excessive use of the "userPassword" attribute which
463         # isn't available on DCs with Windows 2000 domain function level -
464         # therefore skip it in that configuration
465         plantestsuite("samba4.ldap.passwords.python(%s)" % env, env, [python, os.path.join(samba4srcdir, "dsdb/tests/python/passwords.py"), "$SERVER", '-U"$USERNAME%$PASSWORD"', "-W$DOMAIN"])
466 planpythontestsuite("dc:local", "samba.tests.upgradeprovisionneeddc")
467 planpythontestsuite("none", "samba.tests.upgradeprovision")
468 planpythontestsuite("none", "samba.tests.xattr")
469 planpythontestsuite("none", "samba.tests.ntacls")
470 plantestsuite("samba4.deletetest.python(dc)", "dc", ['PYTHONPATH="$PYTHONPATH:%s/lib/subunit/python:%s/lib/testtools"' % (srcdir(), srcdir()),
471                                                      python, os.path.join(samba4srcdir, "dsdb/tests/python/deletetest.py"),
472                                                      '$SERVER', '-U"$USERNAME%$PASSWORD"', '--workgroup=$DOMAIN'])
473 planpythontestsuite("none", "samba.tests.policy")
474 plantestsuite("samba4.blackbox.samba3dump", "none", [python, os.path.join(samba4srcdir, "scripting/bin/samba3dump"), os.path.join(samba4srcdir, "../testdata/samba3")], allow_empty_output=True)
475 plantestsuite("samba4.blackbox.upgrade", "none", ["PYTHON=%s" % python, os.path.join(samba4srcdir, "setup/tests/blackbox_s3upgrade.sh"), '$PREFIX/provision'])
476 plantestsuite("samba4.blackbox.provision.py", "none", ["PYTHON=%s" % python, os.path.join(samba4srcdir, "setup/tests/blackbox_provision.sh"), '$PREFIX/provision'])
477 plantestsuite("samba4.blackbox.upgradeprovision.py", "none", ["PYTHON=%s" % python, os.path.join(samba4srcdir, "setup/tests/blackbox_upgradeprovision.sh"), '$PREFIX/provision'])
478 plantestsuite("samba4.blackbox.setpassword.py", "none", ["PYTHON=%s" % python, os.path.join(samba4srcdir, "setup/tests/blackbox_setpassword.sh"), '$PREFIX/provision'])
479 plantestsuite("samba4.blackbox.newuser.py", "none", ["PYTHON=%s" % python, os.path.join(samba4srcdir, "setup/tests/blackbox_newuser.sh"), '$PREFIX/provision'])
480 plantestsuite("samba4.blackbox.group.py", "none", ["PYTHON=%s" % python, os.path.join(samba4srcdir, "setup/tests/blackbox_group.sh"), '$PREFIX/provision'])
481 plantestsuite("samba4.blackbox.spn.py(dc:local)", "dc:local", ["PYTHON=%s" % python, os.path.join(samba4srcdir, "setup/tests/blackbox_spn.sh"), '$PREFIX/dc'])
482 plantestsuite("samba4.ldap.bind(dc)", "dc", [python, os.path.join(srcdir(), "auth/credentials/tests/bind.py"), '$SERVER', '-U"$USERNAME%$PASSWORD"'])
483
484 # DRS python tests
485 planoldpythontestsuite("vampire_dc", "samba.tests.blackbox.samba_tool_drs",
486         environ={'DC1': '$DC_SERVER', 'DC2': '$VAMPIRE_DC_SERVER'},
487         extra_args=['-U$DOMAIN/$DC_USERNAME%$DC_PASSWORD'])
488 planoldpythontestsuite("vampire_dc", "replica_sync",
489         extra_path=[os.path.join(samba4srcdir, 'torture/drs/python')],
490         name="samba4.drs.replica_sync.python(vampire_dc)",
491         environ={'DC1': '$DC_SERVER', 'DC2': '$VAMPIRE_DC_SERVER'},
492         extra_args=['-U$DOMAIN/$DC_USERNAME%$DC_PASSWORD'])
493 planoldpythontestsuite("vampire_dc", "delete_object",
494         extra_path=[os.path.join(samba4srcdir, 'torture/drs/python')],
495         name="samba4.drs.delete_object.python(vampire_dc)",
496         environ={'DC1': '$DC_SERVER', 'DC2': '$VAMPIRE_DC_SERVER'},
497         extra_args=['-U$DOMAIN/$DC_USERNAME%$DC_PASSWORD'])
498 planoldpythontestsuite("vampire_dc", "fsmo",
499         name="samba4.drs.fsmo.python(vampire_dc)",
500         extra_path=[os.path.join(samba4srcdir, 'torture/drs/python')],
501         environ={'DC1': "$DC_SERVER", 'DC2': "$VAMPIRE_DC_SERVER"},
502         extra_args=['-U$DOMAIN/$DC_USERNAME%$DC_PASSWORD'])
503 planoldpythontestsuite("vampire_dc", "repl_schema",
504         extra_path=[os.path.join(samba4srcdir, 'torture/drs/python')],
505         name="samba4.drs.repl_schema.python(vampire_dc)",
506         environ={'DC1': "$DC_SERVER", 'DC2': '$VAMPIRE_DC_SERVER'},
507         extra_args=['-U$DOMAIN/$DC_USERNAME%$DC_PASSWORD'])
508
509 # This makes sure we test the rid allocation code
510 t = "rpc.samr.large-dc"
511 plansmbtorturetestsuite(t, "vampire_dc", ['$SERVER', '-U$USERNAME%$PASSWORD', '--workgroup=$DOMAIN'], modname=("samba4.%s.one" % t))
512 plansmbtorturetestsuite(t, "vampire_dc", ['$SERVER', '-U$USERNAME%$PASSWORD', '--workgroup=$DOMAIN'], modname="samba4.%s.two" % t)
513
514 # some RODC testing
515 for env in ['rodc']:
516     plansmbtorturetestsuite('rpc.echo', env, ['ncacn_np:$SERVER', "-k", "yes", '-U$USERNAME%$PASSWORD', '--workgroup=$DOMAIN'], modname="samba4.rpc.echo")
517     plansmbtorturetestsuite('rpc.echo', "%s:local" % env, ['ncacn_np:$SERVER', "-k", "yes", '-P', '--workgroup=$DOMAIN'], modname="samba4.rpc.echo")
518 plantestsuite("samba4.blackbox.provision-backend", "none", ["PYTHON=%s" % python, os.path.join(samba4srcdir, "setup/tests/blackbox_provision-backend.sh"), '$PREFIX/provision'])
519
520 # Test renaming the DC
521 plantestsuite("samba4.blackbox.renamedc.sh", "none", ["PYTHON=%s" % python, os.path.join(bbdir, "renamedc.sh"), '$PREFIX/provision'])
522
523 # Demote the vampire DC, it must be the last test on the VAMPIRE DC
524 plantestsuite("samba4.blackbox.samba_tool_demote(vampire_dc)", "vampire_dc", [os.path.join(samba4srcdir, "utils/tests/test_demote.sh"), '$SERVER', '$SERVER_IP', '$USERNAME', '$PASSWORD', '$DOMAIN', '$DC_SERVER', '$PREFIX/vampire_dc'])
525 # check the databases are all OK. PLEASE LEAVE THIS AS THE LAST TEST
526 for env in ["dc", "fl2000dc", "fl2003dc", "fl2008r2dc"]:
527     plantestsuite("samba4.blackbox.dbcheck(%s)" % env, env + ":local" , ["PYTHON=%s" % python, os.path.join(bbdir, "dbcheck.sh"), '$PREFIX/provision', configuration])