[asterisk-commits] dvossel: branch dvossel/test_api r234333 - /team/dvossel/test_api/main/test.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Thu Dec 10 15:41:58 CST 2009


Author: dvossel
Date: Thu Dec 10 15:41:55 2009
New Revision: 234333

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=234333
Log:
addition of 'test show results' cli commands

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

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=234333&r1=234332&r2=234333
==============================================================================
--- team/dvossel/test_api/main/test.c (original)
+++ team/dvossel/test_api/main/test.c Thu Dec 10 15:41:55 2009
@@ -43,27 +43,24 @@
 };
 
 static const char *test_result2str[] = {
-	"Not Run",
-	"Pass",
-	"Fail",
+	"NOT RUN",
+	"PASS",
+	"FAIL",
 };
 
 struct ast_test_result {
-	/*! current test result state */
-	enum ast_test_result_state state;
-	/*! optional error buf to describe error results */
-	char error[64];
+	enum ast_test_result_state state; /*! current test result state */
+	char error[64];                   /*! optional error buf to describe error results */
+	int time;                         /*! time in ms test took */
 };
 
 struct ast_test {
-	char *name;
-	char *catagory;
-	char *summary;
-	char *description;
-	ast_test_cb_t *cb;
-
-	/*! stores the last ran result */
-	struct ast_test_result result;
+	char *name;          /*! name of test, unique to catagory */
+	char *catagory;      /*! test catagory */
+	char *summary;       /*! optional short summary of test */
+	char *description;   /*! optional brief detailed description of test */
+	struct ast_test_result result;  /*! stores the last ran result */
+	ast_test_cb_t *cb;   /*! test call back function */
 	AST_LIST_ENTRY(ast_test) entry;
 };
 
@@ -82,120 +79,8 @@
 static struct ast_test *test_free(struct ast_test *test);
 static int test_insert(struct ast_test *test);
 static struct ast_test *test_remove(ast_test_cb_t *cb);
-
-/* CLI commands */
-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 *test = NULL;
-	int count = 0;
-	switch (cmd) {
-	case CLI_INIT:
-		e->command = "test show registered";
-		e->usage =
-			"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, 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 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)
-{
-	switch (cmd) {
-	case CLI_INIT:
-		e->command = "test execute";
-		e->usage =
-			"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:
-
-		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;
-}
-
-
-static struct ast_cli_entry test_cli[] = {
-	AST_CLI_DEFINE(test_cli_show_registered,           "show registered tests"),
-	AST_CLI_DEFINE(test_cli_execute_registered,        "execute registered tests"),
-};
-
-
-/* Sample Test */
-AST_TEST_DEFINE(sample_test1,
-{
-	return AST_TEST_PASS;
-})
-
-int ast_test_init()
-{
-	/* Register cli commands */
-	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);
-
-	/* Unregister Sample Tests */
-	//AST_TEST_UNREGISTER(sample_test1);
-
-	return 0;
-}
+/*static int test_generate_xml(void);*/
+
 
 int ast_test_register(const char *name, const char *catagory, const char *summary, const char *description, ast_test_cb_t *cb)
 {
@@ -391,4 +276,207 @@
 
 	return test;
 }
+
+/* CLI commands */
+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 *test = NULL;
+	int count = 0;
+	switch (cmd) {
+	case CLI_INIT:
+		e->command = "test show registered";
+		e->usage =
+			"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, 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 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)
+{
+	switch (cmd) {
+	case CLI_INIT:
+		e->command = "test execute";
+		e->usage =
+			"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:
+
+		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;
+}
+
+static char *test_cli_show_results_all(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
+{
+#define FORMAT_RES_ALL "%-10s %-15s %-20s %-30s\n"
+	struct ast_test *test = NULL;
+	switch (cmd) {
+	case CLI_INIT:
+		e->command = "test show results all";
+		e->usage =
+			"Usage: test show results\n"
+			"       Displays detailed test results for every test that has been run.\n";
+		return NULL;
+	case CLI_GENERATE:
+		return NULL;
+	case CLI_HANDLER:
+
+		if (a->argc != 4) {
+			return CLI_SHOWUSAGE;
+		}
+
+		ast_cli(a->fd, FORMAT_RES_ALL, "Result", "Name", "Catagory", "Error Description");
+		AST_LIST_LOCK(&tests);
+		AST_LIST_TRAVERSE_SAFE_BEGIN(&tests, test, entry) {
+			if (test->result.state != AST_TEST_NOT_RUN) {
+				ast_cli(a->fd, FORMAT_RES_ALL,
+					test_result2str[test->result.state],
+					test->name,
+					test->catagory,
+					(test->result.state == AST_TEST_FAIL) ? (ast_strlen_zero(test->result.error) ? "Not Avaliable" : test->result.error) : "");
+			}
+		}
+		AST_LIST_TRAVERSE_SAFE_END;
+		AST_LIST_UNLOCK(&tests);
+
+		if (!last_results.count) {
+			ast_cli(a->fd, "--- No Test Results 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;
+}
+
+static char *test_cli_show_results_failed(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
+{
+#define FORMAT_RES_FAIL "%-10s %-15s %-20s %-30s\n"
+	struct ast_test *test = NULL;
+	switch (cmd) {
+	case CLI_INIT:
+		e->command = "test show results failed";
+		e->usage =
+			"Usage: test show results\n"
+			"       Displays detailed test results for every test that has been run.\n";
+		return NULL;
+	case CLI_GENERATE:
+		return NULL;
+	case CLI_HANDLER:
+
+		if (a->argc != 4) {
+			return CLI_SHOWUSAGE;
+		}
+
+		ast_cli(a->fd, FORMAT_RES_FAIL, "Result", "Name", "Catagory", "Error Description");
+		AST_LIST_LOCK(&tests);
+		AST_LIST_TRAVERSE_SAFE_BEGIN(&tests, test, entry) {
+			if (test->result.state == AST_TEST_FAIL) {
+				ast_cli(a->fd, FORMAT_RES_FAIL,
+					test_result2str[test->result.state],
+					test->name,
+					test->catagory,
+					ast_strlen_zero(test->result.error) ? "Not Avaliable" : test->result.error);
+			}
+		}
+		AST_LIST_TRAVERSE_SAFE_END;
+		AST_LIST_UNLOCK(&tests);
+
+		if (!last_results.failed) {
+			ast_cli(a->fd, "--- No failed test results 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;
+}
+
+static struct ast_cli_entry test_cli[] = {
+	AST_CLI_DEFINE(test_cli_show_registered,           "show registered tests"),
+	AST_CLI_DEFINE(test_cli_execute_registered,        "execute registered tests"),
+	AST_CLI_DEFINE(test_cli_show_results_all,          "show last test results"),
+	AST_CLI_DEFINE(test_cli_show_results_failed,       "show failed tests"),
+};
+
+
+/* Sample Test */
+AST_TEST_DEFINE(sample_test1,
+{
+	return AST_TEST_FAIL;
+})
+
+int ast_test_init()
+{
+	/* Register cli commands */
+	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);
+
+	/* Unregister Sample Tests */
+	//AST_TEST_UNREGISTER(sample_test1);
+
+	return 0;
+}
 #endif




More information about the asterisk-commits mailing list