summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorMatt Barden <mbarden@tintri.com>2021-06-03 19:17:48 -0400
committerDan McDonald <danmcd@mnx.io>2022-10-04 23:16:26 -0400
commit1b38ec66a3ea040587c1b346f8c010a3b37c8080 (patch)
tree3c3604c459c557ff8499247fda53f3729bfce9b8 /usr/src
parent37e2cd25d56b334a2403f2540a0b0a1e6a40bcd1 (diff)
downloadillumos-joyent-1b38ec66a3ea040587c1b346f8c010a3b37c8080.tar.gz
15011 Want wrapper for rpc tests in smbsrv-tests
Reviewed by: Gordon Ross <gordon.w.ross@gmail.com> Reviewed by: Evan Layton <elayton@tintri.com> Approved by: Dan McDonald <danmcd@mnx.io>
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/pkg/manifests/system-test-smbsrvtest.p5m2
-rw-r--r--usr/src/test/smbsrv-tests/cmd/run_smbtorture.py105
-rw-r--r--usr/src/test/smbsrv-tests/cmd/smbsrvtests.ksh8
-rw-r--r--usr/src/test/smbsrv-tests/include/smbtor-excl-rpc.txt109
-rw-r--r--usr/src/test/smbsrv-tests/tests/smbtorture/runst-rpc.ksh83
-rw-r--r--usr/src/test/smbsrv-tests/tests/smbtorture/runst-smb2.ksh2
6 files changed, 273 insertions, 36 deletions
diff --git a/usr/src/pkg/manifests/system-test-smbsrvtest.p5m b/usr/src/pkg/manifests/system-test-smbsrvtest.p5m
index cfcf885aeb..109cb6ccb9 100644
--- a/usr/src/pkg/manifests/system-test-smbsrvtest.p5m
+++ b/usr/src/pkg/manifests/system-test-smbsrvtest.p5m
@@ -24,9 +24,11 @@ file path=opt/smbsrv-tests/bin/run_smbtorture mode=0555
file path=opt/smbsrv-tests/bin/smbsrvtests mode=0555
dir path=opt/smbsrv-tests/include
file path=opt/smbsrv-tests/include/default.cfg mode=0444
+file path=opt/smbsrv-tests/include/smbtor-excl-rpc.txt mode=0444
file path=opt/smbsrv-tests/include/smbtor-excl-smb2.txt mode=0444
dir path=opt/smbsrv-tests/tests
dir path=opt/smbsrv-tests/tests/smbtorture
+file path=opt/smbsrv-tests/tests/smbtorture/runst-rpc mode=0555
file path=opt/smbsrv-tests/tests/smbtorture/runst-smb2 mode=0555
license lic_CDDL license=lic_CDDL
depend type=optional fmri=service/network/samba
diff --git a/usr/src/test/smbsrv-tests/cmd/run_smbtorture.py b/usr/src/test/smbsrv-tests/cmd/run_smbtorture.py
index fd008f7b19..6e972ba434 100644
--- a/usr/src/test/smbsrv-tests/cmd/run_smbtorture.py
+++ b/usr/src/test/smbsrv-tests/cmd/run_smbtorture.py
@@ -11,7 +11,7 @@
#
#
-# Copyright 2021 Tintri by DDN, Inc. All rights reserved.
+# Copyright 2022 Tintri by DDN, Inc. All rights reserved.
#
#
@@ -56,6 +56,7 @@ class TestResult(Enum):
UNKNOWN = 2
SKIP = 3
KILLED = 4
+ TEST_ERR = 5
def __str__(self):
return self.name
@@ -68,12 +69,12 @@ class TestCase:
__slots__ = 'name', 'result'
- def __init__(self, name, skip=False):
+ def __init__(self, name):
self.name = name
- self.result = TestResult.SKIP if skip else TestResult.UNKNOWN
+ self.result = TestResult.UNKNOWN
def __str__(self):
- return '{0.name} | {0.result}'.format(self)
+ return f'{self.name} | {self.result}'
def run(self, rfd, wfd, timeout, cmd):
"""Run cmd, setting the last element to the test name, and setting result
@@ -81,11 +82,11 @@ class TestCase:
def finish(self, start, wfd):
timediff = datetime.now() - start
- wfd.write('END | {} | {}\n'.format(self, timediff))
+ wfd.write(f'END | {self} | {timediff}\n')
return self.result
starttime = datetime.now()
- wfd.write('START | {} | {}\n'.format(self.name, starttime.time()))
+ wfd.write(f'START | {self.name} | {starttime.time()}\n')
if self.result == TestResult.SKIP:
return finish(self, starttime, wfd)
@@ -102,6 +103,8 @@ class TestCase:
self.result = TestResult.PASS
elif line.startswith('skip:'):
self.result = TestResult.SKIP
+ elif line.startswith('INTERNAL ERROR:'):
+ self.result = TestResult.TEST_ERR
except subprocess.TimeoutExpired:
self.result = TestResult.KILLED
wfd.write('\nKilled due to timeout\n')
@@ -109,30 +112,75 @@ class TestCase:
return finish(self, starttime, wfd)
-def should_skip(test, pattern, verbose):
- """Returns whether test matches pattern, indicating it should be skipped."""
+class TestSet:
+ """Class to track state associated with the entire test set"""
- if not pattern or not pattern.match(test):
- return False
+ __slots__ = 'excluded', 'tests'
- if verbose:
- print('{} matches exception pattern; marking as skipped'.format(test))
- return True
+ def __init__(self, tests, skip_pat, verbose):
+ self.excluded = 0
+
+ def should_skip(self, test, pattern, verbose):
+ """Returns whether test matches pattern, indicating it should be
+ skipped."""
+
+ if not pattern or not pattern.match(test):
+ return False
+
+ if verbose:
+ print(f'{test} matches exception pattern; marking as skipped')
+
+ self.excluded += 1
+ return True
+
+ self.tests = [TestCase(line) for line in tests
+ if not should_skip(self, line, skip_pat, verbose)]
+
+
+ def __iter__(self):
+ return iter(self.tests)
+
+ def __len__(self):
+ return len(self.tests)
def fnm2regex(fnm_pat):
"""Maps an fnmatch(7) pattern to a regex pattern that will match against
any suite that encapsulates the test name"""
rpat = fnmatch.translate(fnm_pat)
- return r'{}|{}'.format(rpat, rpat.replace(r'\Z', r'\.'))
+
+ #
+ # If the pattern doesn't end with '*', we also need it to match against
+ # any sub-module; '*test' needs to also match 'smb2.test.first', but
+ # not 'smb2.test-other.second'.
+ #
+ if not fnm_pat.endswith('*'):
+ rpat += '|' + fnmatch.translate(fnm_pat + '.*')
+ return rpat
+
+def verbose_fnm2regex(fnm_pat):
+ """fnm2regex(), but prints the input and output patterns"""
+ ret_pat = fnm2regex(fnm_pat)
+ print(f'fnmatch: {fnm_pat} regex: {ret_pat}')
+ return ret_pat
def combine_patterns(iterable, verbose):
"""Combines patterns in an iterable into a single REGEX"""
- pat = re.compile('|'.join(map(fnm2regex, iterable)),
- flags=re.DEBUG if verbose > 1 else 0)
if verbose > 1:
- print('final pattern: {}'.format(pat.pattern))
+ func = verbose_fnm2regex
+ else:
+ func = fnm2regex
+
+ fnmatch_pat = '|'.join(map(func, iterable))
+
+ if not fnmatch_pat:
+ pat = None;
+ else:
+ pat = re.compile(fnmatch_pat, flags=re.DEBUG if verbose > 2 else 0)
+
+ if verbose > 1:
+ print(f'final pattern: {pat.pattern if pat else "<None>"}')
return pat
class ArgumentFile(argparse.FileType):
@@ -153,13 +201,13 @@ def main():
parser.add_argument('--except', '-e',
type=ArgumentFile('r'), metavar='EXCEPTIONS_FILE', dest='skip_list',
- help='A file containing fnmatch(5) patterns of tests to skip')
+ help='A file containing fnmatch(7) patterns of tests to skip')
parser.add_argument('--list', '-l',
type=ArgumentFile('r'), metavar='LIST_FILE',
help='A file containing the list of tests to run')
parser.add_argument('--match', '-m',
action='append', metavar='FNMATCH',
- help='An fnmatch(5) pattern to select tests from smbtorture --list')
+ help='An fnmatch(7) pattern to select tests from smbtorture --list')
parser.add_argument('--output', '-o',
default='/tmp/lastrun.log', metavar='LOG_FILE',
help='Location to store full smbtorture output')
@@ -197,26 +245,24 @@ def main():
if args.skip_list != None:
skip_pat = combine_patterns(parse_tests(args.skip_list), args.verbose)
if args.verbose > 1:
- print('Exceptions pattern (in REGEX): {}'.format(skip_pat.pattern))
+ exc_pat = skip_pat.pattern if skip_pat else '<NONE>'
+ print(f'Exceptions pattern (in REGEX): {exc_pat}')
else:
skip_pat = None
- tests = [TestCase(line, should_skip(line, skip_pat, args.verbose))
- for line in parse_tests(testgen)]
+ tests = TestSet(parse_tests(testgen), skip_pat, args.verbose)
if args.verbose:
print('Tests to run:')
for test in tests:
- if test.result != TestResult.SKIP:
- print(test.name)
+ print(test.name)
outw = open(fout, 'w', buffering=1)
outr = open(fout, 'r')
- cmd = 'smbtorture //{srv}/{shr} -U{usr}%{pswd}'.format(
- srv=server, shr=share, usr=user, pswd=pswd).split()
+ cmd = f'smbtorture //{server}/{share} -U{user}%{pswd}'.split()
if args.seed != None:
- cmd.append('--seed={}'.format(args.seed))
+ cmd.append(f'--seed={args.seed}')
cmd.append('TEST_HERE')
if args.verbose:
@@ -233,9 +279,10 @@ def main():
print('\n\nRESULTS:')
print('=' * 22)
for res in TestResult:
- print('{}: {:>{}}'.format(res, results[res], 20 - len(res)))
+ print(f'{res}: {results[res]:>{20 - len(res)}}')
print('=' * 22)
- print('Total: {:>15}'.format(len(tests)))
+ print(f'Total: {len(tests):>15}')
+ print(f'Excluded: {tests.excluded:>12}')
if __name__ == '__main__':
try:
diff --git a/usr/src/test/smbsrv-tests/cmd/smbsrvtests.ksh b/usr/src/test/smbsrv-tests/cmd/smbsrvtests.ksh
index 934f4e26ed..aab3ad0c8f 100644
--- a/usr/src/test/smbsrv-tests/cmd/smbsrvtests.ksh
+++ b/usr/src/test/smbsrv-tests/cmd/smbsrvtests.ksh
@@ -29,12 +29,8 @@ function fail
exit ${2:-1}
}
-while getopts b:c:o:t: c; do
+while getopts c:o:t: c; do
case $c in
- 'b')
- export BASEFILE=$OPTARG
- [[ -f $BASEFILE ]] || fail "Cannot read file: $BASEFILE"
- ;;
'c')
CFGFILE=$OPTARG
[[ -f $CFGFILE ]] || fail "Cannot read file: $CFGFILE"
@@ -51,5 +47,5 @@ shift $((OPTIND - 1))
set -x
-# Just one test for now. More to come.
$SMBSRV_TESTS/tests/smbtorture/runst-smb2
+$SMBSRV_TESTS/tests/smbtorture/runst-rpc
diff --git a/usr/src/test/smbsrv-tests/include/smbtor-excl-rpc.txt b/usr/src/test/smbsrv-tests/include/smbtor-excl-rpc.txt
new file mode 100644
index 0000000000..075a4fdf9a
--- /dev/null
+++ b/usr/src/test/smbsrv-tests/include/smbtor-excl-rpc.txt
@@ -0,0 +1,109 @@
+#
+# This file and its contents are supplied under the terms of the
+# Common Development and Distribution License ("CDDL"), version 1.0.
+# You may only use this file in accordance with the terms of version
+# 1.0 of the CDDL.
+#
+# A full copy of the text of the CDDL should have accompanied this
+# source. A copy of the CDDL is also available via the Internet at
+# http://www.illumos.org/license/CDDL.
+#
+#
+# Copyright 2021 Tintri by DDN, Inc. All rights reserved.
+
+#
+# smbtorture tests we choose to skip, either because the
+# tests hang, or we disagree with the test, or whatever.
+#
+
+#Disabled by default
+rpc.spoolss
+
+
+###Unimplemented Services/Features
+
+rpc.atsvc
+rpc.autoidl
+rpc.backupkey
+rpc.bind
+rpc.browser
+rpc.clusapi
+rpc.cracknames
+rpc.drsuapi
+rpc.drsuapi_wk28
+rpc.dsgetinfo
+rpc.echo
+rpc.epmapper
+rpc.frsapi
+rpc.fsrvp
+rpc.handles.drsuapi
+rpc.initshutdown
+rpc.iremotewinspool
+rpc.mgmt
+rpc.ntsvcs
+rpc.oxidresolve
+rpc.remact
+rpc.scanner
+rpc.unixinfo
+rpc.witness
+
+
+###Unimplemented functions
+
+#GetDcAddress
+rpc.dfs.netdfs.DcAddress
+#FlushFtTable
+rpc.dfs.netdfs.FtRoot
+#ManagerInitialize
+rpc.dfs.netdfs.ManagerInitialize
+
+#QueryTrustedomainInfoByName
+rpc.lsa.forest
+#CreateAccount
+rpc.lsa.privileges
+#CreatedTrustedDomain, QueryInfoPolicy2 unimplemented
+#EnumTrustedDomains(Ex) are stubbed
+rpc.lsa.trusted
+
+#GetAliasMembership
+rpc.samba3.getaliasmembership
+
+#Connect5
+rpc.samr.accessmask.samr.Connect5
+rpc.samr.accessmask.samr.LookupDomain
+rpc.samr.accessmask.samr.OpenDomain
+rpc.samr.EnumDomains
+
+#Namesake function is unimplemented
+rpc.srvsvc.srvsvc (admin access).NetCharDevQEnum
+rpc.srvsvc.srvsvc (admin access).NetCharDevEnum
+rpc.srvsvc.srvsvc (admin access).NetDiskEnum
+rpc.srvsvc.srvsvc (admin access).NetTransportEnum
+rpc.wkssvc.wkssvc.NetWkstaEnumUsers
+rpc.wkssvc.wkssvc.NetrAddAlternateComputerName
+rpc.wkssvc.wkssvc.NetrEnumerateComputerNames
+rpc.wkssvc.wkssvc.NetrGetJoinInformation
+rpc.wkssvc.wkssvc.NetrGetJoinableOus
+rpc.wkssvc.wkssvc.NetrGetJoinableOus2
+rpc.wkssvc.wkssvc.NetrJoinDomain
+rpc.wkssvc.wkssvc.NetrLogonDomainNameAdd
+rpc.wkssvc.wkssvc.NetrLogonDomainNameDel
+rpc.wkssvc.wkssvc.NetrMessageBufferSend
+rpc.wkssvc.wkssvc.NetrRemoveAlternateComputerName
+rpc.wkssvc.wkssvc.NetrUnjoinDomain
+rpc.wkssvc.wkssvc.NetrUseAdd
+rpc.wkssvc.wkssvc.NetrUseDel
+rpc.wkssvc.wkssvc.NetrUseEnum
+rpc.wkssvc.wkssvc.NetrUseGetInfo
+rpc.wkssvc.wkssvc.NetrValidateName
+rpc.wkssvc.wkssvc.NetrValidateName2
+rpc.wkssvc.wkssvc.NetrWkstaTransportAdd
+rpc.wkssvc.wkssvc.NetrWkstaTransportDel
+rpc.wkssvc.wkssvc.NetrWkstaUserGetInfo
+rpc.wkssvc.wkssvc.NetrWorkstationStatisticsGet
+
+
+###Benchmarks
+
+rpc.bench-rpc
+rpc.bench-schannel1
diff --git a/usr/src/test/smbsrv-tests/tests/smbtorture/runst-rpc.ksh b/usr/src/test/smbsrv-tests/tests/smbtorture/runst-rpc.ksh
new file mode 100644
index 0000000000..44e11dd965
--- /dev/null
+++ b/usr/src/test/smbsrv-tests/tests/smbtorture/runst-rpc.ksh
@@ -0,0 +1,83 @@
+#!/usr/bin/ksh
+
+#
+# This file and its contents are supplied under the terms of the
+# Common Development and Distribution License ("CDDL"), version 1.0.
+# You may only use this file in accordance with the terms of version
+# 1.0 of the CDDL.
+#
+# A full copy of the text of the CDDL should have accompanied this
+# source. A copy of the CDDL is also available via the Internet at
+# http://www.illumos.org/license/CDDL.
+#
+
+#
+# Copyright 2021 Tintri by DDN, Inc. All rights reserved.
+#
+
+export SMBSRV_TESTS="/opt/smbsrv-tests"
+export SMBTOR="/usr/bin/smbtorture"
+
+runsmbtor=$SMBSRV_TESTS/bin/run_smbtorture
+excl_file=$SMBSRV_TESTS/include/smbtor-excl-rpc.txt
+
+cfgfile=${CFGFILE:-$SMBSRV_TESTS/include/default.cfg}
+outdir=${OUTDIR:-/var/tmp/test_results/smbsrv-tests}
+
+function fail
+{
+ echo $1
+ exit ${2:-1}
+}
+
+while getopts c:o:t: c; do
+ case $c in
+ 'c')
+ cfgfile=$OPTARG
+ [[ -f $cfgfile ]] || fail "Cannot read file: $cfgfile"
+ ;;
+ 'o')
+ outdir=$OPTARG
+ ;;
+ 't')
+ timeout="-t $OPTARG"
+ ;;
+ esac
+done
+shift $((OPTIND - 1))
+
+. $cfgfile
+
+export PATH="$(dirname $SMBTOR):$PATH"
+
+mkdir -p $outdir
+cd $outdir || fail "Could not cd to $outdir"
+
+tstamp=$(date +'%Y%m%dT%H%M%S')
+logfile=$outdir/smbtor-rpc-${tstamp}.log
+outfile=$outdir/smbtor-rpc-${tstamp}.summary
+
+if [[ -z "$timeout" && -n "$TIMEOUT" ]]; then
+ timeout="-t $TIMEOUT"
+fi
+
+# Non-option args taken as list of match patterns
+if [ -z "$1" ] ; then
+ match="-m rpc"
+fi
+for m
+do
+ match="$match -m $m"
+done
+
+#It would be nice to have a generic 'Can I connect to this server/share?' test
+$SMBTOR -U "$SMBT_USER%${SMBT_PASS}" //$SMBT_HOST/IPC\$ \
+ rpc.wkssvc.wkssvc.NetWkstaGetInfo > /dev/null 2>&1 || \
+ fail "Cannot connect to //$SMBT_HOST/IPC\$"
+
+echo "Running smbtorture/RPC tests with //$SMBT_HOST/IPC\$"
+$runsmbtor $match -e $excl_file -o $logfile $timeout \
+ "$SMBT_HOST" "IPC\$" "$SMBT_USER" "${SMBT_PASS}" |
+ tee $outfile
+
+exit 0
diff --git a/usr/src/test/smbsrv-tests/tests/smbtorture/runst-smb2.ksh b/usr/src/test/smbsrv-tests/tests/smbtorture/runst-smb2.ksh
index 6f8e51ffd1..f5af05aca1 100644
--- a/usr/src/test/smbsrv-tests/tests/smbtorture/runst-smb2.ksh
+++ b/usr/src/test/smbsrv-tests/tests/smbtorture/runst-smb2.ksh
@@ -51,7 +51,7 @@ shift $((OPTIND - 1))
export PATH="$(dirname $SMBTOR):$PATH"
mkdir -p $outdir
-cd $outdir
+cd $outdir || fail "Could not cd to $outdir"
tstamp=$(date +'%Y%m%dT%H%M%S')
logfile=$outdir/smbtor-smb2-${tstamp}.log