python:tests: Add test for SMB encrypted DCERPC connection
[amitay/samba.git] / 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 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, 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 and makes
13 # it possible to run the testsuite against other servers, such as
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
22 from selftesthelpers import bindir, srcdir, python
23 from selftesthelpers import planpythontestsuite, samba4srcdir
24 from selftesthelpers import plantestsuite, bbdir
25 from selftesthelpers import configuration, valgrindify
26 from selftesthelpers import skiptestsuite
27
28 try:
29     config_h = os.environ["CONFIG_H"]
30 except KeyError:
31     samba4bindir = bindir()
32     config_h = os.path.join(samba4bindir, "default/include/config.h")
33
34 # check available features
35 config_hash = dict()
36 f = open(config_h, 'r')
37 try:
38     lines = f.readlines()
39     config_hash = dict((x[0], ' '.join(x[1:]))
40                        for x in map(lambda line: line.strip().split(' ')[1:],
41                                     list(filter(lambda line: (line[0:7] == '#define') and (len(line.split(' ')) > 2), lines))))
42 finally:
43     f.close()
44
45 have_man_pages_support = ("XSLTPROC_MANPAGES" in config_hash)
46 with_pam = ("WITH_PAM" in config_hash)
47 with_elasticsearch_backend = ("HAVE_SPOTLIGHT_BACKEND_ES" in config_hash)
48 pam_wrapper_so_path = config_hash["LIBPAM_WRAPPER_SO_PATH"]
49 pam_set_items_so_path = config_hash["PAM_SET_ITEMS_SO_PATH"]
50
51 planpythontestsuite("none", "samba.tests.source")
52 if have_man_pages_support:
53     planpythontestsuite("none", "samba.tests.docs")
54
55 try:
56     import testscenarios
57 except ImportError:
58     skiptestsuite("subunit", "testscenarios not available")
59 else:
60     planpythontestsuite("none", "subunit.tests.test_suite")
61 planpythontestsuite("none", "samba.tests.blackbox.ndrdump")
62 planpythontestsuite("none", "samba.tests.blackbox.check_output")
63 planpythontestsuite("none", "api", name="ldb.python", extra_path=['lib/ldb/tests/python'])
64 planpythontestsuite("none", "samba.tests.credentials")
65 planpythontestsuite("none", "samba.tests.registry")
66 planpythontestsuite("ad_dc_ntvfs:local", "samba.tests.auth")
67 planpythontestsuite("none", "samba.tests.get_opt")
68 planpythontestsuite("none", "samba.tests.security")
69 planpythontestsuite("none", "samba.tests.dcerpc.misc")
70 planpythontestsuite("none", "samba.tests.dcerpc.integer")
71 planpythontestsuite("none", "samba.tests.param")
72 planpythontestsuite("none", "samba.tests.upgrade")
73 planpythontestsuite("none", "samba.tests.core")
74 planpythontestsuite("none", "samba.tests.common")
75 planpythontestsuite("none", "samba.tests.provision")
76 planpythontestsuite("none", "samba.tests.password_quality")
77 planpythontestsuite("none", "samba.tests.strings")
78 planpythontestsuite("none", "samba.tests.netcmd")
79 planpythontestsuite("none", "samba.tests.dcerpc.rpc_talloc")
80 planpythontestsuite("none", "samba.tests.dcerpc.array")
81 planpythontestsuite("none", "samba.tests.dcerpc.string_tests")
82 planpythontestsuite("none", "samba.tests.hostconfig")
83 planpythontestsuite("ad_dc_ntvfs:local", "samba.tests.messaging")
84 planpythontestsuite("none", "samba.tests.s3param")
85 planpythontestsuite("none", "samba.tests.s3passdb")
86 planpythontestsuite("none", "samba.tests.s3registry")
87 planpythontestsuite("none", "samba.tests.s3windb")
88 planpythontestsuite("none", "samba.tests.s3idmapdb")
89 planpythontestsuite("none", "samba.tests.samba3sam")
90 planpythontestsuite(
91     "none", "wafsamba.tests.test_suite",
92     extra_path=[os.path.join(samba4srcdir, "..", "buildtools"),
93                 os.path.join(samba4srcdir, "..", "third_party", "waf")])
94 planpythontestsuite("fileserver", "samba.tests.smbd_fuzztest")
95 planpythontestsuite("nt4_dc_smb1", "samba.tests.dcerpc.binding")
96
97
98 def cmdline(script, *args):
99     """
100     Prefix PYTHON env var and append --configurefile option to abs script path.
101
102     script.sh arg1 arg2
103     -->
104     PYTHON=python /path/to/bbdir/script.sh arg1 arg2 \
105     --configurefile $SMB_CONF_FILE
106     """
107     return [
108         "PYTHON=%s" % python,
109         os.path.join(bbdir, script),
110     ] + list(args) + [configuration]
111
112
113 plantestsuite(
114     "samba4.blackbox.demote-saveddb", "none",
115     cmdline('demote-saveddb.sh', '$PREFIX_ABS/demote'))
116
117 plantestsuite(
118     "samba4.blackbox.dbcheck.alpha13", "none",
119     cmdline('dbcheck-oldrelease.sh', '$PREFIX_ABS/provision',
120             'alpha13'))
121
122 # same test as above but skip member link checks
123 plantestsuite(
124     "samba4.blackbox.dbcheck.alpha13.quick", "none",
125     cmdline('dbcheck-oldrelease.sh', '$PREFIX_ABS/provision',
126             'alpha13', '--quick-membership-checks'))
127
128 plantestsuite(
129     "samba4.blackbox.dbcheck.release-4-0-0", "none",
130     cmdline('dbcheck-oldrelease.sh', '$PREFIX_ABS/provision',
131             'release-4-0-0'))
132
133 # same test as above but skip member link checks
134 plantestsuite(
135     "samba4.blackbox.dbcheck.release-4-0-0.quick", "none",
136     cmdline('dbcheck-oldrelease.sh', '$PREFIX_ABS/provision',
137             'release-4-0-0', '--quick-membership-checks'))
138
139 plantestsuite(
140     "samba4.blackbox.dbcheck.release-4-1-0rc3", "none",
141     cmdline('dbcheck-oldrelease.sh', '$PREFIX_ABS/provision',
142             'release-4-1-0rc3'))
143
144 # same test as above but skip member link checks
145 plantestsuite(
146     "samba4.blackbox.dbcheck.release-4-1-0rc3.quick", "none",
147     cmdline('dbcheck-oldrelease.sh', '$PREFIX_ABS/provision',
148             'release-4-1-0rc3', '--quick-membership-checks'))
149
150 plantestsuite(
151     "samba4.blackbox.dbcheck.release-4-1-6-partial-object", "none",
152     cmdline('dbcheck-oldrelease.sh', '$PREFIX_ABS/provision',
153             'release-4-1-6-partial-object'))
154
155 # same test as above but skip member link checks
156 plantestsuite(
157     "samba4.blackbox.dbcheck.release-4-1-6-partial-object.quick", "none",
158     cmdline('dbcheck-oldrelease.sh', '$PREFIX_ABS/provision',
159             'release-4-1-6-partial-object', '--quick-membership-checks'))
160
161 plantestsuite(
162     "samba4.blackbox.dbcheck.release-4-5-0-pre1", "none",
163     cmdline('dbcheck-oldrelease.sh', '$PREFIX_ABS/provision',
164             'release-4-5-0-pre1'))
165
166 # same test as above but skip member link checks
167 plantestsuite(
168     "samba4.blackbox.dbcheck.release-4-5-0-pre1.quick", "none",
169     cmdline('dbcheck-oldrelease.sh', '$PREFIX_ABS/provision',
170             'release-4-5-0-pre1', '--quick-membership-checks'))
171
172 plantestsuite(
173     "samba4.blackbox.upgradeprovision.alpha13", "none",
174     cmdline('upgradeprovision-oldrelease.sh', '$PREFIX_ABS/provision',
175             'alpha13'))
176
177 plantestsuite(
178     "samba4.blackbox.upgradeprovision.release-4-0-0", "none",
179     cmdline('upgradeprovision-oldrelease.sh', '$PREFIX_ABS/provision',
180             'release-4-0-0'))
181
182 plantestsuite(
183     "samba4.blackbox.tombstones-expunge.release-4-5-0-pre1", "none",
184     cmdline('tombstones-expunge.sh', '$PREFIX_ABS/provision',
185             'release-4-5-0-pre1'))
186
187 plantestsuite(
188     "samba4.blackbox.dbcheck-links.release-4-5-0-pre1", "none",
189     cmdline('dbcheck-links.sh', '$PREFIX_ABS/provision',
190             'release-4-5-0-pre1'))
191
192 plantestsuite(
193     "samba4.blackbox.runtime-links.release-4-5-0-pre1", "none",
194     cmdline('runtime-links.sh', '$PREFIX_ABS/provision',
195             'release-4-5-0-pre1'))
196
197 plantestsuite(
198     "samba4.blackbox.schemaupgrade", "none",
199     cmdline('schemaupgrade.sh', '$PREFIX_ABS/provision'))
200
201 plantestsuite(
202     "samba4.blackbox.functionalprep", "none",
203     cmdline('functionalprep.sh', '$PREFIX_ABS/provision'))
204
205 planpythontestsuite("none", "samba.tests.upgradeprovision")
206 planpythontestsuite("none", "samba.tests.xattr")
207 planpythontestsuite("none", "samba.tests.ntacls")
208 planpythontestsuite("none", "samba.tests.policy")
209 planpythontestsuite("none", "samba.tests.kcc.graph")
210 planpythontestsuite("none", "samba.tests.kcc.graph_utils")
211 planpythontestsuite("none", "samba.tests.kcc.ldif_import_export")
212 planpythontestsuite("none", "samba.tests.graph")
213 plantestsuite("wafsamba.duplicate_symbols", "none", [os.path.join(srcdir(), "buildtools/wafsamba/test_duplicate_symbol.sh")])
214 planpythontestsuite("none", "samba.tests.glue")
215 planpythontestsuite("none", "samba.tests.tdb_util")
216 planpythontestsuite("none", "samba.tests.samdb_api")
217
218 if with_pam:
219     env = "ad_member"
220     options = [
221         {
222             "description": "krb5",
223             "pam_options": "krb5_auth krb5_ccache_type=FILE",
224         },
225         {
226             "description": "default",
227             "pam_options": "",
228         },
229     ]
230     for o in options:
231         description = o["description"]
232         pam_options = "'%s'" % o["pam_options"]
233
234         plantestsuite("samba.tests.pam_winbind(local+%s)" % description, env,
235                       [os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
236                        valgrindify(python), pam_wrapper_so_path,
237                        "$SERVER", "$USERNAME", "$PASSWORD",
238                        pam_options])
239         plantestsuite("samba.tests.pam_winbind(domain1+%s)" % description, env,
240                       [os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
241                        valgrindify(python), pam_wrapper_so_path,
242                        "$DOMAIN", "$DC_USERNAME", "$DC_PASSWORD",
243                        pam_options])
244         plantestsuite("samba.tests.pam_winbind(domain2+%s)" % description, env,
245                       [os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
246                        valgrindify(python), pam_wrapper_so_path,
247                        "$REALM", "$DC_USERNAME", "$DC_PASSWORD",
248                        pam_options])
249         plantestsuite("samba.tests.pam_winbind(domain3+%s)" % description, env,
250                       [os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
251                        valgrindify(python), pam_wrapper_so_path,
252                        "''", "${DC_USERNAME}@${DOMAIN}", "$DC_PASSWORD",
253                        pam_options])
254         plantestsuite("samba.tests.pam_winbind(domain4+%s)" % description, env,
255                       [os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
256                        valgrindify(python), pam_wrapper_so_path,
257                        "''", "${DC_USERNAME}@${REALM}", "$DC_PASSWORD",
258                        pam_options])
259         plantestsuite("samba.tests.pam_winbind(domain5+%s)" % description, env,
260                       [os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
261                        valgrindify(python), pam_wrapper_so_path,
262                        "$REALM", "${DC_USERNAME}@${DOMAIN}", "$DC_PASSWORD",
263                        pam_options])
264         plantestsuite("samba.tests.pam_winbind(domain6+%s)" % description, env,
265                       [os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
266                        valgrindify(python), pam_wrapper_so_path,
267                        "$DOMAIN", "${DC_USERNAME}@${REALM}", "$DC_PASSWORD",
268                        pam_options])
269         plantestsuite("samba.tests.pam_winbind(trust_f_both1+%s)" % description, env,
270                       [os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
271                        valgrindify(python), pam_wrapper_so_path,
272                        "$TRUST_F_BOTH_DOMAIN",
273                        "$TRUST_F_BOTH_USERNAME",
274                        "$TRUST_F_BOTH_PASSWORD",
275                        pam_options])
276         plantestsuite("samba.tests.pam_winbind(trust_f_both2+%s)" % description, env,
277                       [os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
278                        valgrindify(python), pam_wrapper_so_path,
279                        "$TRUST_F_BOTH_REALM",
280                        "$TRUST_F_BOTH_USERNAME",
281                        "$TRUST_F_BOTH_PASSWORD",
282                        pam_options])
283         plantestsuite("samba.tests.pam_winbind(trust_f_both3+%s)" % description, env,
284                       [os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
285                        valgrindify(python), pam_wrapper_so_path,
286                        "''",
287                        "${TRUST_F_BOTH_USERNAME}@${TRUST_F_BOTH_DOMAIN}",
288                        "$TRUST_F_BOTH_PASSWORD",
289                        pam_options])
290         plantestsuite("samba.tests.pam_winbind(trust_f_both4+%s)" % description, env,
291                       [os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
292                        valgrindify(python), pam_wrapper_so_path,
293                        "''",
294                        "${TRUST_F_BOTH_USERNAME}@${TRUST_F_BOTH_REALM}",
295                        "$TRUST_F_BOTH_PASSWORD",
296                        pam_options])
297         plantestsuite("samba.tests.pam_winbind(trust_f_both5+%s)" % description, env,
298                       [os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
299                        valgrindify(python), pam_wrapper_so_path,
300                        "${TRUST_F_BOTH_REALM}",
301                        "${TRUST_F_BOTH_USERNAME}@${TRUST_F_BOTH_DOMAIN}",
302                        "$TRUST_F_BOTH_PASSWORD",
303                        pam_options])
304         plantestsuite("samba.tests.pam_winbind(trust_f_both6+%s)" % description, env,
305                       [os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
306                        valgrindify(python), pam_wrapper_so_path,
307                        "${TRUST_F_BOTH_DOMAIN}",
308                        "${TRUST_F_BOTH_USERNAME}@${TRUST_F_BOTH_REALM}",
309                        "$TRUST_F_BOTH_PASSWORD",
310                        pam_options])
311         plantestsuite("samba.tests.pam_winbind(trust_e_both1+%s)" % description, env,
312                       [os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
313                        valgrindify(python), pam_wrapper_so_path,
314                        "$TRUST_E_BOTH_DOMAIN",
315                        "$TRUST_E_BOTH_USERNAME",
316                        "$TRUST_E_BOTH_PASSWORD",
317                        pam_options])
318         plantestsuite("samba.tests.pam_winbind(trust_e_both2+%s)" % description, env,
319                       [os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
320                        valgrindify(python), pam_wrapper_so_path,
321                        "$TRUST_E_BOTH_REALM",
322                        "$TRUST_E_BOTH_USERNAME",
323                        "$TRUST_E_BOTH_PASSWORD",
324                        pam_options])
325         plantestsuite("samba.tests.pam_winbind(trust_e_both3+%s)" % description, env,
326                       [os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
327                        valgrindify(python), pam_wrapper_so_path,
328                        "''",
329                        "${TRUST_E_BOTH_USERNAME}@${TRUST_E_BOTH_DOMAIN}",
330                        "$TRUST_E_BOTH_PASSWORD",
331                        pam_options])
332         plantestsuite("samba.tests.pam_winbind(trust_e_both4+%s)" % description, env,
333                       [os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
334                        valgrindify(python), pam_wrapper_so_path,
335                        "''",
336                        "${TRUST_E_BOTH_USERNAME}@${TRUST_E_BOTH_REALM}",
337                        "$TRUST_E_BOTH_PASSWORD",
338                        pam_options])
339         plantestsuite("samba.tests.pam_winbind(trust_e_both5+%s)" % description, env,
340                       [os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
341                        valgrindify(python), pam_wrapper_so_path,
342                        "${TRUST_E_BOTH_REALM}",
343                        "${TRUST_E_BOTH_USERNAME}@${TRUST_E_BOTH_DOMAIN}",
344                        "$TRUST_E_BOTH_PASSWORD",
345                        pam_options])
346         plantestsuite("samba.tests.pam_winbind(trust_e_both6+%s)" % description, env,
347                       [os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
348                        valgrindify(python), pam_wrapper_so_path,
349                        "${TRUST_E_BOTH_DOMAIN}",
350                        "${TRUST_E_BOTH_USERNAME}@${TRUST_E_BOTH_REALM}",
351                        "$TRUST_E_BOTH_PASSWORD",
352                        pam_options])
353
354         for authtok_options in ["", "use_authtok", "try_authtok"]:
355             _pam_options = "'%s %s'" % (o["pam_options"], authtok_options)
356             _description = "%s %s" % (description, authtok_options)
357             plantestsuite("samba.tests.pam_winbind_chauthtok(domain+%s)" % _description, env,
358                           [os.path.join(srcdir(), "python/samba/tests/test_pam_winbind_chauthtok.sh"),
359                            valgrindify(python), pam_wrapper_so_path, pam_set_items_so_path,
360                            "$DOMAIN", "TestPamOptionsUser", "oldp@ssword0", "newp@ssword0",
361                            _pam_options, 'yes',
362                            "$DC_SERVER", "$DC_USERNAME", "$DC_PASSWORD"])
363
364         plantestsuite("samba.tests.pam_winbind_warn_pwd_expire(domain+%s)" % description, env,
365                       [os.path.join(srcdir(), "python/samba/tests/test_pam_winbind_warn_pwd_expire.sh"),
366                        valgrindify(python), pam_wrapper_so_path,
367                        "$DOMAIN", "alice", "Secret007",
368                        pam_options])
369
370
371 plantestsuite("samba.unittests.krb5samba", "none",
372               [os.path.join(bindir(), "default/testsuite/unittests/test_krb5samba")])
373 plantestsuite("samba.unittests.sambafs_srv_pipe", "none",
374               [os.path.join(bindir(), "default/testsuite/unittests/test_sambafs_srv_pipe")])
375 plantestsuite("samba.unittests.lib_util_modules", "none",
376               [os.path.join(bindir(), "default/testsuite/unittests/test_lib_util_modules")])
377
378 plantestsuite("samba.unittests.smb1cli_session", "none",
379               [os.path.join(bindir(), "default/libcli/smb/test_smb1cli_session")])
380 plantestsuite("samba.unittests.smb_util_translate", "none",
381               [os.path.join(bindir(), "default/libcli/smb/test_util_translate")])
382
383 plantestsuite("samba.unittests.talloc_keep_secret", "none",
384               [os.path.join(bindir(), "default/lib/util/test_talloc_keep_secret")])
385
386 plantestsuite("samba.unittests.tldap", "none",
387               [os.path.join(bindir(), "default/source3/test_tldap")])
388 plantestsuite("samba.unittests.rfc1738", "none",
389               [os.path.join(bindir(), "default/lib/util/test_rfc1738")])
390 plantestsuite("samba.unittests.kerberos", "none",
391               [os.path.join(bindir(), "test_kerberos")])
392 plantestsuite("samba.unittests.ms_fnmatch", "none",
393               [os.path.join(bindir(), "default/lib/util/test_ms_fnmatch")])
394 plantestsuite("samba.unittests.byteorder", "none",
395               [os.path.join(bindir(), "default/lib/util/test_byteorder")])
396 plantestsuite("samba.unittests.bytearray", "none",
397               [os.path.join(bindir(), "default/lib/util/test_bytearray")])
398 plantestsuite("samba.unittests.byteorder_verify", "none",
399               [os.path.join(bindir(), "default/lib/util/test_byteorder_verify")])
400 plantestsuite("samba.unittests.util_paths", "none",
401               [os.path.join(bindir(), "default/lib/util/test_util_paths")])
402 plantestsuite("samba.unittests.util", "none",
403               [os.path.join(bindir(), "default/lib/util/test_util")])
404 plantestsuite("samba.unittests.ntlm_check", "none",
405               [os.path.join(bindir(), "default/libcli/auth/test_ntlm_check")])
406 plantestsuite("samba.unittests.gnutls", "none",
407               [os.path.join(bindir(), "default/libcli/auth/test_gnutls")])
408 plantestsuite("samba.unittests.rc4_passwd_buffer", "none",
409               [os.path.join(bindir(), "default/libcli/auth/test_rc4_passwd_buffer")])
410 plantestsuite("samba.unittests.schannel", "none",
411               [os.path.join(bindir(), "default/libcli/auth/test_schannel")])
412 plantestsuite("samba.unittests.test_registry_regfio", "none",
413               [os.path.join(bindir(), "default/source3/test_registry_regfio")])
414 plantestsuite("samba.unittests.test_oLschema2ldif", "none",
415               [os.path.join(bindir(), "default/source4/utils/oLschema2ldif/test_oLschema2ldif")])
416 if with_elasticsearch_backend:
417     plantestsuite("samba.unittests.mdsparser_es", "none",
418                   [os.path.join(bindir(), "default/source3/test_mdsparser_es")] + [configuration])