[asterisk-commits] mmichelson: branch mmichelson/rls-subscribe r417733 - /team/mmichelson/rls-su...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Tue Jul 1 17:42:09 CDT 2014


Author: mmichelson
Date: Tue Jul  1 17:42:06 2014
New Revision: 417733

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=417733
Log:
Tweak test code and add documentatin to unit test methods.


Modified:
    team/mmichelson/rls-subscribe/res/res_pjsip_pubsub.c

Modified: team/mmichelson/rls-subscribe/res/res_pjsip_pubsub.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/rls-subscribe/res/res_pjsip_pubsub.c?view=diff&rev=417733&r1=417732&r2=417733
==============================================================================
--- team/mmichelson/rls-subscribe/res/res_pjsip_pubsub.c (original)
+++ team/mmichelson/rls-subscribe/res/res_pjsip_pubsub.c Tue Jul  1 17:42:06 2014
@@ -2730,6 +2730,11 @@
 
 #ifdef TEST_FRAMEWORK
 
+/*!
+ * \brief "bad" resources
+ *
+ * These are resources that the test handler will reject subscriptions to.
+ */
 const char *bad_resources[] = {
 	"coconut",
 	"cilantro",
@@ -2737,6 +2742,11 @@
 	"cheese",
 };
 
+/*!
+ * \brief new_subscribe callback for unit tests
+ *
+ * Will give a 200 OK response to any resource except the "bad" ones.
+ */
 static int test_new_subscribe(struct ast_sip_endpoint *endpoint, const char *resource)
 {
 	int i;
@@ -2750,15 +2760,34 @@
 	return 200;
 }
 
+/*!
+ * \brief Subscription notifier for unit tests.
+ *
+ * Since unit tests are only concerned with building a resource tree,
+ * only the new_subscribe callback needs to be defined.
+ */
 struct ast_sip_notifier test_notifier = {
 	.new_subscribe = test_new_subscribe,
 };
 
+/*!
+ * \brief Subscription handler for unit tests.
+ */
 struct ast_sip_subscription_handler test_handler = {
 	.event_name = "test",
 	.notifier = &test_notifier,
 };
 
+/*!
+ * \brief Set properties on an allocated resource list
+ *
+ * \param list The list to set details on.
+ * \param event The list's event.
+ * \param resources Array of resources to add to the list.
+ * \param num_resources Number of resources in the array.
+ * \retval 0 Success
+ * \retval non-zero Failure
+ */
 static int populate_list(struct resource_list *list, const char *event, const char **resources, size_t num_resources)
 {
 	int i;
@@ -2773,6 +2802,9 @@
 	return 0;
 }
 
+/*!
+ * \brief RAII callback to destroy a resource list
+ */
 static void cleanup_resource_list(struct resource_list *list)
 {
 	if (!list) {
@@ -2783,8 +2815,19 @@
 	ao2_cleanup(list);
 }
 
+/*!
+ * \brief allocate a resource list, store it in sorcery, and set its details
+ *
+ * \param test The unit test. Used for logging status messages.
+ * \param list_name The name of the list to create.
+ * \param event The event the list services
+ * \param resources Array of resources to apply to the list
+ * \param num_resources The number of resources in the array
+ * \retval NULL Failed to allocate or populate list
+ * \retval non-NULL The created list
+ */
 static struct resource_list *create_resource_list(struct ast_test *test,
-		const char *list_name, const char *event,const char **resources, size_t size)
+		const char *list_name, const char *event, const char **resources, size_t num_resources)
 {
 	struct resource_list *list;
 
@@ -2800,7 +2843,7 @@
 		return NULL;
 	}
 
-	if (populate_list(list, event, resources, size)) {
+	if (populate_list(list, event, resources, num_resources)) {
 		ast_test_status_update(test, "Could not add resources to the resource list\n");
 		cleanup_resource_list(list);
 		return NULL;
@@ -2809,20 +2852,34 @@
 	return list;
 }
 
+/*!
+ * \brief Check the integrity of a tree node against a set of resources.
+ *
+ * The tree node's resources must be in the same order as the resources in
+ * the supplied resources array. Because of this constraint, tests can misrepresent
+ * the size of the resources array as being smaller than it really is if resources
+ * at the end of the array should not be present in the tree node.
+ *
+ * \param test The unit test. Used for printing status messages.
+ * \param node The constructed tree node whose integrity is under question.
+ * \param resources Array of expected resource values
+ * \param num_resources The number of resources to check in the array.
+ */
 static int check_node(struct ast_test *test, struct tree_node *node,
-		const char **resources, size_t size)
+		const char **resources, size_t num_resources)
 {
 	int i;
 
-	if (AST_VECTOR_SIZE(&node->children) != size) {
+	if (AST_VECTOR_SIZE(&node->children) != num_resources) {
 		ast_test_status_update(test, "Unexpected number of resources in tree. Expected %d, got %d\n",
-				size, AST_VECTOR_SIZE(&node->children));
+				num_resources, AST_VECTOR_SIZE(&node->children));
 		return -1;
 	}
 
-	for (i = 0; i < size; ++i) {
+	for (i = 0; i < num_resources; ++i) {
 		if (strcmp(resources[i], AST_VECTOR_GET(&node->children, i)->resource)) {
-			ast_test_status_update(test, "Mismatched resources\n");
+			ast_test_status_update(test, "Mismatched resources. Expected '%s' but got '%s'\n",
+					resources[i], AST_VECTOR_GET(&node->children, i)->resource);
 			return -1;
 		}
 	}
@@ -2830,10 +2887,19 @@
 	return 0;
 }
 
+/*!
+ * \brief RAII_VAR callback to destroy an allocated resource tree
+ */
+static void test_resource_tree_destroy(struct resource_tree *tree)
+{
+	resource_tree_destroy(tree);
+	ast_free(tree);
+}
+
 AST_TEST_DEFINE(resource_tree)
 {
 	RAII_VAR(struct resource_list *, list, NULL, cleanup_resource_list);
-	RAII_VAR(struct resource_tree *, tree, NULL, resource_tree_destroy);
+	RAII_VAR(struct resource_tree *, tree, NULL, test_resource_tree_destroy);
 	const char *resources[] = {
 		"huey",
 		"dewey",
@@ -2881,7 +2947,7 @@
 {
 	RAII_VAR(struct resource_list *, list_1, NULL, cleanup_resource_list);
 	RAII_VAR(struct resource_list *, list_2, NULL, cleanup_resource_list);
-	RAII_VAR(struct resource_tree *, tree, NULL, resource_tree_destroy);
+	RAII_VAR(struct resource_tree *, tree, NULL, test_resource_tree_destroy);
 	const char *resources_1[] = {
 		"huey",
 		"dewey",
@@ -2939,6 +3005,7 @@
 		return AST_TEST_FAIL;
 	}
 
+	/* The embedded list is at index 3 in the root node's children */
 	node = AST_VECTOR_GET(&node->children, 3);
 	if (check_node(test, node, resources_2, ARRAY_LEN(resources_2))) {
 		return AST_TEST_FAIL;
@@ -2950,12 +3017,12 @@
 AST_TEST_DEFINE(bad_resource)
 {
 	RAII_VAR(struct resource_list *, list, NULL, cleanup_resource_list);
-	RAII_VAR(struct resource_tree *, tree, NULL, resource_tree_destroy);
+	RAII_VAR(struct resource_tree *, tree, NULL, test_resource_tree_destroy);
 	const char *resources[] = {
 		"huey",
 		"dewey",
 		"louie",
-		"coconut",
+		"coconut", /* A "bad" resource */
 	};
 	int resp;
 
@@ -2988,6 +3055,7 @@
 		return AST_TEST_FAIL;
 	}
 
+	/* We check against all but the final resource since we expect it not to be in the tree */
 	if (check_node(test, tree->root, resources, ARRAY_LEN(resources) - 1)) {
 		return AST_TEST_FAIL;
 	}
@@ -3000,13 +3068,14 @@
 {
 	RAII_VAR(struct resource_list *, list_1, NULL, cleanup_resource_list);
 	RAII_VAR(struct resource_list *, list_2, NULL, cleanup_resource_list);
-	RAII_VAR(struct resource_tree *, tree, NULL, resource_tree_destroy);
+	RAII_VAR(struct resource_tree *, tree, NULL, test_resource_tree_destroy);
 	const char *resources_1[] = {
 		"huey",
 		"dewey",
 		"louie",
 		"gross",
 	};
+	/* This list has nothing but bad resources */
 	const char *resources_2[] = {
 		"coconut",
 		"cilantro",
@@ -3049,6 +3118,9 @@
 		return AST_TEST_FAIL;
 	}
 
+	/* We check against all but the final resource of the list since the entire branch should
+	 * be pruned from the tree
+	 */
 	if (check_node(test, tree->root, resources_1, ARRAY_LEN(resources_1) - 1)) {
 		return AST_TEST_FAIL;
 	}
@@ -3061,7 +3133,7 @@
 {
 	RAII_VAR(struct resource_list *, list_1, NULL, cleanup_resource_list);
 	RAII_VAR(struct resource_list *, list_2, NULL, cleanup_resource_list);
-	RAII_VAR(struct resource_tree *, tree, NULL, resource_tree_destroy);
+	RAII_VAR(struct resource_tree *, tree, NULL, test_resource_tree_destroy);
 	const char *resources_1[] = {
 		"huey",
 		"ducks",
@@ -3122,7 +3194,8 @@
 	}
 
 	/* This node should have "donald", "daisy", "scrooge", "dewey", and "louie".
-	 * "huey" is not here since that was already encountered in the parent list */
+	 * "huey" is not here since that was already encountered in the parent list
+	 */
 	node = AST_VECTOR_GET(&node->children, 1);
 	if (check_node(test, node, resources_2, ARRAY_LEN(resources_2) - 1)) {
 		return AST_TEST_FAIL;
@@ -3135,7 +3208,7 @@
 {
 	RAII_VAR(struct resource_list *, list_1, NULL, cleanup_resource_list);
 	RAII_VAR(struct resource_list *, list_2, NULL, cleanup_resource_list);
-	RAII_VAR(struct resource_tree *, tree, NULL, resource_tree_destroy);
+	RAII_VAR(struct resource_tree *, tree, NULL, test_resource_tree_destroy);
 	const char *resources_1[] = {
 		"derp",
 	};
@@ -3179,7 +3252,7 @@
 AST_TEST_DEFINE(bad_event)
 {
 	RAII_VAR(struct resource_list *, list, NULL, cleanup_resource_list);
-	RAII_VAR(struct resource_tree *, tree, NULL, resource_tree_destroy);
+	RAII_VAR(struct resource_tree *, tree, NULL, test_resource_tree_destroy);
 	const char *resources[] = {
 		"huey",
 		"dewey",
@@ -3205,6 +3278,9 @@
 	}
 
 	tree = ast_calloc(1, sizeof(*tree));
+	/* Since the test_handler is for event "test", this should not build a list, but
+	 * instead result in a single resource being created, called "foo"
+	 */
 	resp = build_resource_tree(NULL, &test_handler, "foo", tree);
 	if (resp != 200) {
 		ast_test_status_update(test, "Unexpected response %d when building resource tree\n", resp);




More information about the asterisk-commits mailing list