[svn-commits] mjordan: branch mjordan/trunk_jitter_tests r358763 - /team/mjordan/trunk_jitt...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Mon Mar 12 08:49:37 CDT 2012


Author: mjordan
Date: Mon Mar 12 08:49:33 2012
New Revision: 358763

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=358763
Log:
Merge tests added over weekend into branch

Yay more unit tests.

Modified:
    team/mjordan/trunk_jitter_tests/tests/test_jitterbuffer.c

Modified: team/mjordan/trunk_jitter_tests/tests/test_jitterbuffer.c
URL: http://svnview.digium.com/svn/asterisk/team/mjordan/trunk_jitter_tests/tests/test_jitterbuffer.c?view=diff&rev=358763&r1=358762&r2=358763
==============================================================================
--- team/mjordan/trunk_jitter_tests/tests/test_jitterbuffer.c (original)
+++ team/mjordan/trunk_jitter_tests/tests/test_jitterbuffer.c Mon Mar 12 08:49:33 2012
@@ -46,6 +46,23 @@
 #define DEFAULT_TARGET_EXTRA -1
 #define DEFAULT_CODEC_INTERP_LEN 20
 
+#define JB_INFO_NUMERIC_TEST(attribute, expected) do { \
+	if (attribute != expected) { \
+		ast_test_status_update(test, #attribute ": expected [%ld]; actual [%ld]\n", (long int)expected, attribute); \
+		goto cleanup; \
+	} \
+} while (0)
+
+#define JB_INFO_PRINT_FRAME_DEBUG(jbinfo) do { \
+	ast_debug(1, "JitterBuffer Frame Info:\n" \
+		"\tFrames In: %ld\n\tFrames Out: %ld\n" \
+		"\tDropped Frames: %ld\n\tLate Frames: %ld\n" \
+		"\tLost Frames: %ld\n\tOut of Order Frames: %ld\n" \
+		"\tCurrent Frame: %ld\n", jbinfo.frames_in, jbinfo.frames_out, \
+		jbinfo.frames_dropped, jbinfo.frames_late, jbinfo.frames_lost, \
+		jbinfo.frames_ooo, jbinfo.frames_cur); \
+} while (0)
+
 static const char *jitter_buffer_return_codes[] = {
 	"JB_OK",            /* 0 */
 	"JB_EMPTY",         /* 1 */
@@ -312,7 +329,6 @@
 	enum ast_test_result_state result = AST_TEST_FAIL;
 	struct jitterbuf *jb = NULL;
 	struct jb_frame frame;
-	struct jb_info jbinfo;
 	struct jb_conf jbconf;
 	int i;
 
@@ -345,7 +361,7 @@
 		if (i % 5 == 0) {
 			i++;
 		}
-		if (jb_put(jb, NULL, JB_TYPE_CONTROL, 20, i * 20, i * 20 + 5) == JB_DROP) {
+		if (jb_put(jb, NULL, JB_TYPE_VOICE, 20, i * 20, i * 20 + 5) == JB_DROP) {
 			ast_test_status_update(test, "Jitter buffer dropped packet %d\n", i);
 			goto cleanup;
 		}
@@ -355,7 +371,7 @@
 		enum jb_return_code ret;
 		if ((ret = jb_get(jb, &frame, i * 20 + 5, DEFAULT_CODEC_INTERP_LEN)) != JB_OK) {
 			/* If we didn't get an OK, make sure that it was an expected lost frame */
-			if (!(ret == JB_NOFRAME && i % 5 == 0)) {
+			if (!((ret == JB_INTERP && i % 5 == 0) || (ret == JB_NOFRAME && i == 0))) {
 				ast_test_status_update(test,
 					"Unexpected jitter buffer return code [%s] when retrieving frame %d\n",
 					jitter_buffer_return_codes[ret], i);
@@ -467,9 +483,8 @@
 		ast_test_status_update(test, "Failed to get jitterbuffer information\n");
 		goto cleanup;
 	}
-	if (jbinfo.frames_ooo != 10) {
-		ast_test_status_update(test, "Out of order frames: expected [%d]; actual [%ld]\n", 10, jbinfo.frames_ooo);
-	}
+	JB_INFO_PRINT_FRAME_DEBUG(jbinfo);
+	JB_INFO_NUMERIC_TEST(jbinfo.frames_ooo, 10);
 
 	result = AST_TEST_PASS;
 
@@ -483,13 +498,136 @@
 	return result;
 }
 
+AST_TEST_DEFINE(jitterbuffer_overflow)
+{
+	enum ast_test_result_state result = AST_TEST_FAIL;
+	struct jitterbuf *jb = NULL;
+	struct jb_frame frame;
+	struct jb_info jbinfo;
+	struct jb_conf jbconf;
+	int i;
+	int queued_frames = 0;
+
+	switch (cmd) {
+	case TEST_INIT:
+		info->name = "jitterbuffer_overflow";
+		info->category = "/main/jitterbuffer/";
+		info->summary = "Tests sending frames to a jitterbuffer that are late";
+		info->description = "Blahblah";
+		/* TODO: */
+		return AST_TEST_NOT_RUN;
+	case TEST_EXECUTE:
+		break;
+	}
+
+	if (!(jb = jb_new())) {
+		ast_test_status_update(test, "Failed to allocate memory for jitterbuffer\n");
+		goto cleanup;
+	}
+
+	test_jb_populate_config(&jbconf);
+	if (jb_setconf(jb, &jbconf) != JB_OK) {
+		ast_test_status_update(test, "Failed to set jitterbuffer configuration\n");
+		goto cleanup;
+	}
+
+	for (i = 0; i < 100; i++) {
+		jb_put(jb, NULL, JB_TYPE_VOICE, 20, i * 20, i * 20 + 5);
+	}
+
+	while (jb_get(jb, &frame, i * 20 + 5, DEFAULT_CODEC_INTERP_LEN) == JB_OK) {
+		++queued_frames;
+	}
+
+
+	if (jb_getinfo(jb, &jbinfo) != JB_OK) {
+		ast_test_status_update(test, "Failed to get jitterbuffer information\n");
+		goto cleanup;
+	}
+
+	JB_INFO_PRINT_FRAME_DEBUG(jbinfo);
+	JB_INFO_NUMERIC_TEST(jbinfo.frames_dropped, 49);
+	JB_INFO_NUMERIC_TEST(jbinfo.frames_out, 51);
+
+	result = AST_TEST_PASS;
+
+cleanup:
+	if (jb) {
+		/* No need to do anything - this will put all frames on the 'free' list,
+		 * so jb_destroy will dispose of them */
+		while (jb_getall(jb, &frame) == JB_OK) { }
+		jb_destroy(jb);
+	}
+	return result;
+}
+
+AST_TEST_DEFINE(jitterbuffer_resynch)
+{
+	enum ast_test_result_state result = AST_TEST_FAIL;
+	struct jitterbuf *jb = NULL;
+	struct jb_frame frame;
+	struct jb_info jbinfo;
+	struct jb_conf jbconf;
+	int i;
+
+	switch (cmd) {
+	case TEST_INIT:
+		info->name = "jitterbuffer_resynch";
+		info->category = "/main/jitterbuffer/";
+		info->summary = "Tests sending frames to a jitterbuffer that are late";
+		info->description = "Blahblah";
+		/* TODO: */
+		return AST_TEST_NOT_RUN;
+	case TEST_EXECUTE:
+		break;
+	}
+
+	if (!(jb = jb_new())) {
+		ast_test_status_update(test, "Failed to allocate memory for jitterbuffer\n");
+		goto cleanup;
+	}
+
+	test_jb_populate_config(&jbconf);
+	if (jb_setconf(jb, &jbconf) != JB_OK) {
+		ast_test_status_update(test, "Failed to set jitterbuffer configuration\n");
+		goto cleanup;
+	}
+
+	for (i = 0; i < 20; i++) {
+		jb_put(jb, NULL, JB_TYPE_VOICE, 20, i * 20, i * 20 + 5);
+	}
+
+	for (i = 0; i < 20; i++) {
+		jb_put(jb, NULL, JB_TYPE_VOICE, 20, i * 20 + 2000, i * 20 + 2005);
+	}
+
+	if (jb_getinfo(jb, &jbinfo) != JB_OK) {
+		ast_test_status_update(test, "Failed to get jitterbuffer information\n");
+		goto cleanup;
+	}
+
+	result = AST_TEST_PASS;
+
+cleanup:
+	if (jb) {
+		/* No need to do anything - this will put all frames on the 'free' list,
+		 * so jb_destroy will dispose of them */
+		while (jb_getall(jb, &frame) == JB_OK) { }
+		jb_destroy(jb);
+	}
+	return result;
+}
+
+
 static int unload_module(void)
 {
 	AST_TEST_UNREGISTER(jitterbuffer_nominal_audio_frames);
 	AST_TEST_UNREGISTER(jitterbuffer_nominal_control_frames);
 	AST_TEST_UNREGISTER(jitterbuffer_out_of_order);
 	AST_TEST_UNREGISTER(jitterbuffer_lost);
-	AST_TEST_REGISTER(jitterbuffer_late);
+	AST_TEST_UNREGISTER(jitterbuffer_late);
+	AST_TEST_UNREGISTER(jitterbuffer_overflow);
+	AST_TEST_UNREGISTER(jitterbuffer_resynch);
 	return 0;
 }
 
@@ -500,6 +638,8 @@
 	AST_TEST_REGISTER(jitterbuffer_out_of_order);
 	AST_TEST_REGISTER(jitterbuffer_lost);
 	AST_TEST_REGISTER(jitterbuffer_late);
+	AST_TEST_REGISTER(jitterbuffer_overflow);
+	AST_TEST_REGISTER(jitterbuffer_resynch);
 	return AST_MODULE_LOAD_SUCCESS;
 }
 




More information about the svn-commits mailing list