changeset 274:f6b5120d5150

Completed test
author Sebastien Decugis <sdecugis@nict.go.jp>
date Wed, 17 Dec 2008 16:37:43 +0900
parents 37c6a1be18cb
children b8e693f37c3b
files waaad/tests/testdisp.c
diffstat 1 files changed, 47 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- a/waaad/tests/testdisp.c	Wed Dec 17 15:54:28 2008 +0900
+++ b/waaad/tests/testdisp.c	Wed Dec 17 16:37:43 2008 +0900
@@ -57,6 +57,10 @@
 static pthread_cond_t  test_cnd = PTHREAD_COND_INITIALIZER;
 static uint32_t cb_called = 0;
 
+static dict_object_t * cmd1r = NULL;
+static dict_object_t * cmd1a = NULL;
+
+
 #define DEF_CB_DISP( NR, RET )						\
 static int disp_cb ## NR ( msg_t * msg, msg_avp_t * avp, int handled )	\
 {									\
@@ -79,6 +83,13 @@
 DEF_CB_DISP( 9, DISP_CBRET_CONTINUE );
 DEF_CB_DISP(10, DISP_CBRET_HANDLED_STOP );
 
+static void cbans(void * data, msg_t ** answer)
+{
+	CHECK( 0, pthread_mutex_lock(&test_mtx) );
+	cb_called |= 1<< 31 ;
+	CHECK( 0, pthread_cond_signal(&test_cnd) );
+	CHECK( 0, pthread_mutex_unlock(&test_mtx) );
+}
 /* Create a new message to pass to dispatch module */
 static void dispatch_new_message(
 		int appid, 
@@ -111,6 +122,21 @@
 		CHECK( 0, msg_avp_add ( msg, MSG_BRW_LAST_CHILD, avp ) );
 	}
 	
+	/* If message is an answer, create also the matching request */
+	if (cmd == cmd1a) {
+		msg_t * qry = NULL;
+		
+		CHECK( 0, msg_new ( cmd1r, 0, &qry ) );
+		
+		CHECK( 0, msg_send( &qry, cbans, NULL) );
+		
+		/* Now retrieve the message in the outgoing queue, the rt_out thread is not running */
+		CHECK( 0, meq_get( g_meq_outgoing, &qry ) );
+		
+		/* Associate with the message */
+		CHECK( 0, msg_answ_associate( msg, qry ) );
+	}
+	
 	/* reset cb_called */
 	cb_called = 0;
 	
@@ -135,14 +161,6 @@
 		if ( (yes & cb_called) == yes )
 			break;
 		
-		#if 0
-		fprintf(stderr,
-				"%s:%-4d: log ( cb_called == %d )\n",
-				__FILE__,
-				__LINE__,
-				cb_called);
-		#endif
-		
 		CHECK( 0, pthread_cond_wait( &test_cnd, &test_mtx ) );
 	} while (1);
 	
@@ -161,8 +179,6 @@
 	dict_object_t * app1 = NULL;
 	dict_object_t * app2 = NULL;
 	dict_object_t * app3 = NULL;
-	dict_object_t * cmd1r = NULL;
-	dict_object_t * cmd1a = NULL;
 	dict_object_t * cmd2 = NULL;
 	dict_object_t * avp1 = NULL;
 	dict_object_t * avp2 = NULL;
@@ -174,6 +190,9 @@
 	INIT_WAAAD();
 	CONFIG_WAAAD();
 	
+	/* Kill routing module threads, so they don't interfere */
+	CHECK( 0, rt_fini() );
+	
 	/* Create the dictionary objects */
 	{
 		{
@@ -205,7 +224,7 @@
 				T_CID2, 
 				"Command 2 for test", 
 				CMD_FLAG_PROXIABLE | CMD_FLAG_REQUEST, 
-				CMD_FLAG_PROXIABLE 
+				CMD_FLAG_PROXIABLE | CMD_FLAG_REQUEST
 				};
 			CHECK( 0, dict_new ( DICT_COMMAND, &cmd_data1_r , NULL,   &cmd1r ) );
 			CHECK( 0, dict_new ( DICT_COMMAND, &cmd_data1_a , NULL,   &cmd1a ) );
@@ -347,12 +366,20 @@
 			dict_object_t * avp2;
 			int val2;
 			int cb[11]; /* 0: may, 1: must, -1: must not */
+			int cba;
 		} test_matrix[] = {
-		/*	appid	cmd	avp1	val1	avp2	val2	cb0,cb1,cb2,cb3,cb4,cb5,cb6,cb7,cb8,cb9,cb10 */
-		 {	0,	cmd1r,	avp1,	0,	NULL,	0,	{ 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }}
-		,{	0,	cmd1r,	avp1,	T_EV1,	avp1,	0,	{ 1, -1, -1, -1, -1, -1, -1, -1,  1, -1, -1 }}
-		,{	0,	cmd1r,	avp1,	T_EV1,	avp1,	T_EV2,	{ 1, -1, -1, -1, -1, -1, -1, -1,  1,  1, -1 }}
-		,{	0,	cmd1r,	avp1,	T_EV2,	avp1,	T_EV1,	{ 1, -1, -1, -1, -1, -1, -1, -1,  1,  1, -1 }}
+		/*	appid	cmd	avp1	val1	avp2	val2	cb0,cb1,cb2,cb3,cb4,cb5,cb6,cb7,cb8,cb9,cb10 	cba*/
+		 {	0,	cmd1r,	avp1,	0,	NULL,	0,	{ 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },	 0 }
+		,{	0,	cmd1r,	avp1,	T_EV1,	avp1,	0,	{ 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },	 0 }
+		,{	0,	cmd1r,	avp1,	T_EV1,	avp1,	T_EV2,	{ 1, -1, -1, -1, -1, -1, -1, -1, -1,  1, -1 },	 0 }
+		,{	0,	cmd1r,	avp1,	T_EV2,	avp1,	T_EV1,	{ 1, -1, -1, -1, -1, -1, -1, -1, -1,  1, -1 },	 0 }
+		,{	0,	cmd1a,	avp1,	T_EV2,	avp1,	T_EV1,	{ 1, -1, -1, -1, -1, -1, -1, -1,  1,  1, -1 },	 1 }
+		,{	0,	cmd2,	avp1,	T_EV2,	avp1,	T_EV1,	{ 1, -1, -1, -1,  1, -1, -1, -1, -1,  1, -1 },	 0 }
+		,{	T_AID1,	cmd2,	avp1,	T_EV2,	avp1,	T_EV1,	{ 1,  1, -1, -1,  1, -1, -1, -1, -1,  1, -1 },	 0 }
+		,{	T_AID2,	cmd2,	avp1,	T_EV2,	avp1,	T_EV1,	{ 1, -1,  1, -1,  1, -1, -1, -1, -1,  1, -1 },	 0 }
+		,{	T_AID2,	cmd1a,	avp1,	T_EV2,	avp1,	T_EV1,	{ 1, -1,  1, -1, -1,  1, -1, -1,  1,  1, -1 },	 1 }
+		,{	T_AID2,	cmd1r,	avp1,	T_EV2,	avp1,	T_EV1,	{ 1, -1,  1, -1, -1, -1,  1,  1, -1,  1, -1 },	 0 }
+		,{	T_AID3,	cmd1a,	avp2,	T_EV2,	avp1,	T_EV2,	{ 1, -1, -1, -1, -1, -1, -1, -1, -1,  0,  1 },	 1 }
 		};
 		int i;
 		
@@ -370,6 +397,10 @@
 					}
 				}
 			}
+			if (test_matrix[i].cba)
+				mask_yes |= 1 << 31;
+			else
+				mask_no |= 1 << 31;
 			
 			#if 0
 			fprintf(stderr,
@@ -390,13 +421,6 @@
 			
 			wait_for_val( mask_yes, mask_no );
 			
-			#if 0
-			fprintf(stderr,
-					"%s:%-4d: Test line %d passed\n",
-					__FILE__,
-					__LINE__,
-					i);
-			#endif
 		}
 	}
 	
"Welcome to our mercurial repository"