selftest Add binary mappings for samba3 selftest
[samba.git] / source3 / selftest / tests.py
1 #!/usr/bin/python
2 # This script generates a list of testsuites that should be run as part of 
3 # the Samba 3 test suite.
4
5 # The output of this script is parsed by selftest.pl, which then decides 
6 # which of the tests to actually run. It will, for example, skip all tests 
7 # listed in selftest/skip or only run a subset during "make quicktest".
8
9 # The idea is that this script outputs all of the tests of Samba 3, not 
10 # just those that are known to pass, and list those that should be skipped 
11 # or are known to fail in selftest/skip or selftest/samba4-knownfail. This makes it 
12 # very easy to see what functionality is still missing in Samba 3 and makes 
13 # it possible to run the testsuite against other servers, such as Samba 4 or 
14 # Windows that have a different set of features.
15
16 # The syntax for a testsuite is "-- TEST --" on a single line, followed 
17 # by the name of the test, the environment it needs and the command to run, all 
18 # three separated by newlines. All other lines in the output are considered 
19 # comments.
20
21 import os, sys
22 sys.path.insert(0, os.path.normpath(os.path.join(os.path.dirname(__file__), "../../selftest")))
23 from selftesthelpers import *
24 import subprocess
25
26 smb4torture = binpath("smbtorture4")
27 samba3srcdir = srcdir() + "/source3"
28 configuration = "--configfile=$SMB_CONF_PATH"
29 scriptdir=os.path.join(samba3srcdir, "../script/tests")
30
31 torture_options = [configuration, "--maximum-runtime=$SELFTEST_MAXTIME", 
32                    "--target=$SELFTEST_TARGET", "--basedir=$SELFTEST_TMPDIR",
33                    '--option="torture:winbindd_netbios_name=$SERVER"',
34                    '--option="torture:winbindd_netbios_domain=$DOMAIN"', 
35                    '--option=torture:sharedelay=100000']
36
37 if not os.getenv("SELFTEST_VERBOSE"):
38     torture_options.append("--option=torture:progress=no")
39 torture_options.append("--format=subunit")
40 if os.getenv("SELFTEST_QUICK"):
41     torture_options.append("--option=torture:quick=yes")
42 smb4torture += " " + " ".join(torture_options)
43
44 def plansmbtorturetestsuite(name, env, options, description=''):
45     modname = "samba3.posix_s3.%s %s" % (name, description)
46     cmdline = "%s $LISTOPT %s %s" % (valgrindify(smb4torture), options, name)
47     plantestsuite_loadlist(modname, env, cmdline)
48
49 plantestsuite("samba3.blackbox.success", "dc:local", [os.path.join(samba3srcdir, "script/tests/test_success.sh")])
50 plantestsuite("samba3.blackbox.failure", "dc:local", [os.path.join(samba3srcdir, "script/tests/test_failure.sh")])
51
52 plantestsuite("samba3.local_s3", "dc:local", [os.path.join(samba3srcdir, "script/tests/test_local_s3.sh")])
53
54 tests=[ "FDPASS", "LOCK1", "LOCK2", "LOCK3", "LOCK4", "LOCK5", "LOCK6", "LOCK7", "LOCK9",
55         "UNLINK", "BROWSE", "ATTR", "TRANS2", "TORTURE",
56         "OPLOCK1", "OPLOCK2", "OPLOCK3", "OPLOCK4", "STREAMERROR",
57         "DIR", "DIR1", "DIR-CREATETIME", "TCON", "TCONDEV", "RW1", "RW2", "RW3", "RW-SIGNING",
58         "OPEN", "XCOPY", "RENAME", "DELETE", "DELETE-LN", "PROPERTIES", "W2K",
59         "TCON2", "IOCTL", "CHKPATH", "FDSESS", "LOCAL-SUBSTITUTE", "CHAIN1",
60         "GETADDRINFO", "POSIX", "UID-REGRESSION-TEST", "SHORTNAME-TEST",
61         "LOCAL-BASE64", "LOCAL-GENCACHE", "POSIX-APPEND",
62         "CASE-INSENSITIVE-CREATE",
63         "LOCAL-string_to_sid", "LOCAL-CONVERT-STRING" ]
64
65 for t in tests:
66     plantestsuite("samba3.smbtorture_s3.plain(dc).%s" % t, "dc", [os.path.join(samba3srcdir, "script/tests/test_smbtorture_s3.sh"), t, '//$SERVER_IP/tmp', '$USERNAME', '$PASSWORD', binpath('smbtorture3'), "", "-l $LOCAL_PATH"])
67     plantestsuite("samba3.smbtorture_s3.crypt(dc).%s" % t, "dc", [os.path.join(samba3srcdir, "script/tests/test_smbtorture_s3.sh"), t, '//$SERVER_IP/tmp', '$USERNAME', '$PASSWORD', binpath('smbtorture3'), "-e", "-l $LOCAL_PATH"])
68
69 tests=["--ping", "--separator",
70        "--own-domain",
71        "--all-domains",
72        "--trusted-domains",
73        "--domain-info=BUILTIN",
74        "--domain-info=$DOMAIN",
75        "--online-status",
76        "--online-status --domain=BUILTIN",
77        "--online-status --domain=$DOMAIN",
78        "--check-secret --domain=$DOMAIN",
79        "--change-secret --domain=$DOMAIN",
80        "--check-secret --domain=$DOMAIN",
81        "--online-status --domain=$DOMAIN",
82        #Didn't pass yet# "--domain-users",
83        "--domain-groups",
84        "--name-to-sid=$USERNAME",
85        "--name-to-sid=$DOMAIN\\\\$USERNAME",
86      #Didn't pass yet# "--user-info=$USERNAME",
87        "--user-groups=$DOMAIN\\\\$USERNAME",
88        "--allocate-uid",
89        "--allocate-gid"]
90
91 for t in tests:
92     plantestsuite("samba3.wbinfo_s3.(dc:local).%s" % t, "dc:local", [os.path.join(samba3srcdir, "script/tests/test_wbinfo_s3.sh"), t])
93     plantestsuite("samba3.wbinfo_s3.(member:local).%s" % t, "member:local", [os.path.join(samba3srcdir, "script/tests/test_wbinfo_s3.sh"), t])
94
95 plantestsuite(
96     "samba3.wbinfo_sids2xids.(member:local)", "member:local",
97     [os.path.join(samba3srcdir, "script/tests/test_wbinfo_sids2xids.sh")])
98
99 plantestsuite("samba3.ntlm_auth.(dc:local)", "dc:local", [os.path.join(samba3srcdir, "script/tests/test_ntlm_auth_s3.sh"), valgrindify(python), samba3srcdir, binpath('ntlm_auth3'), configuration])
100
101 for env in ["dc", "member"]:
102     plantestsuite("samba3.blackbox.smbclient_auth.plain (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_auth.sh"), '$SERVER', '$SERVER_IP', '$DC_USERNAME', '$DC_PASSWORD', binpath('smbclient3'), configuration])
103
104 for env in ["secserver"]:
105     plantestsuite("samba3.blackbox.smbclient_auth.plain (%s) domain creds" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_auth.sh"), '$SERVER', '$SERVER_IP', '$DOMAIN\\\\$DC_USERNAME', '$DC_PASSWORD', binpath('smbclient3'), configuration + " --option=clientntlmv2auth=no"])
106
107 for env in ["member"]:
108     plantestsuite("samba3.blackbox.smbclient_auth.plain (%s) member creds" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_auth.sh"), '$SERVER', '$SERVER_IP', '$SERVER\\\\$USERNAME', '$PASSWORD', binpath('smbclient3'), configuration])
109
110 for env in ["secshare", "secserver"]:
111     plantestsuite("samba3.blackbox.smbclient_auth.plain (%s) local creds" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_auth.sh"), '$SERVER', '$SERVER_IP', '$USERNAME', '$PASSWORD', binpath('smbclient3'), configuration + " --option=clientntlmv2auth=no --option=clientlanmanauth=yes"])
112
113 # plain
114 for env in ["dc"]:
115     plantestsuite("samba3.blackbox.smbclient_s3.plain (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_s3.sh"), '$SERVER', '$SERVER_IP', '$DC_USERNAME', '$DC_PASSWORD', '$USERID', '$LOCAL_PATH', '$PREFIX', binpath('smbclient3'), configuration])
116
117 for env in ["member"]:
118     plantestsuite("samba3.blackbox.smbclient_s3.plain (%s) member creds" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_s3.sh"), '$SERVER', '$SERVER_IP', '$SERVER\\\\$USERNAME', '$PASSWORD', '$USERID', '$LOCAL_PATH', '$PREFIX', binpath('smbclient3'), configuration])
119
120 for env in ["dc"]:
121     plantestsuite("samba3.blackbox.smbclient_s3.sign (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_s3.sh"), '$SERVER', '$SERVER_IP', '$DC_USERNAME', '$DC_PASSWORD', '$USERID', '$LOCAL_PATH', '$PREFIX', binpath('smbclient3'), configuration, "--signing=required"])
122
123 for env in ["member"]:
124     plantestsuite("samba3.blackbox.smbclient_s3.sign (%s) member creds" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_s3.sh"), '$SERVER', '$SERVER_IP', '$SERVER\\\\$USERNAME', '$PASSWORD', '$USERID', '$LOCAL_PATH', '$PREFIX', binpath('smbclient3'), configuration, "--signing=required"])
125
126 # encrypted
127 for env in ["dc"]:
128     plantestsuite("samba3.blackbox.smbclient_s3.crypt (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_s3.sh"), '$SERVER', '$SERVER_IP', '$USERNAME', '$PASSWORD', '$USERID', '$LOCAL_PATH', '$PREFIX', binpath('smbclient3'), configuration, "-e"])
129
130 #TODO encrypted against member, with member creds, and with DC creds
131 plantestsuite("samba3.blackbox.net.misc", "dc:local", [os.path.join(samba3srcdir, "script/tests/test_net_misc.sh"),
132                                                        scriptdir, "$SMB_CONF_PATH", configuration])
133 plantestsuite("samba3.blackbox.net.local.registry", "dc:local", [os.path.join(samba3srcdir, "script/tests/test_net_registry.sh"),
134                                                        scriptdir, "$SMB_CONF_PATH", configuration])
135 plantestsuite("samba3.blackbox.net.rpc.registry", "dc:local", [os.path.join(samba3srcdir, "script/tests/test_net_registry.sh"),
136                                                        scriptdir, "$SMB_CONF_PATH", configuration, 'rpc'])
137
138 plantestsuite("samba3.blackbox.net.local.registry.roundtrip", "dc:local", [os.path.join(samba3srcdir, "script/tests/test_net_registry_roundtrip.sh"),
139                                                        scriptdir, "$SMB_CONF_PATH", configuration])
140 plantestsuite("samba3.blackbox.testparm", "dc:local", [os.path.join(samba3srcdir, "script/tests/test_testparm_s3.sh"),
141                                                        "$LOCAL_PATH"])
142
143
144 #smbtorture4 tests
145
146 base = ["base.attr", "base.charset", "base.chkpath", "base.defer_open", "base.delaywrite", "base.delete",
147         "base.deny1", "base.deny2", "base.deny3", "base.denydos", "base.dir1", "base.dir2",
148         "base.disconnect", "base.fdpass", "base.lock",
149         "base.mangle", "base.negnowait", "base.ntdeny1",
150         "base.ntdeny2", "base.open", "base.openattr", "base.properties", "base.rename", "base.rw1",
151         "base.secleak", "base.tcon", "base.tcondev", "base.trans2", "base.unlink", "base.vuid",
152         "base.xcopy", "base.samba3error"]
153
154 raw = ["raw.acls", "raw.chkpath", "raw.close", "raw.composite", "raw.context", "raw.eas",
155        "raw.ioctl", "raw.lock", "raw.mkdir", "raw.mux", "raw.notify", "raw.open", "raw.oplock"
156        "raw.qfileinfo", "raw.qfsinfo", "raw.read", "raw.rename", "raw.search", "raw.seek",
157        "raw.sfileinfo.base", "raw.sfileinfo.bug", "raw.streams", "raw.unlink", "raw.write",
158        "raw.samba3hide", "raw.samba3badpath", "raw.sfileinfo.rename",
159        "raw.samba3caseinsensitive", "raw.samba3posixtimedlock",
160        "raw.samba3rootdirfid", "raw.sfileinfo.end-of-file"]
161
162 smb2 = ["smb2.lock", "smb2.read", "smb2.compound", "smb2.connect", "smb2.scan", "smb2.scanfind",
163         "smb2.bench-oplock"]
164
165 rpc = ["rpc.authcontext", "rpc.samba3.bind", "rpc.samba3.srvsvc", "rpc.samba3.sharesec",
166        "rpc.samba3.spoolss", "rpc.samba3.wkssvc", "rpc.samba3.winreg",
167        "rpc.samba3.getaliasmembership-0",
168        "rpc.samba3.netlogon", "rpc.samba3.sessionkey", "rpc.samba3.getusername",
169        "rpc.svcctl", "rpc.ntsvcs", "rpc.winreg", "rpc.eventlog",
170        "rpc.spoolss.printserver", "rpc.spoolss.win", "rpc.spoolss.notify", "rpc.spoolss.printer",
171        "rpc.spoolss.driver",
172        "rpc.lsa-getuser", "rpc.lsa.lookupsids", "rpc.lsa.lookupnames",
173        "rpc.lsa.privileges", 
174        "rpc.samr", "rpc.samr.users", "rpc.samr.users.privileges", "rpc.samr.passwords",
175        "rpc.samr.passwords.pwdlastset", "rpc.samr.large-dc", "rpc.samr.machine.auth",
176        "rpc.netlogon.admin",
177        "rpc.schannel", "rpc.schannel2", "rpc.bench-schannel1", "rpc.join", "rpc.bind", "rpc.epmapper"]
178
179 local = ["local.nss-wrapper", "local.ndr"]
180
181 winbind = ["winbind.struct", "winbind.wbclient"]
182
183 rap = ["rap.basic", "rap.rpc", "rap.printing", "rap.sam"]
184
185 unix = ["unix.info2", "unix.whoami"]
186
187 nbt = ["nbt.dgram" ]
188
189 tests= base + raw + smb2 + rpc + unix + local + winbind + rap + nbt
190
191 sub = subprocess.Popen("%s --version 2> /dev/null" % smb4torture, stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=True)
192 sub.communicate("")
193
194 if sub.returncode == 0:
195     for t in tests:
196         if t == "base.delaywrite":
197             plansmbtorturetestsuite(t, "dc", '//$SERVER_IP/tmp -U$USERNAME%$PASSWORD --maximum-runtime=900')
198         if t == "rap.sam":
199             plansmbtorturetestsuite(t, "dc", '//$SERVER_IP/tmp -U$USERNAME%$PASSWORD --option=doscharset=ISO-8859-1')
200         elif t == "unix.whoami":
201             plansmbtorturetestsuite(t, "dc", '//$SERVER_IP/tmpguest -U$USERNAME%$PASSWORD')
202         elif t == "raw.samba3posixtimedlock":
203             plansmbtorturetestsuite(t, "dc", '//$SERVER_IP/tmpguest -U$USERNAME%$PASSWORD --option=torture:localdir=$SELFTEST_PREFIX/dc/share')
204         else:
205             plansmbtorturetestsuite(t, "dc", '//$SERVER_IP/tmp -U$USERNAME%$PASSWORD')
206
207         if t == "raw.chkpath":
208             plansmbtorturetestsuite(t, "dc", '//$SERVER_IP/tmpcase -U$USERNAME%$PASSWORD')
209
210     test = 'rpc.lsa.lookupsids'
211     auth_options = ["", "ntlm", "spnego" ]
212     signseal_options = ["", ",connect", ",sign", ",seal"]
213     smb_options = ["", ",smb2"]
214     endianness_options = ["", ",bigendian"]
215     for z in smb_options:
216         for s in signseal_options:
217             for e in endianness_options:
218                 for a in auth_options:
219                     binding_string = "ncacn_np:$SERVER[%s%s%s%s]" % (a, s, z, e)
220                     options = binding_string + " -U$USERNAME%$PASSWORD"
221                     plansmbtorturetestsuite(test, "dc", options, 'over ncacn_np with [%s%s%s%s] ' % (a, s, z, e))
222
223             # We should try more combinations in future, but this is all
224             # the pre-calculated credentials cache supports at the moment
225             e = ""
226             a = ""
227             binding_string = "ncacn_np:$SERVER[%s%s%s%s]" % (a, s, z, e)
228             options = binding_string + " -k yes --krb5-ccache=$PREFIX/ktest/krb5_ccache-2"
229             plansmbtorturetestsuite(test, "ktest", options, 'over kerberos with old ccache ncacn_np with [%s%s%s%s] ' % (a, s, z, e))
230
231             options = binding_string + " -k yes --krb5-ccache=$PREFIX/ktest/krb5_ccache-3"
232             plansmbtorturetestsuite(test, "ktest", options, 'over kerberos ncacn_np with [%s%s%s%s] ' % (a, s, z, e))
233
234
235
236     for e in endianness_options:
237         for a in auth_options:
238             for s in signseal_options:
239                 binding_string = "ncacn_ip_tcp:$SERVER_IP[%s%s%s]" % (a, s, e)
240                 options = binding_string + " -U$USERNAME%$PASSWORD"
241                 plansmbtorturetestsuite(test, "dc", options, 'over ncacn_ip_tcp with [%s%s%s] ' % (a, s, e))