summaryrefslogtreecommitdiff
path: root/cesar/cp/test/src/test_interf.c
diff options
context:
space:
mode:
Diffstat (limited to 'cesar/cp/test/src/test_interf.c')
-rw-r--r--cesar/cp/test/src/test_interf.c341
1 files changed, 341 insertions, 0 deletions
diff --git a/cesar/cp/test/src/test_interf.c b/cesar/cp/test/src/test_interf.c
new file mode 100644
index 0000000000..923be92301
--- /dev/null
+++ b/cesar/cp/test/src/test_interf.c
@@ -0,0 +1,341 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2007 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/test/test_interf.c
+ * \brief unit tests for interf module
+ * \ingroup cp_test
+ */
+
+#include "common/std.h"
+#include "cp/test/inc/test_interf.h"
+
+/*
+ * Test de void interf_init(void);
+ */
+int interf_init_test (void)
+{
+ return interf_init ();
+}
+
+/*
+ * Test de interf_received_frag_test
+ */
+int interf_received_frag_test (void)
+{
+ interf_buffer_t buf_test[5];
+ msg_mme_t *msg;
+ int i;
+
+ interf_init ();
+ // init the buf
+ bzero (buf_test, sizeof(buf_test));
+ // Test add of a 5 fragments message
+ for(i=0; i<5; i++)
+ {
+ msg = &buf_test[i].msg;
+ msg_set_mme_const_values(msg);
+ bzero(msg->osa, 6);
+ msg->fmi.nf_mi = 4; // Number of fragments for message
+ msg->fmi.fn_mi = i; // fragment number
+ msg->fmi.fmsn = 32;
+ msg->mm_type = TEST_MSG_NUM;
+ if(i != msg->fmi.nf_mi)
+ {
+ if(interf_received_frag(msg) != NULL) return 1;
+ }
+ else if(interf_received_frag(msg) == NULL) return 2;
+ }
+ // check that BufTest structure is updated correctly
+ for(i=0; i < 3; i++)
+ {
+ if(buf_test[i].next_msg != &buf_test[i+1].msg ) return 3;
+ }
+ // Test filling the receiving struct
+ interf_init();
+ for(i=0 ; i < INTERF_MAX_FRAG_MSG_SIM ; i++)
+ {
+ msg = &buf_test[i].msg;
+ bzero(msg->osa, 6);
+ msg->fmi.nf_mi = 4; // Number of fragments for message
+ msg->fmi.fn_mi = i; // fragment number
+ msg->fmi.fmsn = i;
+ if(interf_received_frag(msg) != NULL) return 4;
+ }
+ // and then test adding others fragments
+ for(i=1 ; i<5 ; i++)
+ {
+ msg = &buf_test[i].msg;
+ bzero(msg->osa, 6);
+ msg->fmi.nf_mi = 4; // Number of fragments for message
+ msg->fmi.fn_mi = i; // fragment number
+ msg->fmi.fmsn = 0;
+ if(i != msg->fmi.nf_mi)
+ {
+ if(interf_received_frag(msg) != NULL) return 5;
+ }
+ else if(interf_received_frag(msg) == NULL) return 6;
+ }
+ return 0;
+}
+
+/*
+ * Test de void interf_send(msg_mme_t *msg)
+ *
+ */
+int interf_send_test (void)
+{
+ interf_buffer_t buffer;
+ msg_mme_t *msg;
+ msg_param_t msg_param;
+
+ msg = &buffer.msg;
+ msg_param.mnbf = 1;
+ msg_set_mme_const_values (msg);
+ interf_send (msg, 80, msg_param, 0xFF);
+ return 0;
+}
+
+/*
+ * Test de void interf_received(void)
+ *
+ */
+int interf_received_test (void)
+{
+ interf_buffer_t buf_test;
+ msg_mme_t *msg;
+
+ msg = &buf_test.msg;
+ msg_set_mme_const_values (msg);
+ msg->mm_type = TEST_MSG_NUM;
+
+ interf_init();
+
+ interf_receive(0, 0, (u8*) msg, 0, 0);
+
+ interf_received ();
+ return 0;
+}
+
+
+/*
+ * test de void interf_release_buf(msg_mme_t *msg)
+ * et des fonctions attachées
+ */
+#define MY_CONST_ 9 // doit etre inférieure a la taille d'une mailbox
+int interf_release_buf_test (void)
+{
+ interf_buffer_t buf[MY_CONST_];
+ msg_mme_t *msg[MY_CONST_];
+ int i;
+
+ // init all the interf module
+ interf_init ();
+ bzero (&buf, sizeof(buf));
+
+ // init the messages for test
+ for(i=0 ; i<MY_CONST_ ; i++)
+ {
+ msg[i] = &buf[i].msg;
+ bzero(msg[i]->osa, sizeof(msg[i]->osa));
+ msg_set_mme_const_values(msg[i]);
+ msg[i]->mm_type = 4; // cc_backup_appoint.req message,to STA
+ }
+
+ // empile les message dans la fifo
+ for(i=0 ; i<MY_CONST_ ; i++)
+ {
+ interf_release_buf(msg[i]);
+ }
+ // et hop on vide !
+ interf_buf_to_release();
+
+ return 0;
+}
+
+/*
+ * test de la fonction de purge
+ */
+int interf_msg_purge_test (void)
+{
+ interf_buffer_t buf_test;
+ msg_mme_t *msg;
+
+ // init all the interf module
+ interf_init ();
+ bzero (&buf_test, sizeof(buf_test));
+
+ // create a fragment of message
+ msg = &buf_test.msg;
+ msg_set_mme_const_values(msg);
+ bzero(msg->osa, 6);
+ msg->fmi.nf_mi = 4; // Number of fragments for message
+ msg->fmi.fn_mi = 1; // fragment number
+ msg->fmi.fmsn = 32;
+ // add this fragment in the fifo
+ //interf_receive(msg);
+ interf_receive(0, 0, (u8*) msg, 0, 0);
+
+ interf_received();
+ cyg_thread_delay( (FragMMI_ReassemblyTimeOut_sec + 1) * 100);
+ interf_msg_purge();
+ return 0;
+}
+
+/*
+ * Test de l'ensemble du module
+ *
+ */
+#define NB_MSG_TEST 9
+
+int interf_module_test (void)
+{
+/*
+ interf_buffer_t buf[NB_MSG_TEST];
+ msg_mme_t *msg[NB_MSG_TEST], *test;
+ int i;
+
+ for (i=0 ; i<NB_MSG_TEST ; i++)
+ {
+ msg[i] = &buf[i].msg;
+ }
+
+ // init all the interf module
+ interf_init ();
+ bzero (&buf, sizeof(buf));
+
+ // init the messages for test
+ for(i=0 ; i<NB_MSG_TEST ; i++)
+ {
+ bzero(msg[i]->osa, sizeof(msg[i]->osa));
+ msg_set_mme_const_values(msg[i]);
+ msg[i]->mm_type = TEST_MSG_NUM;
+ }
+ // create a test message
+ msg[1]->mm_type = TEST_MSG_NUM;
+
+ // create a 3 parts fragmented message
+
+ msg[2]->mm_type = TEST_MSG_NUM;
+ msg[2]->fmi.nf_mi = 2;
+ msg[2]->fmi.fn_mi = 0;
+ msg[2]->fmi.fmsn = 45;
+
+ msg[4]->mm_type = TEST_MSG_NUM;
+ msg[4]->fmi.nf_mi = 2;
+ msg[4]->fmi.fn_mi = 1;
+ msg[4]->fmi.fmsn = 45;
+
+ msg[7]->mm_type = TEST_MSG_NUM;
+ msg[7]->fmi.nf_mi = 2;
+ msg[7]->fmi.fn_mi = 2;
+ msg[7]->fmi.fmsn = 45;
+
+ // receive the message at the STA
+ for(i=0 ; i<NB_MSG_TEST ; i++)
+ {
+ interf_receive(msg[i]);
+ }
+
+ // simulate the sta event,
+ interf_received();
+
+ // the msg should now be in the STA fifo, so ask for it
+ test = interf_msg_get_last(MSG_STA);
+ // check that we have the same msg
+ if(test != msg[8]) return 1;
+
+ // the previous msg should be the first part of frag msg
+ test = interf_msg_get_previous(MSG_STA);
+ if(test != msg[2]) return 2;
+
+ // then we should have the other complete msg
+ test = interf_msg_get_previous(MSG_STA);
+ if(test != msg[6]) return 3;
+ test = interf_msg_get_previous(MSG_STA);
+ if(test != msg[5]) return 4;
+ test = interf_msg_get_previous(MSG_STA);
+ if(test != msg[3]) return 5;
+ test = interf_msg_get_previous(MSG_STA);
+ if(test != msg[1]) return 6;
+ test = interf_msg_get_previous(MSG_STA);
+ if(test != msg[0]) return 7;
+
+ // and here, we are at the end of the fifo
+ test = interf_msg_get_previous(MSG_STA);
+ if(test != NULL) return 8;
+ // test it once again to discover an assert ...
+ test = interf_msg_get_previous(MSG_STA);
+ if(test != NULL) return 9;
+
+ // then we try to get a message from it type
+ test = interf_msg_get_last_of_type(MSG_STA, 9);
+ if(test != msg[2]) return 10;
+
+ // remove one before it, and ask again
+ if( ! interf_msg_remove(MSG_STA, msg[3])) return 11;
+ test = interf_msg_get_last_of_type(MSG_STA, 9);
+ if(test != msg[2]) return 12;
+
+ // and we ask for the others parts of the message
+ test = interf_msg_get_next_part(test);
+ if(test != msg[4]) return 13;
+
+ test = interf_msg_get_next_part(test);
+ if(test != msg[7]) return 14;
+
+ // there is no more part
+ test = interf_msg_get_next_part(test);
+ if(test != NULL) return 15;
+
+ // then we try (again) to get a message from it type
+ test = interf_msg_get_last_of_type(MSG_STA, 9);
+ if(test != msg[2]) return 16;
+ // we ask for previous message of this type
+ test = interf_msg_get_previous_of_type(MSG_STA, 9);
+ if(test != msg[1]) return 17;
+*/
+ return 0;
+}
+
+struct interf_test_t
+{
+ int(*func) (void);
+ char func_name[30];
+};
+
+int interf_test (bool verbose)
+{
+ unsigned int i;
+ int res, return_value = 0;
+ struct interf_test_t my_test[]=
+ {
+ { interf_init_test, "interf_init" },
+ { interf_received_frag_test, "interf_received_frag" },
+ { interf_received_test, "inter_received"},
+ { interf_send_test, "interf_send" },
+ { interf_received_test, "interf_received" },
+ { interf_release_buf_test, "interf_release_buf" },
+ { interf_msg_purge_test, "interf_msg_purge" }
+ //{ interf_module_test, "interf : module" }
+ };
+
+ printf ("test du module interf\n");
+ for (i=0 ; i<COUNT(my_test) ; i++)
+ {
+ res = my_test[i].func ();
+ if(verbose || (res != 0))
+ {
+ printf (" %-50s", my_test[i].func_name);
+ if (res == 0) printf ("OK\n");
+ else printf ("FAILED : %i\n", res);
+ }
+ if(res != 0) return_value++;
+ }
+ if (i != COUNT(my_test)) return 1;
+ return return_value;
+}