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