dovecot-2.0-pigeonhole: Improved runtime trace debugging towards...

pigeonhole at rename-it.nl pigeonhole at rename-it.nl
Tue Aug 3 19:58:47 EEST 2010


details:   http://hg.rename-it.nl/dovecot-2.0-pigeonhole/rev/15e39ffe0ff1
changeset: 1357:15e39ffe0ff1
user:      Stephan Bosch <stephan at rename-it.nl>
date:      Tue Aug 03 18:58:36 2010 +0200
description:
Improved runtime trace debugging towards something more intuitively readable.

diffstat:

 TODO                                                     |   8 +-
 src/lib-sieve/cmd-discard.c                              |   3 +-
 src/lib-sieve/cmd-redirect.c                             |   9 +-
 src/lib-sieve/cmd-stop.c                                 |   3 +-
 src/lib-sieve/ext-envelope.c                             |   6 +
 src/lib-sieve/ext-fileinto.c                             |   9 +-
 src/lib-sieve/ext-reject.c                               |  16 ++-
 src/lib-sieve/plugins/enotify/cmd-notify.c               |   8 +-
 src/lib-sieve/plugins/imap4flags/cmd-flag.c              |   5 +-
 src/lib-sieve/plugins/imap4flags/ext-imap4flags-common.c |  81 +++++++++++++-------
 src/lib-sieve/plugins/mailbox/tst-mailboxexists.c        |  41 +++++++++-
 src/lib-sieve/plugins/regex/mcht-regex.c                 |   4 +-
 src/lib-sieve/plugins/relational/mcht-count.c            |   8 +-
 src/lib-sieve/plugins/vacation/cmd-vacation.c            |   9 +-
 src/lib-sieve/plugins/variables/cmd-set.c                |   7 +-
 src/lib-sieve/sieve-address-parts.c                      |  26 ++++++
 src/lib-sieve/sieve-address-parts.h                      |   2 +
 src/lib-sieve/sieve-address.c                            |  19 ++++
 src/lib-sieve/sieve-address.h                            |  12 ++-
 src/lib-sieve/sieve-code.c                               |   4 +-
 src/lib-sieve/sieve-common.h                             |   4 +-
 src/lib-sieve/sieve-interpreter.c                        |  15 +++-
 src/lib-sieve/sieve-match.c                              |  22 ++++-
 src/lib-sieve/sieve-message.c                            |   8 ++
 src/lib-sieve/sieve-runtime-trace.c                      |  14 ++-
 src/lib-sieve/sieve-runtime-trace.h                      |  53 ++++++++++---
 src/lib-sieve/sieve-runtime.h                            |   3 +-
 src/lib-sieve/sieve-stringlist.h                         |  17 +++-
 src/lib-sieve/tst-exists.c                               |  12 ++-
 src/lib-sieve/tst-size.c                                 |  18 ++++
 src/testsuite/cmd-test-binary.c                          |  14 ++-
 src/testsuite/cmd-test-config.c                          |  28 +++++-
 src/testsuite/cmd-test-fail.c                            |   3 +-
 src/testsuite/cmd-test-mailbox.c                         |   7 +-
 src/testsuite/cmd-test-message.c                         |  52 +++++++++---
 src/testsuite/cmd-test-result-print.c                    |   3 +
 src/testsuite/cmd-test-result-reset.c                    |   3 +
 src/testsuite/cmd-test-set.c                             |  10 +-
 src/testsuite/cmd-test.c                                 |   5 +-
 src/testsuite/testsuite-script.c                         |  34 ++++++--
 src/testsuite/testsuite-script.h                         |   9 +-
 src/testsuite/tst-test-error.c                           |   4 +-
 src/testsuite/tst-test-multiscript.c                     |  19 +---
 src/testsuite/tst-test-result-execute.c                  |   9 ++-
 src/testsuite/tst-test-result.c                          |   2 +-
 src/testsuite/tst-test-script-compile.c                  |  15 +--
 src/testsuite/tst-test-script-run.c                      |  11 ++-
 47 files changed, 504 insertions(+), 170 deletions(-)

diffs (truncated from 1689 to 300 lines):

diff -r 1c66cb52772d -r 15e39ffe0ff1 TODO
--- a/TODO	Tue Aug 03 18:30:14 2010 +0200
+++ b/TODO	Tue Aug 03 18:58:36 2010 +0200
@@ -1,14 +1,12 @@
 Current activities:
 
-* Improve debugging support in the sieve-test tool:
-	- Improve trace debugging towards something more intuitively readable.
+* Cleanup the test suite
+	- Make uniform command implementations
+	- Cleanup test scripts
 
 Next (in order of descending priority/precedence):
 
 * Update man pages to match style of Dovecot man pages.
-* Cleanup the test suite
-	- Make uniform command implementations
-	- Cleanup test scripts
 * Improve error handling and logging
 	- Detect permission errors when writing global script binaries and advise the 
 	  administrator on using sievec to precompile the scripts.
diff -r 1c66cb52772d -r 15e39ffe0ff1 src/lib-sieve/cmd-discard.c
--- a/src/lib-sieve/cmd-discard.c	Tue Aug 03 18:30:14 2010 +0200
+++ b/src/lib-sieve/cmd-discard.c	Tue Aug 03 18:58:36 2010 +0200
@@ -110,7 +110,8 @@
 	/* Source line */
 	source_line = sieve_runtime_get_command_location(renv);
 
-	sieve_runtime_trace(renv, SIEVE_TRLVL_ACTIONS, "discard action; cancel implicit keep");
+	sieve_runtime_trace(renv, SIEVE_TRLVL_ACTIONS, 
+		"discard action; cancel implicit keep");
 
 	return ( sieve_result_add_action
 		(renv, NULL, &act_discard, NULL, source_line, NULL, 0) >= 0 );
diff -r 1c66cb52772d -r 15e39ffe0ff1 src/lib-sieve/cmd-redirect.c
--- a/src/lib-sieve/cmd-redirect.c	Tue Aug 03 18:30:14 2010 +0200
+++ b/src/lib-sieve/cmd-redirect.c	Tue Aug 03 18:58:36 2010 +0200
@@ -219,9 +219,12 @@
 	/* FIXME: perform address normalization if the string is not a string literal
 	 */
 
-	sieve_runtime_trace(renv, SIEVE_TRLVL_ACTIONS, 
-		"redirect action; forward message to address `%s'",
-		str_sanitize(str_c(redirect), 64));
+	if ( sieve_runtime_trace_active(renv, SIEVE_TRLVL_ACTIONS) ) {
+		sieve_runtime_trace(renv, 0, "redirect action");
+		sieve_runtime_trace_descend(renv);
+		sieve_runtime_trace(renv, 0, "forward message to address `%s'",
+			str_sanitize(str_c(redirect), 80));
+	}
 	
 	/* Add redirect action to the result */
 
diff -r 1c66cb52772d -r 15e39ffe0ff1 src/lib-sieve/cmd-stop.c
--- a/src/lib-sieve/cmd-stop.c	Tue Aug 03 18:30:14 2010 +0200
+++ b/src/lib-sieve/cmd-stop.c	Tue Aug 03 18:58:36 2010 +0200
@@ -77,7 +77,8 @@
 static int opc_stop_execute
 (const struct sieve_runtime_env *renv,  sieve_size_t *address ATTR_UNUSED)
 {	
-	sieve_runtime_trace(renv, SIEVE_TRLVL_COMMANDS, "stop");
+	sieve_runtime_trace(renv, SIEVE_TRLVL_COMMANDS, 
+		"stop command; end all script execution");
 	
 	sieve_interpreter_interrupt(renv->interp);
 
diff -r 1c66cb52772d -r 15e39ffe0ff1 src/lib-sieve/ext-envelope.c
--- a/src/lib-sieve/ext-envelope.c	Tue Aug 03 18:30:14 2010 +0200
+++ b/src/lib-sieve/ext-envelope.c	Tue Aug 03 18:58:36 2010 +0200
@@ -328,6 +328,12 @@
 		if ( (ret=sieve_stringlist_next_item(addrlist->env_parts, &envp_item)) 
 			<= 0 )
 			return ret;
+
+		if ( _addrlist->strlist.trace ) {
+			sieve_runtime_trace(_addrlist->strlist.runenv, 0,
+				"getting `%s' part from message envelope",
+				str_sanitize(str_c(envp_item), 80));
+		}
 			
 		if ( (epart=_envelope_part_find(str_c(envp_item))) != NULL ) {
 			addrlist->value_index = 0;
diff -r 1c66cb52772d -r 15e39ffe0ff1 src/lib-sieve/ext-fileinto.c
--- a/src/lib-sieve/ext-fileinto.c	Tue Aug 03 18:30:14 2010 +0200
+++ b/src/lib-sieve/ext-fileinto.c	Tue Aug 03 18:58:36 2010 +0200
@@ -178,8 +178,13 @@
 	 */
 
 	mailbox = str_sanitize(str_c(folder), 64);
-	sieve_runtime_trace(renv, SIEVE_TRLVL_ACTIONS, 
-		"fileinto action; store message in mailbox `%s'", mailbox);
+
+	if ( sieve_runtime_trace_active(renv, SIEVE_TRLVL_ACTIONS) ) {
+		sieve_runtime_trace(renv, 0, "fileinto action");
+		sieve_runtime_trace_descend(renv);
+		sieve_runtime_trace(renv, 0, "store message in mailbox `%s'", 
+			str_sanitize(mailbox, 80));
+	}
 		
 	/* Add action to result */	
 	ret = sieve_act_store_add_to_result
diff -r 1c66cb52772d -r 15e39ffe0ff1 src/lib-sieve/ext-reject.c
--- a/src/lib-sieve/ext-reject.c	Tue Aug 03 18:30:14 2010 +0200
+++ b/src/lib-sieve/ext-reject.c	Tue Aug 03 18:58:36 2010 +0200
@@ -290,12 +290,16 @@
 	 * Perform operation
 	 */
 
-	if ( sieve_operation_is(oprtn, ereject_operation) )
-		sieve_runtime_trace(renv, SIEVE_TRLVL_ACTIONS,
-			"ereject action; reject message with reason `%s'", str_sanitize(str_c(reason), 64));
-	else
-		sieve_runtime_trace(renv, SIEVE_TRLVL_ACTIONS,
-			"reject action; reject message with reason `%s'", str_sanitize(str_c(reason), 64));
+	if ( sieve_runtime_trace_active(renv, SIEVE_TRLVL_ACTIONS) ) {
+		if ( sieve_operation_is(oprtn, ereject_operation) )
+			sieve_runtime_trace(renv, 0, "ereject action");
+		else
+			sieve_runtime_trace(renv, 0, "reject action");
+
+		sieve_runtime_trace_descend(renv);
+		sieve_runtime_trace(renv, 0, "reject message with reason `%s'", 
+			str_sanitize(str_c(reason), 64));
+	}
 
 	/* Add reject action to the result */
 	pool = sieve_result_pool(renv->result);
diff -r 1c66cb52772d -r 15e39ffe0ff1 src/lib-sieve/plugins/enotify/cmd-notify.c
--- a/src/lib-sieve/plugins/enotify/cmd-notify.c	Tue Aug 03 18:30:14 2010 +0200
+++ b/src/lib-sieve/plugins/enotify/cmd-notify.c	Tue Aug 03 18:58:36 2010 +0200
@@ -2,6 +2,7 @@
  */
 
 #include "lib.h"
+#include "str-sanitize.h"
 
 #include "sieve-common.h"
 #include "sieve-error.h"
@@ -465,7 +466,12 @@
 
 	/* Trace */
 
-	sieve_runtime_trace(renv, SIEVE_TRLVL_ACTIONS, "notify action");	
+	if ( sieve_runtime_trace_active(renv, SIEVE_TRLVL_ACTIONS) ) {
+		sieve_runtime_trace(renv, 0, "notify action");	
+		sieve_runtime_trace_descend(renv);
+		sieve_runtime_trace(renv, 0, "notify with uri `%s'",
+			str_sanitize(str_c(method_uri), 80));	
+	}
 
 	/* Check operands */
 
diff -r 1c66cb52772d -r 15e39ffe0ff1 src/lib-sieve/plugins/imap4flags/cmd-flag.c
--- a/src/lib-sieve/plugins/imap4flags/cmd-flag.c	Tue Aug 03 18:30:14 2010 +0200
+++ b/src/lib-sieve/plugins/imap4flags/cmd-flag.c	Tue Aug 03 18:58:36 2010 +0200
@@ -177,12 +177,10 @@
 {
 	const struct sieve_operation *op = renv->oprtn;
 	struct sieve_operand operand;
-	string_t *flag_item;
 	struct sieve_stringlist *flag_list;
 	struct sieve_variable_storage *storage;
 	unsigned int var_index;
 	ext_imapflag_flag_operation_t flag_op;
-	int ret;
 		
 	/* 
 	 * Read operands 
@@ -241,7 +239,8 @@
 		i_unreached();
 	}
 
+	sieve_runtime_trace_descend(renv);
+
 	/* Perform requested operation */
-	
 	return flag_op(renv, storage, var_index, flag_list);
 }
diff -r 1c66cb52772d -r 15e39ffe0ff1 src/lib-sieve/plugins/imap4flags/ext-imap4flags-common.c
--- a/src/lib-sieve/plugins/imap4flags/ext-imap4flags-common.c	Tue Aug 03 18:30:14 2010 +0200
+++ b/src/lib-sieve/plugins/imap4flags/ext-imap4flags-common.c	Tue Aug 03 18:58:36 2010 +0200
@@ -463,84 +463,109 @@
 	str_truncate(flags_list, 0);
 }
 
+static string_t *ext_imap4flags_get_flag_variable
+(const struct sieve_runtime_env *renv, struct sieve_variable_storage *storage,
+	unsigned int var_index)
+{
+	string_t *flags;
+	
+	if ( storage != NULL ) {
+		if ( sieve_runtime_trace_active(renv, SIEVE_TRLVL_COMMANDS) ) {
+			const char *var_name, *var_id;
+	
+			(void)sieve_variable_get_identifier(storage, var_index, &var_name);
+			var_id = sieve_variable_get_varid(storage, var_index);
+
+			sieve_runtime_trace(renv, 0, "update variable `%s' [%s]", 
+				var_name, var_id);
+		}
+
+		if ( !sieve_variable_get_modifiable(storage, var_index, &flags) )
+			return NULL;
+	} else {
+		flags = _get_flags_string(renv->oprtn->ext, renv->result);
+	}
+
+	return flags;
+}
+
 int ext_imap4flags_set_flags
 (const struct sieve_runtime_env *renv, struct sieve_variable_storage *storage,
 	unsigned int var_index, struct sieve_stringlist *flags)
 {
-	string_t *cur_flags;
-	
-	if ( storage != NULL ) {
-		if ( !sieve_variable_get_modifiable(storage, var_index, &cur_flags) )
-			return SIEVE_EXEC_BIN_CORRUPT;
-	} else {
-		cur_flags = _get_flags_string(renv->oprtn->ext, renv->result);
-	}
-	
+	string_t *cur_flags = ext_imap4flags_get_flag_variable
+		(renv, storage, var_index);
+		
 	if ( cur_flags != NULL ) {
 		string_t *flags_item;
 		int ret;
 
 		flags_list_clear_flags(cur_flags);
 		while ( (ret=sieve_stringlist_next_item(flags, &flags_item)) > 0 ) {
+			sieve_runtime_trace(renv, SIEVE_TRLVL_COMMANDS, 
+				"set flags `%s'", str_c(flags_item)); 
+
 			flags_list_add_flags(cur_flags, flags_item);
 		}
 
 		if ( ret < 0 ) return SIEVE_EXEC_BIN_CORRUPT;
+	
+		return SIEVE_EXEC_OK;
 	}
 
-	return SIEVE_EXEC_OK;
+	return SIEVE_EXEC_BIN_CORRUPT;
 }
 
 int ext_imap4flags_add_flags
 (const struct sieve_runtime_env *renv, struct sieve_variable_storage *storage, 
 	unsigned int var_index, struct sieve_stringlist *flags)
 {
-	string_t *cur_flags;
-	
-	if ( storage != NULL ) {
-		if ( !sieve_variable_get_modifiable(storage, var_index, &cur_flags) )
-			return SIEVE_EXEC_BIN_CORRUPT;
-	} else
-		cur_flags = _get_flags_string(renv->oprtn->ext, renv->result);
-
+	string_t *cur_flags = ext_imap4flags_get_flag_variable
+		(renv, storage, var_index);
+		
 	if ( cur_flags != NULL ) {
 		string_t *flags_item;
 		int ret;
 
 		while ( (ret=sieve_stringlist_next_item(flags, &flags_item)) > 0 ) {
+			sieve_runtime_trace(renv, SIEVE_TRLVL_COMMANDS, 
+				"add flags `%s'", str_c(flags_item)); 
+
 			flags_list_add_flags(cur_flags, flags_item);
 		}
 
 		if ( ret < 0 ) return SIEVE_EXEC_BIN_CORRUPT;
+	
+		return SIEVE_EXEC_OK;
 	}
 
-	return SIEVE_EXEC_OK;
+	return SIEVE_EXEC_BIN_CORRUPT;
 }
 
 int ext_imap4flags_remove_flags
 (const struct sieve_runtime_env *renv, struct sieve_variable_storage *storage, 
 	unsigned int var_index, struct sieve_stringlist *flags)
 {
-	string_t *cur_flags;
-	
-	if ( storage != NULL ) {
-		if ( !sieve_variable_get_modifiable(storage, var_index, &cur_flags) )
-			return SIEVE_EXEC_BIN_CORRUPT;
-	} else
-		cur_flags = _get_flags_string(renv->oprtn->ext, renv->result);
-	
+	string_t *cur_flags = ext_imap4flags_get_flag_variable
+		(renv, storage, var_index);
+		
 	if ( cur_flags != NULL ) {
 		string_t *flags_item;


More information about the dovecot-cvs mailing list