dovecot-1.2-sieve: Testsuite: added support for removed settings.

pigeonhole at rename-it.nl pigeonhole at rename-it.nl
Sun Jan 3 23:29:09 EET 2010


details:   http://hg.rename-it.nl/dovecot-1.2-sieve/rev/3731b1b994e0
changeset: 1184:3731b1b994e0
user:      Stephan Bosch <stephan at rename-it.nl>
date:      Sun Jan 03 22:24:33 2010 +0100
description:
Testsuite: added support for removed settings.

diffstat:

 src/testsuite/cmd-test-config.c    |  74 ++++++++++++++++++++++++++++++++++++-
 src/testsuite/ext-testsuite.c      |   1 +
 src/testsuite/testsuite-common.h   |   2 +
 src/testsuite/testsuite-settings.c |  14 +++++++
 src/testsuite/testsuite-settings.h |   1 +
 5 files changed, 90 insertions(+), 2 deletions(-)

diffs (200 lines):

diff -r 67d829304ce7 -r 3731b1b994e0 src/testsuite/cmd-test-config.c
--- a/src/testsuite/cmd-test-config.c	Sun Jan 03 21:41:45 2010 +0100
+++ b/src/testsuite/cmd-test-config.c	Sun Jan 03 22:24:33 2010 +0100
@@ -19,7 +19,8 @@
  *
  * Syntax:   
  *   test_config (
- *     :set <setting: string> <value: string> / 
+ *     :set <setting: string> <value: string> /
+ *     :unset <setting: string> /  
  *     :reload [<extension: string>] )
  */
 
@@ -58,6 +59,21 @@
 	cmd_test_config_set_operation_execute 
 };
 
+/* Test_message_unset operation */
+
+static bool cmd_test_config_unset_operation_dump
+	(const struct sieve_dumptime_env *denv, sieve_size_t *address);
+static int cmd_test_config_unset_operation_execute
+	(const struct sieve_runtime_env *renv, sieve_size_t *address);
+
+const struct sieve_operation_def test_config_unset_operation = { 
+	"TEST_CONFIG_UNSET",
+	&testsuite_extension, 
+	TESTSUITE_OPERATION_TEST_CONFIG_UNSET,
+	cmd_test_config_unset_operation_dump, 
+	cmd_test_config_unset_operation_execute 
+};
+
 /* Test_message_mailbox operation */
 
 static bool cmd_test_config_reload_operation_dump
@@ -79,12 +95,14 @@
 
 enum cmd_test_config_action {
 	CONFIG_ACTION_SET,
+	CONFIG_ACTION_UNSET,
 	CONFIG_ACTION_RELOAD,
 	CONFIG_ACTION_LAST
 };
 
 const struct sieve_operation_def *test_config_operations[] = {
 	&test_config_set_operation,
+	&test_config_unset_operation,
 	&test_config_reload_operation
 };
  
@@ -124,6 +142,8 @@
 
 	if ( strcmp(identifier, "set") == 0 )
 		action = CONFIG_ACTION_SET;
+	else if ( strcmp(identifier, "unset") == 0 )
+		action = CONFIG_ACTION_UNSET;
 	else if ( strcmp(identifier, "reload") == 0 )
 		action = CONFIG_ACTION_RELOAD;
 	else 
@@ -181,6 +201,20 @@
 		/* Detach parameters */
 		*arg = sieve_ast_arguments_detach(tag->parameters,2);
 		break;
+	case CONFIG_ACTION_UNSET:
+		/* Check syntax:
+		 *   :unset <setting: string>
+		 */
+		if ( !sieve_validate_tag_parameter
+			(valdtr, cmd, tag, *arg, NULL, 0, SAAT_STRING, TRUE) ) {
+			return FALSE;
+		}
+
+		/* Detach parameter */
+		tag->parameters = *arg;
+		*arg = sieve_ast_arguments_detach(*arg,1);
+		break;
+
 	case CONFIG_ACTION_RELOAD:
 		/* Check syntax:
 		 *   :reload <extension: string>
@@ -253,6 +287,17 @@
 		sieve_opr_string_dump(denv, address, "value");
 }
 
+static bool cmd_test_config_unset_operation_dump
+(const struct sieve_dumptime_env *denv, sieve_size_t *address)
+{
+	sieve_code_dumpf(denv, "TEST_CONFIG_UNSET:");
+	
+	sieve_code_descend(denv);
+
+	return 
+		sieve_opr_string_dump(denv, address, "setting");
+}
+
 static bool cmd_test_config_reload_operation_dump
 (const struct sieve_dumptime_env *denv, sieve_size_t *address)
 {
@@ -278,7 +323,7 @@
 	 * Read operands 
 	 */
 
-	/* Settings */
+	/* Setting */
 
 	if ( !sieve_opr_string_read(renv, address, &setting) ) {
 		sieve_runtime_trace_error(renv, "invalid setting operand");
@@ -304,6 +349,31 @@
 	return SIEVE_EXEC_OK;
 }
 
+static int cmd_test_config_unset_operation_execute
+(const struct sieve_runtime_env *renv, sieve_size_t *address)
+{
+	string_t *setting;
+
+	/* 
+	 * Read operands 
+	 */
+
+	if ( !sieve_opr_string_read(renv, address, &setting) ) {
+		sieve_runtime_trace_error(renv, "invalid setting operand");
+		return SIEVE_EXEC_BIN_CORRUPT;
+	}
+
+	/*
+	 * Perform operation
+	 */
+		
+	sieve_runtime_trace(renv, "TEST_CONFIG_UNSET %s", str_c(setting));
+
+	testsuite_setting_unset(str_c(setting));
+
+	return SIEVE_EXEC_OK;
+}
+
 static int cmd_test_config_reload_operation_execute
 (const struct sieve_runtime_env *renv, sieve_size_t *address)
 {
diff -r 67d829304ce7 -r 3731b1b994e0 src/testsuite/ext-testsuite.c
--- a/src/testsuite/ext-testsuite.c	Sun Jan 03 21:41:45 2010 +0100
+++ b/src/testsuite/ext-testsuite.c	Sun Jan 03 22:24:33 2010 +0100
@@ -56,6 +56,7 @@
 	&test_finish_operation,
 	&test_fail_operation,
 	&test_config_set_operation,
+	&test_config_unset_operation,
 	&test_config_reload_operation,
 	&test_set_operation,
 	&test_script_compile_operation,
diff -r 67d829304ce7 -r 3731b1b994e0 src/testsuite/testsuite-common.h
--- a/src/testsuite/testsuite-common.h	Sun Jan 03 21:41:45 2010 +0100
+++ b/src/testsuite/testsuite-common.h	Sun Jan 03 22:24:33 2010 +0100
@@ -77,6 +77,7 @@
 	TESTSUITE_OPERATION_TEST_FINISH,
 	TESTSUITE_OPERATION_TEST_FAIL,
 	TESTSUITE_OPERATION_TEST_CONFIG_SET,
+	TESTSUITE_OPERATION_TEST_CONFIG_UNSET,
 	TESTSUITE_OPERATION_TEST_CONFIG_RELOAD,
 	TESTSUITE_OPERATION_TEST_SET,
 	TESTSUITE_OPERATION_TEST_SCRIPT_COMPILE,
@@ -99,6 +100,7 @@
 extern const struct sieve_operation_def test_finish_operation;
 extern const struct sieve_operation_def test_fail_operation;
 extern const struct sieve_operation_def test_config_set_operation;
+extern const struct sieve_operation_def test_config_unset_operation;
 extern const struct sieve_operation_def test_config_reload_operation;
 extern const struct sieve_operation_def test_set_operation;
 extern const struct sieve_operation_def test_script_compile_operation;
diff -r 67d829304ce7 -r 3731b1b994e0 src/testsuite/testsuite-settings.c
--- a/src/testsuite/testsuite-settings.c	Sun Jan 03 21:41:45 2010 +0100
+++ b/src/testsuite/testsuite-settings.c	Sun Jan 03 22:24:33 2010 +0100
@@ -73,3 +73,17 @@
 		hash_table_insert(settings, (void *) identifier, (void *) setting);
 	}
 }
+
+void testsuite_setting_unset(const char *identifier)
+{
+	struct testsuite_setting *setting = (struct testsuite_setting *) 
+		hash_table_lookup(settings, identifier);
+
+	if ( setting != NULL ) {
+		i_free(setting->identifier);
+		i_free(setting->value);
+		i_free(setting);
+	}
+
+	hash_table_remove(settings, identifier);
+}
diff -r 67d829304ce7 -r 3731b1b994e0 src/testsuite/testsuite-settings.h
--- a/src/testsuite/testsuite-settings.h	Sun Jan 03 21:41:45 2010 +0100
+++ b/src/testsuite/testsuite-settings.h	Sun Jan 03 22:24:33 2010 +0100
@@ -11,5 +11,6 @@
 
 const char *testsuite_setting_get(void *context, const char *identifier);
 void testsuite_setting_set(const char *identifier, const char *value);
+void testsuite_setting_unset(const char *identifier);
 
 #endif /* __TESTSUITE_SETTINGS_H */


More information about the dovecot-cvs mailing list