selftest: Run tests for libsmbclient and libnetapi
[kai/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=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",
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 ["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 # plain
115 for env in ["s3dc"]:
116     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])
117
118 for env in ["member"]:
119     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])
120
121 for env in ["s3dc"]:
122     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"])
123
124 for env in ["member"]:
125     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"])
126
127 # encrypted
128 for env in ["s3dc"]:
129     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"])
130
131 #TODO encrypted against member, with member creds, and with DC creds
132 plantestsuite("samba3.blackbox.net.misc", "s3dc:local", [os.path.join(samba3srcdir, "script/tests/test_net_misc.sh"),
133                                                        scriptdir, "$SMB_CONF_PATH", configuration])
134 plantestsuite("samba3.blackbox.net.local.registry", "s3dc:local", [os.path.join(samba3srcdir, "script/tests/test_net_registry.sh"),
135                                                        scriptdir, "$SMB_CONF_PATH", configuration])
136 plantestsuite("samba3.blackbox.net.rpc.registry", "s3dc:local", [os.path.join(samba3srcdir, "script/tests/test_net_registry.sh"),
137                                                        scriptdir, "$SMB_CONF_PATH", configuration, 'rpc'])
138
139 plantestsuite("samba3.blackbox.net.local.registry.roundtrip", "s3dc:local", [os.path.join(samba3srcdir, "script/tests/test_net_registry_roundtrip.sh"),
140                                                        scriptdir, "$SMB_CONF_PATH", configuration])
141 plantestsuite("samba3.blackbox.testparm", "s3dc:local", [os.path.join(samba3srcdir, "script/tests/test_testparm_s3.sh"),
142                                                        "$LOCAL_PATH"])
143
144 plantestsuite(
145     "samba3.pthreadpool", "s3dc",
146     [os.path.join(samba3srcdir, "script/tests/test_pthreadpool.sh")])
147
148 #smbtorture4 tests
149
150 base = ["base.attr", "base.charset", "base.chkpath", "base.defer_open", "base.delaywrite", "base.delete",
151         "base.deny1", "base.deny2", "base.deny3", "base.denydos", "base.dir1", "base.dir2",
152         "base.disconnect", "base.fdpass", "base.lock",
153         "base.mangle", "base.negnowait", "base.ntdeny1",
154         "base.ntdeny2", "base.open", "base.openattr", "base.properties", "base.rename", "base.rw1",
155         "base.secleak", "base.tcon", "base.tcondev", "base.trans2", "base.unlink", "base.vuid",
156         "base.xcopy", "base.samba3error"]
157
158 raw = ["raw.acls", "raw.chkpath", "raw.close", "raw.composite", "raw.context", "raw.eas",
159        "raw.ioctl", "raw.lock", "raw.mkdir", "raw.mux", "raw.notify", "raw.open", "raw.oplock"
160        "raw.qfileinfo", "raw.qfsinfo", "raw.read", "raw.rename", "raw.search", "raw.seek",
161        "raw.sfileinfo.base", "raw.sfileinfo.bug", "raw.streams", "raw.unlink", "raw.write",
162        "raw.samba3hide", "raw.samba3badpath", "raw.sfileinfo.rename",
163        "raw.samba3caseinsensitive", "raw.samba3posixtimedlock",
164        "raw.samba3rootdirfid", "raw.sfileinfo.end-of-file",
165        "raw.bench-oplock", "raw.bench-lock", "raw.bench-open", "raw.bench-tcon",
166        "raw.samba3checkfsp", "raw.samba3closeerr", "raw.samba3oplocklogoff"]
167
168 smb2 = ["smb2.lock", "smb2.read", "smb2.compound", "smb2.connect", "smb2.scan", "smb2.scanfind",
169         "smb2.bench-oplock"]
170
171 rpc = ["rpc.authcontext", "rpc.samba3.bind", "rpc.samba3.srvsvc", "rpc.samba3.sharesec",
172        "rpc.samba3.spoolss", "rpc.samba3.wkssvc", "rpc.samba3.winreg",
173        "rpc.samba3.getaliasmembership-0",
174        "rpc.samba3.netlogon", "rpc.samba3.sessionkey", "rpc.samba3.getusername",
175        "rpc.svcctl", "rpc.ntsvcs", "rpc.winreg", "rpc.eventlog",
176        "rpc.spoolss.printserver", "rpc.spoolss.win", "rpc.spoolss.notify", "rpc.spoolss.printer",
177        "rpc.spoolss.driver",
178        "rpc.lsa-getuser", "rpc.lsa.lookupsids", "rpc.lsa.lookupnames",
179        "rpc.lsa.privileges", 
180        "rpc.samr", "rpc.samr.users", "rpc.samr.users.privileges", "rpc.samr.passwords",
181        "rpc.samr.passwords.pwdlastset", "rpc.samr.large-dc", "rpc.samr.machine.auth",
182        "rpc.netlogon.admin",
183        "rpc.schannel", "rpc.schannel2", "rpc.bench-schannel1", "rpc.join", "rpc.bind", "rpc.epmapper"]
184
185 local = ["local.nss-wrapper", "local.ndr"]
186
187 winbind = ["winbind.struct", "winbind.wbclient"]
188
189 rap = ["rap.basic", "rap.rpc", "rap.printing", "rap.sam"]
190
191 unix = ["unix.info2", "unix.whoami"]
192
193 nbt = ["nbt.dgram" ]
194
195 libsmbclient = ["libsmbclient"]
196
197 tests= base + raw + smb2 + rpc + unix + local + winbind + rap + nbt + libsmbclient
198
199 sub = subprocess.Popen("%s --version 2> /dev/null" % smb4torture, stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=True)
200 sub.communicate("")
201
202 if sub.returncode == 0:
203     for t in tests:
204         if t == "base.delaywrite":
205             plansmbtorturetestsuite(t, "s3dc", '//$SERVER_IP/tmp -U$USERNAME%$PASSWORD --maximum-runtime=900')
206         elif t == "rap.sam":
207             plansmbtorturetestsuite(t, "s3dc", '//$SERVER_IP/tmp -U$USERNAME%$PASSWORD --option=doscharset=ISO-8859-1')
208         elif t == "unix.whoami":
209             plansmbtorturetestsuite(t, "s3dc", '//$SERVER_IP/tmpguest -U$USERNAME%$PASSWORD')
210         elif t == "raw.samba3posixtimedlock":
211             plansmbtorturetestsuite(t, "s3dc", '//$SERVER_IP/tmpguest -U$USERNAME%$PASSWORD --option=torture:localdir=$SELFTEST_PREFIX/s3dc/share')
212         elif t == "raw.chkpath":
213             plansmbtorturetestsuite(t, "s3dc", '//$SERVER_IP/tmpcase -U$USERNAME%$PASSWORD')
214         else:
215             plansmbtorturetestsuite(t, "s3dc", '//$SERVER_IP/tmp -U$USERNAME%$PASSWORD')
216
217
218     test = 'rpc.lsa.lookupsids'
219     auth_options = ["", "ntlm", "spnego" ]
220     signseal_options = ["", ",connect", ",sign", ",seal"]
221     smb_options = ["", ",smb2"]
222     endianness_options = ["", ",bigendian"]
223     for z in smb_options:
224         for s in signseal_options:
225             for e in endianness_options:
226                 for a in auth_options:
227                     binding_string = "ncacn_np:$SERVER[%s%s%s%s]" % (a, s, z, e)
228                     options = binding_string + " -U$USERNAME%$PASSWORD"
229                     plansmbtorturetestsuite(test, "s3dc", options, 'over ncacn_np with [%s%s%s%s] ' % (a, s, z, e))
230
231             # We should try more combinations in future, but this is all
232             # the pre-calculated credentials cache supports at the moment
233             e = ""
234             a = ""
235             binding_string = "ncacn_np:$SERVER[%s%s%s%s]" % (a, s, z, e)
236             options = binding_string + " -k yes --krb5-ccache=$PREFIX/ktest/krb5_ccache-2"
237             plansmbtorturetestsuite(test, "ktest", options, 'over kerberos with old ccache ncacn_np with [%s%s%s%s] ' % (a, s, z, e))
238
239             options = binding_string + " -k yes --krb5-ccache=$PREFIX/ktest/krb5_ccache-3"
240             plansmbtorturetestsuite(test, "ktest", options, 'over kerberos ncacn_np with [%s%s%s%s] ' % (a, s, z, e))
241
242
243
244     for e in endianness_options:
245         for a in auth_options:
246             for s in signseal_options:
247                 binding_string = "ncacn_ip_tcp:$SERVER_IP[%s%s%s]" % (a, s, e)
248                 options = binding_string + " -U$USERNAME%$PASSWORD"
249                 plansmbtorturetestsuite(test, "s3dc", options, 'over ncacn_ip_tcp with [%s%s%s] ' % (a, s, e))