[svn-commits] dvossel: branch dvossel/test_api r234254 - /team/dvossel/test_api/main/

SVN commits to the Digium repositories svn-commits at lists.digium.com
Thu Dec 10 14:44:22 CST 2009


Author: dvossel
Date: Thu Dec 10 14:44:18 2009
New Revision: 234254

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=234254
Log:
adds additional options to cli commands, fixes bug in ast_test_execute where wrong mode was picked

Modified:
    team/dvossel/test_api/main/asterisk.c
    team/dvossel/test_api/main/test.c

Modified: team/dvossel/test_api/main/asterisk.c
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/test_api/main/asterisk.c?view=diff&rev=234254&r1=234253&r2=234254
==============================================================================
--- team/dvossel/test_api/main/asterisk.c (original)
+++ team/dvossel/test_api/main/asterisk.c Thu Dec 10 14:44:18 2009
@@ -3550,10 +3550,12 @@
 		exit(1);
 	}
 
+#ifdef AST_TEST_FRAMEWORK
 	if (ast_test_init()) {
 		printf("%s", term_quit());
 		exit(1);
 	}
+#endif
 
 	ast_makesocket();
 	sigemptyset(&sigs);

Modified: team/dvossel/test_api/main/test.c
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/test_api/main/test.c?view=diff&rev=234254&r1=234253&r2=234254
==============================================================================
--- team/dvossel/test_api/main/test.c (original)
+++ team/dvossel/test_api/main/test.c Thu Dec 10 14:44:18 2009
@@ -18,22 +18,24 @@
 
 /*! \file
  *
- * \brief Internal test framework
+ * \brief Internal Test Framework
  *
  * \author David Vossel <dvossel at digium.com>
  */
 
+
 #include "asterisk.h"
 
 #include "asterisk/_private.h"
 
 #include "asterisk/test.h"
+
+#ifdef AST_TEST_FRAMEWORK
 #include "asterisk/logger.h"
 #include "asterisk/linkedlists.h"
 #include "asterisk/utils.h"
 #include "asterisk/cli.h"
 
-#ifdef AST_TEST_FRAMEWORK
 enum ast_test_result_state {
 	AST_TEST_NOT_RUN = 0,
 	AST_TEST_PASS = 1,
@@ -73,7 +75,6 @@
 
 /*! List of registered test definitions */
 static AST_LIST_HEAD_STATIC(tests, ast_test);
-#endif
 
 
 /*! static function prototypes */
@@ -86,52 +87,87 @@
 static char *test_cli_show_registered(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
 {
 #define FORMAT "%-15s %-20s %-30s %-10s\n"
-	struct ast_test *cur = NULL;
+	struct ast_test *test = NULL;
 	int count = 0;
-
 	switch (cmd) {
 	case CLI_INIT:
 		e->command = "test show registered";
 		e->usage =
-			"Usage: test show registered\n"
-			"       Shows current registered tests\n";
+			"Usage: test show registered [test catagory] [test name] \n"
+			"       Shows registered tests. Has three modes.\n"
+			"       1. If no arguments are provided, all registered tests will be shown\n"
+			"       2. If [test catagory] is provided only tests which fall within that\n"
+			"          catagory will be shown.\n"
+			"       3. If both [test catagory] and [test name] is provided, only the test\n"
+			"          within [test catagory] matching [test name] will be shown \n";
 		return NULL;
 	case CLI_GENERATE:
 		return NULL;
 	case CLI_HANDLER:
+		if (a->argc < 3 || a->argc > 5) {
+			return CLI_SHOWUSAGE;
+		}
 		ast_cli(a->fd, FORMAT, "Name", "Catagory", "Summary", "Test Result");
 		AST_LIST_LOCK(&tests);
-		AST_LIST_TRAVERSE_SAFE_BEGIN(&tests, cur, entry) {
-			ast_cli(a->fd, FORMAT, cur->name, cur->catagory, cur->summary, test_result2str[cur->result.state]);
-			count ++;
+		AST_LIST_TRAVERSE_SAFE_BEGIN(&tests, test, entry) {
+			if ((a->argc == 3) ||
+				 ((a->argc == 4) && !strcmp(test->catagory, a->argv[3])) ||
+				 ((a->argc == 5) && !strcmp(test->catagory, a->argv[3]) && !strcmp(test->name, a->argv[4]))) {
+
+				ast_cli(a->fd, FORMAT, test->name, test->catagory, test->summary, test_result2str[test->result.state]);
+				count ++;
+			}
 		}
 		AST_LIST_TRAVERSE_SAFE_END;
 		AST_LIST_UNLOCK(&tests);
-		ast_cli(a->fd, "%d Test(s) Registered\n", count);
-
+		ast_cli(a->fd, "%d Registered Tests Matched\n", count);
 	default:
 		return NULL;
 	}
+
+	return CLI_SUCCESS;
 }
 
 static char *test_cli_execute_registered(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
 {
-//todohere add additional options for tests 
 	switch (cmd) {
 	case CLI_INIT:
 		e->command = "test execute";
 		e->usage =
-			"Usage: test execute\n"
-			"       Executes registered tests\n";
+			"Usage: test execute [test catagory] [test name]\n"
+			"       Executes registered tests. Has three modes.\n"
+			"       1. If no arguments are provided, all registered tests will execute\n"
+			"       2. If [test catagory] is provided only tests which fall within that\n"
+			"          catagory will be executed.\n"
+			"       3. If both [test catagory] and [test name] is provided, only the test\n"
+			"          within [test catagory] matching [test name] will execute \n";
 		return NULL;
 	case CLI_GENERATE:
 		return NULL;
 	case CLI_HANDLER:
-		ast_test_execute(NULL, NULL);
+
+		if (a->argc == 2) { /* run all registered tests */
+			ast_cli(a->fd, "Running all available tests...\n");
+			ast_test_execute(NULL, NULL);
+		} else if (a->argc == 3) { /* run only tests within a catagory */
+			ast_cli(a->fd, "Running all available tests matching catagory %s\n", a->argv[2]);
+			ast_test_execute(NULL, a->argv[2]);
+		} else if (a->argc == 4) { /* run only a single test matching the catagory and name */
+			ast_cli(a->fd, "Running all available tests matching catagory %s and name %s\n", a->argv[2], a->argv[3]);
+			ast_test_execute(a->argv[3], a->argv[2]);
+		} else {
+			return CLI_SHOWUSAGE;
+		}
+
+		if (!last_results.count) {
+			ast_cli(a->fd, "--- No Tests Found! ---\n");
+		}
 		ast_cli(a->fd, "%d Test(s) Executed  %d Passed  %d Failed\n", last_results.count, last_results.passed, last_results.failed);
 	default:
 		return NULL;
 	}
+
+	return CLI_SUCCESS;
 }
 
 
@@ -153,7 +189,7 @@
 	ast_cli_register_multiple(test_cli, ARRAY_LEN(test_cli));
 
 	/* Register Sample Tests */
-	AST_TEST_REGISTER("sample test 1", "main/test", "this is sample test 1", "for example purposes", sample_test1);
+	AST_TEST_REGISTER("sample_test_1", "main/test", "this is sample test 1", "for example purposes", sample_test1);
 
 	/* Unregister Sample Tests */
 	//AST_TEST_UNREGISTER(sample_test1);
@@ -205,11 +241,12 @@
 	int mode = 0; /* 3 modes, 0 = run all, 1 = only by catagory, 2 = only by name and catagory */
 	int execute = 0;
 
+	/* clear previous execution results */
 	last_results.count = last_results.passed = last_results.failed = 0;
 
-	if (!ast_strlen_zero(catagory) && !ast_strlen_zero(name)) {
+	if (!ast_strlen_zero(catagory) && ast_strlen_zero(name)) {
 		mode = 1;
-	} else if (!ast_strlen_zero(catagory)) {
+	} else if (!ast_strlen_zero(catagory) && !ast_strlen_zero(name)) {
 		mode = 2;
 	}
 
@@ -244,7 +281,6 @@
 	//todohere
 	return 0;
 }
-
 
 /*!
  * \brief adds test to container sorted first by catagory then by name
@@ -355,3 +391,4 @@
 
 	return test;
 }
+#endif




More information about the svn-commits mailing list