You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
3.6 KiB
94 lines
3.6 KiB
From c099e896f28d8c5ccacc9df086a8f4297c6b484e Mon Sep 17 00:00:00 2001 |
|
From: Greg Hudson <ghudson@mit.edu> |
|
Date: Tue, 17 Jan 2017 11:24:41 -0500 |
|
Subject: [PATCH] Add k5test expected_msg, expected_trace |
|
|
|
In k5test.py, add the optional keyword argument "expected_msg" to |
|
methods that run commands, to make it easier to look for substrings in |
|
the command output. Add the optional keyword "expected_trace" to run |
|
the command with KRB5_TRACE enabled and look for an ordered series of |
|
substrings in the trace output. |
|
|
|
(cherry picked from commit 8bb5fce69a4aa6c3082fa7def66a93974e10e17a) |
|
[rharwood@redhat.com: back out .gitignore] |
|
--- |
|
src/config/post.in | 2 +- |
|
src/util/k5test.py | 37 ++++++++++++++++++++++++++++++++++--- |
|
2 files changed, 35 insertions(+), 4 deletions(-) |
|
|
|
diff --git a/src/config/post.in b/src/config/post.in |
|
index 77a9bffdf..aecac9d3b 100644 |
|
--- a/src/config/post.in |
|
+++ b/src/config/post.in |
|
@@ -156,7 +156,7 @@ clean: clean-$(WHAT) |
|
|
|
clean-unix:: |
|
$(RM) $(OBJS) $(DEPTARGETS_CLEAN) $(EXTRA_FILES) |
|
- $(RM) et-[ch]-*.et et-[ch]-*.[ch] testlog |
|
+ $(RM) et-[ch]-*.et et-[ch]-*.[ch] testlog testtrace |
|
-$(RM) -r testdir |
|
|
|
clean-windows:: |
|
diff --git a/src/util/k5test.py b/src/util/k5test.py |
|
index c3d026377..4d30baf40 100644 |
|
--- a/src/util/k5test.py |
|
+++ b/src/util/k5test.py |
|
@@ -223,8 +223,11 @@ Scripts may use the following realm methods and attributes: |
|
command-line debugging options. Fail if the command does not return |
|
0. Log the command output appropriately, and return it as a single |
|
multi-line string. Keyword arguments can contain input='string' to |
|
- send an input string to the command, and expected_code=N to expect a |
|
- return code other than 0. |
|
+ send an input string to the command, expected_code=N to expect a |
|
+ return code other than 0, expected_msg=MSG to expect a substring in |
|
+ the command output, and expected_trace=('a', 'b', ...) to expect an |
|
+ ordered series of line substrings in the command's KRB5_TRACE |
|
+ output. |
|
|
|
* realm.kprop_port(): Returns a port number based on realm.portbase |
|
intended for use by kprop and kpropd. |
|
@@ -647,10 +650,31 @@ def _stop_or_shell(stop, shell, env, ind): |
|
subprocess.call(os.getenv('SHELL'), env=env) |
|
|
|
|
|
-def _run_cmd(args, env, input=None, expected_code=0): |
|
+# Read tracefile and look for the expected strings in successive lines. |
|
+def _check_trace(tracefile, expected): |
|
+ output('*** Trace output for previous command:\n') |
|
+ i = 0 |
|
+ with open(tracefile, 'r') as f: |
|
+ for line in f: |
|
+ output(line) |
|
+ if i < len(expected) and expected[i] in line: |
|
+ i += 1 |
|
+ if i < len(expected): |
|
+ fail('Expected string not found in trace output: ' + expected[i]) |
|
+ |
|
+ |
|
+def _run_cmd(args, env, input=None, expected_code=0, expected_msg=None, |
|
+ expected_trace=None): |
|
global null_input, _cmd_index, _last_cmd, _last_cmd_output, _debug |
|
global _stop_before, _stop_after, _shell_before, _shell_after |
|
|
|
+ if expected_trace is not None: |
|
+ tracefile = 'testtrace' |
|
+ if os.path.exists(tracefile): |
|
+ os.remove(tracefile) |
|
+ env = env.copy() |
|
+ env['KRB5_TRACE'] = tracefile |
|
+ |
|
if (_match_cmdnum(_debug, _cmd_index)): |
|
return _debug_cmd(args, env, input) |
|
|
|
@@ -679,6 +703,13 @@ def _run_cmd(args, env, input=None, expected_code=0): |
|
# Check the return code and return the output. |
|
if code != expected_code: |
|
fail('%s failed with code %d.' % (args[0], code)) |
|
+ |
|
+ if expected_msg is not None and expected_msg not in outdata: |
|
+ fail('Expected string not found in command output: ' + expected_msg) |
|
+ |
|
+ if expected_trace is not None: |
|
+ _check_trace(tracefile, expected_trace) |
|
+ |
|
return outdata
|
|
|