1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-22 13:34:15 +03:00
samba-mirror/selftest/tests.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

493 lines
24 KiB
Python
Raw Normal View History

#!/usr/bin/python
# This script generates a list of testsuites that should be run as part of
# the Samba test suite.
# The output of this script is parsed by selftest.pl, which then decides
# which of the tests to actually run. It will, for example, skip all tests
# listed in selftest/skip or only run a subset during "make quicktest".
# The idea is that this script outputs all of the tests of Samba, not
# just those that are known to pass, and list those that should be skipped
# or are known to fail in selftest/skip or selftest/knownfail. This makes it
# very easy to see what functionality is still missing in Samba and makes
# it possible to run the testsuite against other servers, such as
# Windows that have a different set of features.
# The syntax for a testsuite is "-- TEST --" on a single line, followed
# by the name of the test, the environment it needs and the command to run, all
# three separated by newlines. All other lines in the output are considered
# comments.
import os, tempfile
from selftesthelpers import bindir, srcdir, python
from selftesthelpers import planpythontestsuite, samba4srcdir
from selftesthelpers import plantestsuite, bbdir
from selftesthelpers import configuration, valgrindify
from selftesthelpers import skiptestsuite
try:
config_h = os.environ["CONFIG_H"]
except KeyError:
samba4bindir = bindir()
config_h = os.path.join(samba4bindir, "default/include/config.h")
# check available features
config_hash = dict()
f = open(config_h, 'r')
try:
lines = f.readlines()
config_hash = dict((x[0], ' '.join(x[1:]))
for x in map(lambda line: line.strip().split(' ')[1:],
list(filter(lambda line: (line[0:7] == '#define') and (len(line.split(' ')) > 2), lines))))
finally:
f.close()
have_man_pages_support = ("XSLTPROC_MANPAGES" in config_hash)
with_pam = ("WITH_PAM" in config_hash)
with_elasticsearch_backend = ("HAVE_SPOTLIGHT_BACKEND_ES" in config_hash)
pam_wrapper_so_path = config_hash.get("LIBPAM_WRAPPER_SO_PATH")
pam_set_items_so_path = config_hash.get("PAM_SET_ITEMS_SO_PATH")
have_heimdal_support = "SAMBA4_USES_HEIMDAL" in config_hash
using_system_gssapi = "USING_SYSTEM_GSSAPI" in config_hash
planpythontestsuite("none", "samba.tests.source")
planpythontestsuite("none", "samba.tests.source_chars")
if have_man_pages_support:
planpythontestsuite("none", "samba.tests.docs")
try:
import testscenarios
except ImportError:
skiptestsuite("subunit", "testscenarios not available")
else:
planpythontestsuite("none", "subunit.tests.test_suite")
planpythontestsuite("none", "samba.tests.blackbox.ndrdump")
planpythontestsuite("none", "samba.tests.blackbox.check_output")
planpythontestsuite("none", "api", name="ldb.python", extra_path=['lib/ldb/tests/python'])
planpythontestsuite("none", "samba.tests.credentials")
planpythontestsuite("none", "samba.tests.registry")
planpythontestsuite("ad_dc_ntvfs:local", "samba.tests.auth")
planpythontestsuite("none", "samba.tests.get_opt")
planpythontestsuite("none", "samba.tests.cred_opt")
planpythontestsuite("none", "samba.tests.security")
planpythontestsuite("none", "samba.tests.dcerpc.misc")
planpythontestsuite("none", "samba.tests.dcerpc.integer")
planpythontestsuite("none", "samba.tests.param")
planpythontestsuite("none", "samba.tests.upgrade")
planpythontestsuite("none", "samba.tests.core")
planpythontestsuite("none", "samba.tests.common")
planpythontestsuite("none", "samba.tests.provision")
planpythontestsuite("none", "samba.tests.password_quality")
planpythontestsuite("none", "samba.tests.strings")
planpythontestsuite("none", "samba.tests.netcmd")
planpythontestsuite("none", "samba.tests.dcerpc.rpc_talloc")
planpythontestsuite("none", "samba.tests.dcerpc.array")
planpythontestsuite("none", "samba.tests.dcerpc.string_tests")
planpythontestsuite("none", "samba.tests.hostconfig")
planpythontestsuite("ad_dc_ntvfs:local", "samba.tests.messaging")
planpythontestsuite("none", "samba.tests.s3param")
planpythontestsuite("none", "samba.tests.s3passdb")
planpythontestsuite("none", "samba.tests.s3registry")
planpythontestsuite("none", "samba.tests.s3windb")
planpythontestsuite("none", "samba.tests.s3idmapdb")
planpythontestsuite("none", "samba.tests.samba3sam")
planpythontestsuite("none", "samba.tests.dsdb_api")
planpythontestsuite("none", "samba.tests.smbconf")
planpythontestsuite("none", "samba.tests.logfiles")
planpythontestsuite(
"none", "wafsamba.tests.test_suite",
extra_path=[os.path.join(samba4srcdir, "..", "buildtools"),
os.path.join(samba4srcdir, "..", "third_party", "waf")])
planpythontestsuite("fileserver", "samba.tests.smbd_fuzztest")
planpythontestsuite("nt4_dc_smb1", "samba.tests.dcerpc.binding")
planpythontestsuite('ad_dc:local', "samba.tests.dcerpc.samr_change_password")
planpythontestsuite('ad_dc_fips:local',
"samba.tests.dcerpc.samr_change_password",
environ={'GNUTLS_FORCE_FIPS_MODE': '1',
'OPENSSL_FORCE_FIPS_MODE': '1'})
planpythontestsuite("none", "samba.tests.safe_tarfile")
def cmdline(script, *args):
"""
Prefix PYTHON env var and append --configurefile option to abs script path.
script.sh arg1 arg2
-->
PYTHON=python /path/to/bbdir/script.sh arg1 arg2 \
--configurefile $SMB_CONF_FILE
"""
return [
"PYTHON=%s" % python,
os.path.join(bbdir, script),
] + list(args) + [configuration]
plantestsuite(
"samba4.blackbox.demote-saveddb", "none",
cmdline('demote-saveddb.sh', '$PREFIX_ABS/demote'))
plantestsuite(
"samba4.blackbox.dbcheck.alpha13", "none",
cmdline('dbcheck-oldrelease.sh', '$PREFIX_ABS/provision',
'alpha13'))
# same test as above but skip member link checks
plantestsuite(
"samba4.blackbox.dbcheck.alpha13.quick", "none",
cmdline('dbcheck-oldrelease.sh', '$PREFIX_ABS/provision',
'alpha13', '--quick-membership-checks'))
plantestsuite(
"samba4.blackbox.dbcheck.release-4-0-0", "none",
cmdline('dbcheck-oldrelease.sh', '$PREFIX_ABS/provision',
'release-4-0-0'))
# same test as above but skip member link checks
plantestsuite(
"samba4.blackbox.dbcheck.release-4-0-0.quick", "none",
cmdline('dbcheck-oldrelease.sh', '$PREFIX_ABS/provision',
'release-4-0-0', '--quick-membership-checks'))
plantestsuite(
"samba4.blackbox.dbcheck.release-4-1-0rc3", "none",
cmdline('dbcheck-oldrelease.sh', '$PREFIX_ABS/provision',
'release-4-1-0rc3'))
# same test as above but skip member link checks
plantestsuite(
"samba4.blackbox.dbcheck.release-4-1-0rc3.quick", "none",
cmdline('dbcheck-oldrelease.sh', '$PREFIX_ABS/provision',
'release-4-1-0rc3', '--quick-membership-checks'))
plantestsuite(
"samba4.blackbox.dbcheck.release-4-1-6-partial-object", "none",
cmdline('dbcheck-oldrelease.sh', '$PREFIX_ABS/provision',
'release-4-1-6-partial-object'))
# same test as above but skip member link checks
plantestsuite(
"samba4.blackbox.dbcheck.release-4-1-6-partial-object.quick", "none",
cmdline('dbcheck-oldrelease.sh', '$PREFIX_ABS/provision',
'release-4-1-6-partial-object', '--quick-membership-checks'))
plantestsuite(
"samba4.blackbox.dbcheck.release-4-5-0-pre1", "none",
cmdline('dbcheck-oldrelease.sh', '$PREFIX_ABS/provision',
'release-4-5-0-pre1'))
# same test as above but skip member link checks
plantestsuite(
"samba4.blackbox.dbcheck.release-4-5-0-pre1.quick", "none",
cmdline('dbcheck-oldrelease.sh', '$PREFIX_ABS/provision',
'release-4-5-0-pre1', '--quick-membership-checks'))
plantestsuite(
"samba4.blackbox.upgradeprovision.alpha13", "none",
cmdline('upgradeprovision-oldrelease.sh', '$PREFIX_ABS/provision',
'alpha13'))
plantestsuite(
"samba4.blackbox.upgradeprovision.release-4-0-0", "none",
cmdline('upgradeprovision-oldrelease.sh', '$PREFIX_ABS/provision',
'release-4-0-0'))
plantestsuite(
"samba4.blackbox.tombstones-expunge.release-4-5-0-pre1", "none",
cmdline('tombstones-expunge.sh', '$PREFIX_ABS/provision',
'release-4-5-0-pre1'))
plantestsuite(
"samba4.blackbox.dbcheck-links.release-4-5-0-pre1", "none",
cmdline('dbcheck-links.sh', '$PREFIX_ABS/provision',
'release-4-5-0-pre1'))
plantestsuite(
"samba4.blackbox.runtime-links.release-4-5-0-pre1", "none",
cmdline('runtime-links.sh', '$PREFIX_ABS/provision',
'release-4-5-0-pre1'))
plantestsuite(
"samba4.blackbox.schemaupgrade", "none",
cmdline('schemaupgrade.sh', '$PREFIX_ABS/provision'))
plantestsuite(
"samba4.blackbox.functionalprep", "none",
cmdline('functionalprep.sh', '$PREFIX_ABS/provision'))
plantestsuite(
"samba4.blackbox.test_special_group", "none",
cmdline('test_special_group.sh', '$PREFIX_ABS/provision'))
planpythontestsuite("none", "samba.tests.upgradeprovision")
planpythontestsuite("none", "samba.tests.xattr")
planpythontestsuite("none", "samba.tests.ntacls")
planpythontestsuite("none", "samba.tests.policy")
planpythontestsuite("none", "samba.tests.kcc.graph")
planpythontestsuite("none", "samba.tests.kcc.graph_utils")
planpythontestsuite("none", "samba.tests.kcc.ldif_import_export")
planpythontestsuite("none", "samba.tests.graph")
plantestsuite("wafsamba.duplicate_symbols", "none", [os.path.join(srcdir(), "buildtools/wafsamba/test_duplicate_symbol.sh")])
planpythontestsuite("none", "samba.tests.glue")
planpythontestsuite("none", "samba.tests.tdb_util")
planpythontestsuite("none", "samba.tests.samdb")
planpythontestsuite("none", "samba.tests.samdb_api")
planpythontestsuite("none", "samba.tests.ndr")
if with_pam:
env = "ad_member"
options = [
{
"description": "krb5",
"pam_options": "krb5_auth krb5_ccache_type=FILE:%s/krb5cc_pam_test_%%u" % (tempfile.gettempdir()),
},
{
"description": "default",
"pam_options": "",
},
]
for o in options:
description = o["description"]
pam_options = "'%s'" % o["pam_options"]
plantestsuite("samba.tests.pam_winbind(local+%s)" % description, env,
[os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
valgrindify(python), pam_wrapper_so_path,
"$SERVER", "$USERNAME", "$PASSWORD",
pam_options])
plantestsuite("samba.tests.pam_winbind(domain1+%s)" % description, env,
[os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
valgrindify(python), pam_wrapper_so_path,
"$DOMAIN", "$DC_USERNAME", "$DC_PASSWORD",
pam_options])
plantestsuite("samba.tests.pam_winbind(domain2+%s)" % description, env,
[os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
valgrindify(python), pam_wrapper_so_path,
"$REALM", "$DC_USERNAME", "$DC_PASSWORD",
pam_options])
plantestsuite("samba.tests.pam_winbind(domain3+%s)" % description, env,
[os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
valgrindify(python), pam_wrapper_so_path,
"''", "${DC_USERNAME}@${DOMAIN}", "$DC_PASSWORD",
pam_options])
plantestsuite("samba.tests.pam_winbind(domain4+%s)" % description, env,
[os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
valgrindify(python), pam_wrapper_so_path,
"''", "${DC_USERNAME}@${REALM}", "$DC_PASSWORD",
pam_options])
plantestsuite("samba.tests.pam_winbind(domain5+%s)" % description, env,
[os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
valgrindify(python), pam_wrapper_so_path,
"$REALM", "${DC_USERNAME}@${DOMAIN}", "$DC_PASSWORD",
pam_options])
plantestsuite("samba.tests.pam_winbind(domain6+%s)" % description, env,
[os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
valgrindify(python), pam_wrapper_so_path,
"$DOMAIN", "${DC_USERNAME}@${REALM}", "$DC_PASSWORD",
pam_options])
plantestsuite("samba.tests.pam_winbind(trust_f_both1+%s)" % description, env,
[os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
valgrindify(python), pam_wrapper_so_path,
"$TRUST_F_BOTH_DOMAIN",
"$TRUST_F_BOTH_USERNAME",
"$TRUST_F_BOTH_PASSWORD",
pam_options])
plantestsuite("samba.tests.pam_winbind(trust_f_both2+%s)" % description, env,
[os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
valgrindify(python), pam_wrapper_so_path,
"$TRUST_F_BOTH_REALM",
"$TRUST_F_BOTH_USERNAME",
"$TRUST_F_BOTH_PASSWORD",
pam_options])
plantestsuite("samba.tests.pam_winbind(trust_f_both3+%s)" % description, env,
[os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
valgrindify(python), pam_wrapper_so_path,
"''",
"${TRUST_F_BOTH_USERNAME}@${TRUST_F_BOTH_DOMAIN}",
"$TRUST_F_BOTH_PASSWORD",
pam_options])
plantestsuite("samba.tests.pam_winbind(trust_f_both4+%s)" % description, env,
[os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
valgrindify(python), pam_wrapper_so_path,
"''",
"${TRUST_F_BOTH_USERNAME}@${TRUST_F_BOTH_REALM}",
"$TRUST_F_BOTH_PASSWORD",
pam_options])
plantestsuite("samba.tests.pam_winbind(trust_f_both5+%s)" % description, env,
[os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
valgrindify(python), pam_wrapper_so_path,
"${TRUST_F_BOTH_REALM}",
"${TRUST_F_BOTH_USERNAME}@${TRUST_F_BOTH_DOMAIN}",
"$TRUST_F_BOTH_PASSWORD",
pam_options])
plantestsuite("samba.tests.pam_winbind(trust_f_both6+%s)" % description, env,
[os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
valgrindify(python), pam_wrapper_so_path,
"${TRUST_F_BOTH_DOMAIN}",
"${TRUST_F_BOTH_USERNAME}@${TRUST_F_BOTH_REALM}",
"$TRUST_F_BOTH_PASSWORD",
pam_options])
plantestsuite("samba.tests.pam_winbind(trust_e_both1+%s)" % description, env,
[os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
valgrindify(python), pam_wrapper_so_path,
"$TRUST_E_BOTH_DOMAIN",
"$TRUST_E_BOTH_USERNAME",
"$TRUST_E_BOTH_PASSWORD",
pam_options])
plantestsuite("samba.tests.pam_winbind(trust_e_both2+%s)" % description, env,
[os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
valgrindify(python), pam_wrapper_so_path,
"$TRUST_E_BOTH_REALM",
"$TRUST_E_BOTH_USERNAME",
"$TRUST_E_BOTH_PASSWORD",
pam_options])
plantestsuite("samba.tests.pam_winbind(trust_e_both3+%s)" % description, env,
[os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
valgrindify(python), pam_wrapper_so_path,
"''",
"${TRUST_E_BOTH_USERNAME}@${TRUST_E_BOTH_DOMAIN}",
"$TRUST_E_BOTH_PASSWORD",
pam_options])
plantestsuite("samba.tests.pam_winbind(trust_e_both4+%s)" % description, env,
[os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
valgrindify(python), pam_wrapper_so_path,
"''",
"${TRUST_E_BOTH_USERNAME}@${TRUST_E_BOTH_REALM}",
"$TRUST_E_BOTH_PASSWORD",
pam_options])
plantestsuite("samba.tests.pam_winbind(trust_e_both5+%s)" % description, env,
[os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
valgrindify(python), pam_wrapper_so_path,
"${TRUST_E_BOTH_REALM}",
"${TRUST_E_BOTH_USERNAME}@${TRUST_E_BOTH_DOMAIN}",
"$TRUST_E_BOTH_PASSWORD",
pam_options])
plantestsuite("samba.tests.pam_winbind(trust_e_both6+%s)" % description, env,
[os.path.join(srcdir(), "python/samba/tests/test_pam_winbind.sh"),
valgrindify(python), pam_wrapper_so_path,
"${TRUST_E_BOTH_DOMAIN}",
"${TRUST_E_BOTH_USERNAME}@${TRUST_E_BOTH_REALM}",
"$TRUST_E_BOTH_PASSWORD",
pam_options])
for authtok_options in ["", "use_authtok", "try_authtok"]:
_pam_options = "'%s %s'" % (o["pam_options"], authtok_options)
_description = "%s %s" % (description, authtok_options)
plantestsuite("samba.tests.pam_winbind_chauthtok(domain+%s)" % _description, env,
[os.path.join(srcdir(), "python/samba/tests/test_pam_winbind_chauthtok.sh"),
valgrindify(python), pam_wrapper_so_path, pam_set_items_so_path,
"$DOMAIN", "TestPamOptionsUser", "oldp@ssword0", "newp@ssword0",
_pam_options, 'yes',
"$DC_SERVER", "$DC_USERNAME", "$DC_PASSWORD"])
plantestsuite("samba.tests.pam_winbind_warn_pwd_expire(domain+%s)" % description, env,
[os.path.join(srcdir(), "python/samba/tests/test_pam_winbind_warn_pwd_expire.sh"),
valgrindify(python), pam_wrapper_so_path,
"$DOMAIN", "alice", "Secret007",
pam_options])
description = "krb5"
pam_options = "'krb5_auth krb5_ccache_type=FILE:%s/krb5cc_pam_test_setcred_%%u'" % (tempfile.gettempdir())
plantestsuite("samba.tests.pam_winbind_setcred(domain+%s)" % description, "ad_dc:local",
[os.path.join(srcdir(), "python/samba/tests/test_pam_winbind_setcred.sh"),
valgrindify(python), pam_wrapper_so_path,
"${DOMAIN}", "${DC_USERNAME}", "${DC_PASSWORD}",
pam_options])
plantestsuite("samba.unittests.krb5samba", "none",
[os.path.join(bindir(), "default/testsuite/unittests/test_krb5samba")])
plantestsuite("samba.unittests.lib_util_modules", "none",
[os.path.join(bindir(), "default/testsuite/unittests/test_lib_util_modules")])
plantestsuite("samba.unittests.background_send",
"none",
[os.path.join(
bindir(),
"default/testsuite/unittests/test_background_send"),
"$SMB_CONF_PATH"])
plantestsuite("samba.unittests.smb1cli_session", "none",
[os.path.join(bindir(), "default/libcli/smb/test_smb1cli_session")])
plantestsuite("samba.unittests.smb_util_translate", "none",
[os.path.join(bindir(), "default/libcli/smb/test_util_translate")])
plantestsuite("samba.unittests.talloc_keep_secret", "none",
[os.path.join(bindir(), "default/lib/util/test_talloc_keep_secret")])
plantestsuite("samba.unittests.tldap", "none",
[os.path.join(bindir(), "default/source3/test_tldap")])
plantestsuite("samba.unittests.rfc1738", "none",
[os.path.join(bindir(), "default/lib/util/test_rfc1738")])
plantestsuite("samba.unittests.kerberos", "none",
[os.path.join(bindir(), "test_kerberos")])
plantestsuite("samba.unittests.ms_fnmatch", "none",
[os.path.join(bindir(), "default/lib/util/test_ms_fnmatch")])
plantestsuite("samba.unittests.byteorder", "none",
[os.path.join(bindir(), "default/lib/util/test_byteorder")])
plantestsuite("samba.unittests.bytearray", "none",
[os.path.join(bindir(), "default/lib/util/test_bytearray")])
plantestsuite("samba.unittests.byteorder_verify", "none",
[os.path.join(bindir(), "default/lib/util/test_byteorder_verify")])
plantestsuite("samba.unittests.util_paths", "none",
[os.path.join(bindir(), "default/lib/util/test_util_paths")])
plantestsuite("samba.unittests.util", "none",
[os.path.join(bindir(), "default/lib/util/test_util")])
plantestsuite("samba.unittests.memcache", "none",
[os.path.join(bindir(), "default/lib/util/test_memcache")])
plantestsuite("samba.unittests.sys_rw", "none",
[os.path.join(bindir(), "default/lib/util/test_sys_rw")])
2022-09-28 04:40:10 +03:00
plantestsuite("samba.unittests.stable_sort", "none",
[os.path.join(bindir(), "default/lib/util/test_stable_sort")])
plantestsuite("samba.unittests.ntlm_check", "none",
[os.path.join(bindir(), "default/libcli/auth/test_ntlm_check")])
plantestsuite("samba.unittests.gnutls", "none",
[os.path.join(bindir(), "default/libcli/auth/test_gnutls")])
plantestsuite("samba.unittests.rc4_passwd_buffer", "none",
[os.path.join(bindir(), "default/libcli/auth/test_rc4_passwd_buffer")])
plantestsuite("samba.unittests.schannel", "none",
[os.path.join(bindir(), "default/libcli/auth/test_schannel")])
plantestsuite("samba.unittests.test_registry_regfio", "none",
[os.path.join(bindir(), "default/source3/test_registry_regfio")])
plantestsuite("samba.unittests.test_oLschema2ldif", "none",
[os.path.join(bindir(), "default/source4/utils/oLschema2ldif/test_oLschema2ldif")])
plantestsuite("samba.unittests.auth.sam", "none",
[os.path.join(bindir(), "test_auth_sam")])
if have_heimdal_support and not using_system_gssapi:
plantestsuite("samba.unittests.auth.heimdal_gensec_unwrap_des", "none",
[valgrindify(os.path.join(bindir(), "test_heimdal_gensec_unwrap_des"))])
if with_elasticsearch_backend:
plantestsuite("samba.unittests.mdsparser_es", "none",
[os.path.join(bindir(), "default/source3/test_mdsparser_es")] + [configuration])
plantestsuite("samba.unittests.mdsparser_es_failures", "none",
[os.path.join(bindir(), "default/source3/test_mdsparser_es"),
" --option=elasticsearch:testmappingfailures=yes",
" --option=elasticsearch:ignoreunknownattribute=yes",
" --option=elasticsearch:ignoreunknowntype=yes"] +
[configuration])
plantestsuite("samba.unittests.credentials", "none",
[os.path.join(bindir(), "default/auth/credentials/test_creds")])
plantestsuite("samba.unittests.tsocket_bsd_addr", "none",
[os.path.join(bindir(), "default/lib/tsocket/test_tsocket_bsd_addr")])
if ("HAVE_TCP_USER_TIMEOUT" in config_hash):
plantestsuite("samba.unittests.tsocket_tstream", "none",
[os.path.join(bindir(), "default/lib/tsocket/test_tstream")],
environ={'SOCKET_WRAPPER_DIR': ''})
plantestsuite("samba.unittests.adouble", "none",
[os.path.join(bindir(), "test_adouble")])
plantestsuite("samba.unittests.gnutls_aead_aes_256_cbc_hmac_sha512", "none",
[os.path.join(bindir(), "test_gnutls_aead_aes_256_cbc_hmac_sha512")])
plantestsuite("samba.unittests.encode_decode", "none",
[os.path.join(bindir(), "test_encode_decode")])
lib/compression: add LZ77 + Huffman decompression This format is described in [MS-XCA] 2.1 and 2.2, with exegesis in many posts on the cifs-protocol list[1]. The two public functions are: ssize_t lzxpress_huffman_decompress(const uint8_t *input, size_t input_size, uint8_t *output, size_t output_size); uint8_t *lzxpress_huffman_decompress_talloc(TALLOC_CTX *mem_ctx, const uint8_t *input_bytes, size_t input_size, size_t output_size); In both cases the caller needs to know the *exact* decompressed size, which is essential for decompression. The _talloc version allocates the buffer for you, and uses the talloc context to allocate a 128k working buffer. THe non-talloc function will allocate the working buffer on the stack. This compression format gives better compression for messages of several kilobytes than the "plain" LXZPRESS compression, but is probably a bit slower to decompress and is certainly worse for very short messages, having a fixed 256 byte overhead for the first Huffman table. Experiments show decompression rates between 20 and 500 MB per second, depending on the compression ratio and data size, on an i5-1135G7 with no compiler optimisations. This compression format is used in AD claims and in SMB, but that doesn't happen with this commit. I will not try to describe LZ77 or Huffman encoding here. Don't expect an answer in MS-XCA either; instead read the code and/or Wikipedia. [1] Much of that starts here: https://lists.samba.org/archive/cifs-protocol/2022-October/ but there's more earlier, particularly in June/July 2020, when Aurélien Aptel was working on an implementation that ended up in Wireshark. Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz> Pair-programmed-with: Joseph Sutton <josephsutton@catalyst.net.nz> Reviewed-by: Joseph Sutton <josephsutton@catalyst.net.nz>
2022-11-17 04:24:52 +03:00
plantestsuite("samba.unittests.compression.lzxpress_huffman", "none",
[os.path.join(bindir(), "default/lib/compression/test_lzx_huffman")])
plantestsuite("samba.unittests.compression.lzxpress_plain", "none",
[os.path.join(bindir(),
"default/lib/compression/test_lzxpress_plain")])
plantestsuite("samba.unittests.sddl_conditional_ace", "none",
[os.path.join(bindir(), "test_sddl_conditional_ace")])
plantestsuite("samba.unittests.run_conditional_ace", "none",
[os.path.join(bindir(), "test_run_conditional_ace")])