b6fb166fe08eff72a8bd675ac2854afce40ee85a
[nivanova/samba-autobuild/.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=samba3", "--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", "s3dc:local", [os.path.join(samba3srcdir, "script/tests/test_success.sh")])
50 plantestsuite("samba3.blackbox.failure", "s3dc:local", [os.path.join(samba3srcdir, "script/tests/test_failure.sh")])
51
52 plantestsuite("samba3.local_s3", "s3dc: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", "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", "SMB2-BASIC",
63         "BAD-NBT-SESSION",
64         "LOCAL-string_to_sid", "LOCAL-CONVERT-STRING" ]
65
66 for t in tests:
67     plantestsuite("samba3.smbtorture_s3.plain(s3dc).%s" % t, "s3dc", [os.path.join(samba3srcdir, "script/tests/test_smbtorture_s3.sh"), t, '//$SERVER_IP/tmp', '$USERNAME', '$PASSWORD', binpath('smbtorture3'), "", "-l $LOCAL_PATH"])
68     plantestsuite("samba3.smbtorture_s3.crypt(s3dc).%s" % t, "s3dc", [os.path.join(samba3srcdir, "script/tests/test_smbtorture_s3.sh"), t, '//$SERVER_IP/tmp', '$USERNAME', '$PASSWORD', binpath('smbtorture3'), "-e", "-l $LOCAL_PATH"])
69
70 tests=["--ping", "--separator",
71        "--own-domain",
72        "--all-domains",
73        "--trusted-domains",
74        "--domain-info=BUILTIN",
75        "--domain-info=$DOMAIN",
76        "--online-status",
77        "--online-status --domain=BUILTIN",
78        "--online-status --domain=$DOMAIN",
79        "--check-secret --domain=$DOMAIN",
80        "--change-secret --domain=$DOMAIN",
81        "--check-secret --domain=$DOMAIN",
82        "--online-status --domain=$DOMAIN",
83        #Didn't pass yet# "--domain-users",
84        "--domain-groups",
85        "--name-to-sid=$USERNAME",
86        "--name-to-sid=$DOMAIN\\\\$USERNAME",
87      #Didn't pass yet# "--user-info=$USERNAME",
88        "--user-groups=$DOMAIN\\\\$USERNAME",
89        "--allocate-uid",
90        "--allocate-gid"]
91
92 for t in tests:
93     plantestsuite("samba3.wbinfo_s3.(s3dc:local).%s" % t, "s3dc:local", [os.path.join(samba3srcdir, "script/tests/test_wbinfo_s3.sh"), t])
94     plantestsuite("samba3.wbinfo_s3.(member:local).%s" % t, "member:local", [os.path.join(samba3srcdir, "script/tests/test_wbinfo_s3.sh"), t])
95
96 plantestsuite(
97     "samba3.wbinfo_sids2xids.(member:local)", "member:local",
98     [os.path.join(samba3srcdir, "script/tests/test_wbinfo_sids2xids.sh")])
99
100 plantestsuite("samba3.ntlm_auth.(s3dc:local)", "s3dc:local", [os.path.join(samba3srcdir, "script/tests/test_ntlm_auth_s3.sh"), valgrindify(python), samba3srcdir, binpath('ntlm_auth3'), configuration])
101
102 for env in ["s3dc", "member"]:
103     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])
104
105 for env in ["secserver"]:
106     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"])
107
108 for env in ["member"]:
109     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])
110
111 for env in ["maptoguest", "secshare", "secserver"]:
112     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"])
113
114 env = "maptoguest"
115 plantestsuite("samba3.blackbox.smbclient_auth.plain (%s) bad username" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_auth.sh"), '$SERVER', '$SERVER_IP', 'notmy$USERNAME', '$PASSWORD', binpath('smbclient3'), configuration + " --option=clientntlmv2auth=no --option=clientlanmanauth=yes"])
116
117 # plain
118 for env in ["s3dc"]:
119     plantestsuite("samba3.blackbox.smbclient_s3.plain (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_s3.sh"), '$SERVER', '$SERVER_IP', '$DOMAIN', '$DC_USERNAME', '$DC_PASSWORD', '$USERID', '$LOCAL_PATH', '$PREFIX', binpath('smbclient3'), configuration])
120
121 for env in ["member"]:
122     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', '$SERVER\\\\$USERNAME', '$PASSWORD', '$USERID', '$LOCAL_PATH', '$PREFIX', binpath('smbclient3'), configuration])
123
124 for env in ["s3dc"]:
125     plantestsuite("samba3.blackbox.smbclient_s3.sign (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_s3.sh"), '$SERVER', '$SERVER_IP', '$DOMAIN', '$DC_USERNAME', '$DC_PASSWORD', '$USERID', '$LOCAL_PATH', '$PREFIX', binpath('smbclient3'), configuration, "--signing=required"])
126
127 for env in ["member"]:
128     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', '$SERVER\\\\$USERNAME', '$PASSWORD', '$USERID', '$LOCAL_PATH', '$PREFIX', binpath('smbclient3'), configuration, "--signing=required"])
129
130 # encrypted
131 for env in ["s3dc"]:
132     plantestsuite("samba3.blackbox.smbclient_s3.crypt (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbclient_s3.sh"), '$SERVER', '$SERVER_IP', '$DOMAIN', '$USERNAME', '$PASSWORD', '$USERID', '$LOCAL_PATH', '$PREFIX', binpath('smbclient3'), configuration, "-e"])
133
134 #TODO encrypted against member, with member creds, and with DC creds
135 plantestsuite("samba3.blackbox.net.misc", "s3dc:local", [os.path.join(samba3srcdir, "script/tests/test_net_misc.sh"),
136                                                        scriptdir, "$SMB_CONF_PATH", configuration])
137 plantestsuite("samba3.blackbox.net.local.registry", "s3dc:local", [os.path.join(samba3srcdir, "script/tests/test_net_registry.sh"),
138                                                        scriptdir, "$SMB_CONF_PATH", configuration])
139 plantestsuite("samba3.blackbox.net.rpc.registry", "s3dc:local", [os.path.join(samba3srcdir, "script/tests/test_net_registry.sh"),
140                                                        scriptdir, "$SMB_CONF_PATH", configuration, 'rpc'])
141
142 plantestsuite("samba3.blackbox.net.local.registry.roundtrip", "s3dc:local", [os.path.join(samba3srcdir, "script/tests/test_net_registry_roundtrip.sh"),
143                                                        scriptdir, "$SMB_CONF_PATH", configuration])
144 plantestsuite("samba3.blackbox.testparm", "s3dc:local", [os.path.join(samba3srcdir, "script/tests/test_testparm_s3.sh"),
145                                                        "$LOCAL_PATH"])
146
147 plantestsuite(
148     "samba3.pthreadpool", "s3dc",
149     [os.path.join(samba3srcdir, "script/tests/test_pthreadpool.sh")])
150
151 #smbtorture4 tests
152
153 base = ["base.attr", "base.charset", "base.chkpath", "base.defer_open", "base.delaywrite", "base.delete",
154         "base.deny1", "base.deny2", "base.deny3", "base.denydos", "base.dir1", "base.dir2",
155         "base.disconnect", "base.fdpass", "base.lock",
156         "base.mangle", "base.negnowait", "base.ntdeny1",
157         "base.ntdeny2", "base.open", "base.openattr", "base.properties", "base.rename", "base.rw1",
158         "base.secleak", "base.tcon", "base.tcondev", "base.trans2", "base.unlink", "base.vuid",
159         "base.xcopy", "base.samba3error"]
160
161 raw = ["raw.acls", "raw.chkpath", "raw.close", "raw.composite", "raw.context", "raw.eas",
162        "raw.ioctl", "raw.lock", "raw.mkdir", "raw.mux", "raw.notify", "raw.open", "raw.oplock"
163        "raw.qfileinfo", "raw.qfsinfo", "raw.read", "raw.rename", "raw.search", "raw.seek",
164        "raw.sfileinfo.base", "raw.sfileinfo.bug", "raw.streams", "raw.unlink", "raw.write",
165        "raw.samba3hide", "raw.samba3badpath", "raw.sfileinfo.rename",
166        "raw.samba3caseinsensitive", "raw.samba3posixtimedlock",
167        "raw.samba3rootdirfid", "raw.sfileinfo.end-of-file",
168        "raw.bench-oplock", "raw.bench-lock", "raw.bench-open", "raw.bench-tcon",
169        "raw.samba3checkfsp", "raw.samba3closeerr", "raw.samba3oplocklogoff"]
170
171 smb2 = ["smb2.lock", "smb2.read", "smb2.compound", "smb2.connect", "smb2.scan", "smb2.scanfind",
172         "smb2.bench-oplock"]
173
174 rpc = ["rpc.authcontext", "rpc.samba3.bind", "rpc.samba3.srvsvc", "rpc.samba3.sharesec",
175        "rpc.samba3.spoolss", "rpc.samba3.wkssvc", "rpc.samba3.winreg",
176        "rpc.samba3.getaliasmembership-0",
177        "rpc.samba3.netlogon", "rpc.samba3.sessionkey", "rpc.samba3.getusername",
178        "rpc.svcctl", "rpc.ntsvcs", "rpc.winreg", "rpc.eventlog",
179        "rpc.spoolss.printserver", "rpc.spoolss.win", "rpc.spoolss.notify", "rpc.spoolss.printer",
180        "rpc.spoolss.driver",
181        "rpc.lsa-getuser", "rpc.lsa.lookupsids", "rpc.lsa.lookupnames",
182        "rpc.lsa.privileges", 
183        "rpc.samr", "rpc.samr.users", "rpc.samr.users.privileges", "rpc.samr.passwords",
184        "rpc.samr.passwords.pwdlastset", "rpc.samr.large-dc", "rpc.samr.machine.auth",
185        "rpc.netlogon.admin",
186        "rpc.schannel", "rpc.schannel2", "rpc.bench-schannel1", "rpc.join", "rpc.bind", "rpc.epmapper"]
187
188 local = ["local.nss-wrapper", "local.ndr"]
189
190 winbind = ["winbind.struct", "winbind.wbclient"]
191
192 rap = ["rap.basic", "rap.rpc", "rap.printing", "rap.sam"]
193
194 unix = ["unix.info2", "unix.whoami"]
195
196 nbt = ["nbt.dgram" ]
197
198 libsmbclient = ["libsmbclient"]
199
200 tests= base + raw + smb2 + rpc + unix + local + winbind + rap + nbt + libsmbclient
201
202 sub = subprocess.Popen("%s --version 2> /dev/null" % smb4torture, stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=True)
203 sub.communicate("")
204
205 if sub.returncode == 0:
206     for t in tests:
207         if t == "base.delaywrite":
208             plansmbtorturetestsuite(t, "s3dc", '//$SERVER_IP/tmp -U$USERNAME%$PASSWORD --maximum-runtime=900')
209         elif t == "rap.sam":
210             plansmbtorturetestsuite(t, "s3dc", '//$SERVER_IP/tmp -U$USERNAME%$PASSWORD --option=doscharset=ISO-8859-1')
211         elif t == "unix.whoami":
212             plansmbtorturetestsuite(t, "s3dc", '//$SERVER_IP/tmpguest -U$USERNAME%$PASSWORD')
213         elif t == "raw.samba3posixtimedlock":
214             plansmbtorturetestsuite(t, "s3dc", '//$SERVER_IP/tmpguest -U$USERNAME%$PASSWORD --option=torture:localdir=$SELFTEST_PREFIX/s3dc/share')
215         elif t == "raw.chkpath":
216             plansmbtorturetestsuite(t, "s3dc", '//$SERVER_IP/tmpcase -U$USERNAME%$PASSWORD')
217         else:
218             plansmbtorturetestsuite(t, "s3dc", '//$SERVER_IP/tmp -U$USERNAME%$PASSWORD')
219
220
221     test = 'rpc.lsa.lookupsids'
222     auth_options = ["", "ntlm", "spnego" ]
223     signseal_options = ["", ",connect", ",sign", ",seal"]
224     smb_options = ["", ",smb2"]
225     endianness_options = ["", ",bigendian"]
226     for z in smb_options:
227         for s in signseal_options:
228             for e in endianness_options:
229                 for a in auth_options:
230                     binding_string = "ncacn_np:$SERVER[%s%s%s%s]" % (a, s, z, e)
231                     options = binding_string + " -U$USERNAME%$PASSWORD"
232                     plansmbtorturetestsuite(test, "s3dc", options, 'over ncacn_np with [%s%s%s%s] ' % (a, s, z, e))
233
234             # We should try more combinations in future, but this is all
235             # the pre-calculated credentials cache supports at the moment
236             e = ""
237             a = ""
238             binding_string = "ncacn_np:$SERVER[%s%s%s%s]" % (a, s, z, e)
239             options = binding_string + " -k yes --krb5-ccache=$PREFIX/ktest/krb5_ccache-2"
240             plansmbtorturetestsuite(test, "ktest", options, 'over kerberos with old ccache ncacn_np with [%s%s%s%s] ' % (a, s, z, e))
241
242             options = binding_string + " -k yes --krb5-ccache=$PREFIX/ktest/krb5_ccache-3"
243             plansmbtorturetestsuite(test, "ktest", options, 'over kerberos ncacn_np with [%s%s%s%s] ' % (a, s, z, e))
244
245
246
247     for e in endianness_options:
248         for a in auth_options:
249             for s in signseal_options:
250                 binding_string = "ncacn_ip_tcp:$SERVER_IP[%s%s%s]" % (a, s, e)
251                 options = binding_string + " -U$USERNAME%$PASSWORD"
252                 plansmbtorturetestsuite(test, "s3dc", options, 'over ncacn_ip_tcp with [%s%s%s] ' % (a, s, e))