From f14ee09ed3a36b53f46aff0c899cc92931710b12 Mon Sep 17 00:00:00 2001 From: Andre Puschmann Date: Fri, 10 Aug 2018 15:50:08 +0200 Subject: [PATCH] adapt AM test to new MAC timer --- lib/test/upper/rlc_am_test.cc | 155 +++++++++++++++++++++------------- 1 file changed, 98 insertions(+), 57 deletions(-) diff --git a/lib/test/upper/rlc_am_test.cc b/lib/test/upper/rlc_am_test.cc index 00793e7d3..d9281518e 100644 --- a/lib/test/upper/rlc_am_test.cc +++ b/lib/test/upper/rlc_am_test.cc @@ -42,15 +42,21 @@ class mac_dummy_timers :public srslte::mac_interface_timers { public: - srslte::timers::timer* timer_get(uint32_t timer_id) - { - return &t; + mac_dummy_timers() : timers(8) {} + srslte::timers::timer* timer_get(uint32_t timer_id) { + return timers.get(timer_id); + } + void timer_release_id(uint32_t timer_id) { + timers.release_id(timer_id); + } + uint32_t timer_get_unique_id() { + return timers.get_unique_id(); + } + void step_all() { + timers.step_all(); } - uint32_t timer_get_unique_id(){return 0;} - void timer_release_id(uint32_t id){} - private: - srslte::timers::timer t; + srslte::timers timers; }; class rlc_am_tester @@ -166,8 +172,8 @@ void basic_test() cnfg.ul_am_rlc.poll_pdu = LIBLTE_RRC_POLL_PDU_P4; cnfg.ul_am_rlc.t_poll_retx = LIBLTE_RRC_T_POLL_RETRANSMIT_MS5; - rlc1.configure(&cnfg); - rlc2.configure(&cnfg); + assert(rlc1.configure(&cnfg) == true); + assert(rlc2.configure(&cnfg) == true); // Push 5 SDUs into RLC1 byte_buffer_t sdu_bufs[NBUFS]; @@ -250,8 +256,8 @@ void concat_test() cnfg.ul_am_rlc.poll_pdu = LIBLTE_RRC_POLL_PDU_P4; cnfg.ul_am_rlc.t_poll_retx = LIBLTE_RRC_T_POLL_RETRANSMIT_MS5; - rlc1.configure(&cnfg); - rlc2.configure(&cnfg); + assert(rlc1.configure(&cnfg) == true); + assert(rlc2.configure(&cnfg) == true); // Push 5 SDUs into RLC1 byte_buffer_t sdu_bufs[NBUFS]; @@ -319,8 +325,8 @@ void segment_test() cnfg.ul_am_rlc.poll_pdu = LIBLTE_RRC_POLL_PDU_P4; cnfg.ul_am_rlc.t_poll_retx = LIBLTE_RRC_T_POLL_RETRANSMIT_MS5; - rlc1.configure(&cnfg); - rlc2.configure(&cnfg); + assert(rlc1.configure(&cnfg) == true); + assert(rlc2.configure(&cnfg) == true); // Push 5 SDUs into RLC1 byte_buffer_t sdu_bufs[NBUFS]; @@ -405,8 +411,8 @@ void retx_test() cnfg.ul_am_rlc.poll_pdu = LIBLTE_RRC_POLL_PDU_P4; cnfg.ul_am_rlc.t_poll_retx = LIBLTE_RRC_T_POLL_RETRANSMIT_MS5; - rlc1.configure(&cnfg); - rlc2.configure(&cnfg); + assert(rlc1.configure(&cnfg) == true); + assert(rlc2.configure(&cnfg) == true); // Push 5 SDUs into RLC1 byte_buffer_t sdu_bufs[NBUFS]; @@ -436,8 +442,11 @@ void retx_test() rlc2.write_pdu(pdu_bufs[i].msg, pdu_bufs[i].N_bytes); } - // Sleep to let reordering timeout expire - usleep(10000); + // Step timers until reordering timeout expires + int cnt = 5; + while (cnt--) { + timers.step_all(); + } assert(4 == rlc2.get_buffer_state()); @@ -502,8 +511,8 @@ void resegment_test_1() cnfg.ul_am_rlc.poll_pdu = LIBLTE_RRC_POLL_PDU_P4; cnfg.ul_am_rlc.t_poll_retx = LIBLTE_RRC_T_POLL_RETRANSMIT_MS5; - rlc1.configure(&cnfg); - rlc2.configure(&cnfg); + assert(rlc1.configure(&cnfg) == true); + assert(rlc2.configure(&cnfg) == true); // Push 5 SDUs into RLC1 byte_buffer_t sdu_bufs[NBUFS]; @@ -534,8 +543,11 @@ void resegment_test_1() rlc2.write_pdu(pdu_bufs[i].msg, pdu_bufs[i].N_bytes); } - // Sleep to let reordering timeout expire - usleep(10000); + // Step timers until reordering timeout expires + int cnt = 5; + while (cnt--) { + timers.step_all(); + } assert(4 == rlc2.get_buffer_state()); @@ -612,8 +624,8 @@ void resegment_test_2() cnfg.ul_am_rlc.poll_pdu = LIBLTE_RRC_POLL_PDU_P4; cnfg.ul_am_rlc.t_poll_retx = LIBLTE_RRC_T_POLL_RETRANSMIT_MS5; - rlc1.configure(&cnfg); - rlc2.configure(&cnfg); + assert(rlc1.configure(&cnfg) == true); + assert(rlc2.configure(&cnfg) == true); // Push 5 SDUs into RLC1 byte_buffer_t sdu_bufs[NBUFS]; @@ -644,8 +656,11 @@ void resegment_test_2() rlc2.write_pdu(pdu_bufs[i].msg, pdu_bufs[i].N_bytes); } - // Sleep to let reordering timeout expire - usleep(10000); + // Step timers until reordering timeout expires + int cnt = 5; + while (cnt--) { + timers.step_all(); + } assert(4 == rlc2.get_buffer_state()); @@ -719,8 +734,8 @@ void resegment_test_3() cnfg.ul_am_rlc.poll_pdu = LIBLTE_RRC_POLL_PDU_P4; cnfg.ul_am_rlc.t_poll_retx = LIBLTE_RRC_T_POLL_RETRANSMIT_MS5; - rlc1.configure(&cnfg); - rlc2.configure(&cnfg); + assert(rlc1.configure(&cnfg) == true); + assert(rlc2.configure(&cnfg) == true); // Push 5 SDUs into RLC1 byte_buffer_t sdu_bufs[NBUFS]; @@ -751,8 +766,11 @@ void resegment_test_3() rlc2.write_pdu(pdu_bufs[i].msg, pdu_bufs[i].N_bytes); } - // Sleep to let reordering timeout expire - usleep(10000); + // Step timers until reordering timeout expires + int cnt = 5; + while (cnt--) { + timers.step_all(); + } assert(4 == rlc2.get_buffer_state()); @@ -822,8 +840,8 @@ void resegment_test_4() cnfg.ul_am_rlc.poll_pdu = LIBLTE_RRC_POLL_PDU_P4; cnfg.ul_am_rlc.t_poll_retx = LIBLTE_RRC_T_POLL_RETRANSMIT_MS5; - rlc1.configure(&cnfg); - rlc2.configure(&cnfg); + assert(rlc1.configure(&cnfg) == true); + assert(rlc2.configure(&cnfg) == true); // Push 5 SDUs into RLC1 byte_buffer_t sdu_bufs[NBUFS]; @@ -854,8 +872,11 @@ void resegment_test_4() rlc2.write_pdu(pdu_bufs[i].msg, pdu_bufs[i].N_bytes); } - // Sleep to let reordering timeout expire - usleep(10000); + // Step timers until reordering timeout expires + int cnt = 5; + while (cnt--) { + timers.step_all(); + } assert(4 == rlc2.get_buffer_state()); @@ -925,8 +946,8 @@ void resegment_test_5() cnfg.ul_am_rlc.poll_pdu = LIBLTE_RRC_POLL_PDU_P4; cnfg.ul_am_rlc.t_poll_retx = LIBLTE_RRC_T_POLL_RETRANSMIT_MS5; - rlc1.configure(&cnfg); - rlc2.configure(&cnfg); + assert(rlc1.configure(&cnfg) == true); + assert(rlc2.configure(&cnfg) == true); // Push 5 SDUs into RLC1 byte_buffer_t sdu_bufs[NBUFS]; @@ -957,8 +978,11 @@ void resegment_test_5() rlc2.write_pdu(pdu_bufs[i].msg, pdu_bufs[i].N_bytes); } - // Sleep to let reordering timeout expire - usleep(10000); + // Step timers until reordering timeout expires + int cnt = 5; + while (cnt--) { + timers.step_all(); + } assert(4 == rlc2.get_buffer_state()); @@ -1027,8 +1051,8 @@ void resegment_test_6() cnfg.ul_am_rlc.poll_pdu = LIBLTE_RRC_POLL_PDU_P4; cnfg.ul_am_rlc.t_poll_retx = LIBLTE_RRC_T_POLL_RETRANSMIT_MS5; - rlc1.configure(&cnfg); - rlc2.configure(&cnfg); + assert(rlc1.configure(&cnfg) == true); + assert(rlc2.configure(&cnfg) == true); // Push SDUs into RLC1 byte_buffer_t sdu_bufs[9]; @@ -1069,8 +1093,11 @@ void resegment_test_6() rlc2.write_pdu(pdu_bufs[i].msg, pdu_bufs[i].N_bytes); } - // Sleep to let reordering timeout expire - usleep(10000); + // Step timers until reordering timeout expires + int cnt = 5; + while (cnt--) { + timers.step_all(); + } assert(4 == rlc2.get_buffer_state()); @@ -1165,8 +1192,8 @@ void resegment_test_7() cnfg.ul_am_rlc.poll_pdu = LIBLTE_RRC_POLL_PDU_P4; cnfg.ul_am_rlc.t_poll_retx = LIBLTE_RRC_T_POLL_RETRANSMIT_MS5; - rlc1.configure(&cnfg); - rlc2.configure(&cnfg); + assert(rlc1.configure(&cnfg) == true); + assert(rlc2.configure(&cnfg) == true); // Push 2 SDUs into RLC1 byte_buffer_t sdu_bufs[N_SDU_BUFS]; @@ -1201,8 +1228,11 @@ void resegment_test_7() } } - // Sleep to let reordering timeout expire - usleep(10000); + // Step timers until reordering timeout expires + int cnt = 5; + while (cnt--) { + timers.step_all(); + } assert(12 == rlc1.get_buffer_state()); @@ -1222,7 +1252,7 @@ void resegment_test_7() } } - usleep(10000); + // Read status PDU from RLC2 assert(rlc2.get_buffer_state()); @@ -1237,7 +1267,6 @@ void resegment_test_7() assert(15 == rlc1.get_buffer_state()); - // second round of retx, forcing resegmentation byte_buffer_t retx2[4]; for (uint32_t i = 0; i < 4; i++) { @@ -1253,6 +1282,13 @@ void resegment_test_7() // check buffer states assert(0 == rlc1.get_buffer_state()); + + // Step timers until poll_retx timeout expires + cnt = 5; + while (cnt--) { + timers.step_all(); + } + assert(0 == rlc2.get_buffer_state()); // Check number of SDUs and their content @@ -1318,8 +1354,8 @@ void resegment_test_8() cnfg.ul_am_rlc.poll_pdu = LIBLTE_RRC_POLL_PDU_P4; cnfg.ul_am_rlc.t_poll_retx = LIBLTE_RRC_T_POLL_RETRANSMIT_MS5; - rlc1.configure(&cnfg); - rlc2.configure(&cnfg); + assert(rlc1.configure(&cnfg) == true); + assert(rlc2.configure(&cnfg) == true); // Push 2 SDUs into RLC1 byte_buffer_t sdu_bufs[N_SDU_BUFS]; @@ -1354,8 +1390,11 @@ void resegment_test_8() } } - // Sleep to let reordering timeout expire - usleep(10000); + // Step timers until reordering timeout expires + int cnt = 5; + while (cnt--) { + timers.step_all(); + } assert(12 == rlc1.get_buffer_state()); @@ -1375,7 +1414,11 @@ void resegment_test_8() } } - usleep(20000); + // Step timers until reordering timeout expires + cnt = 7; + while (cnt--) { + timers.step_all(); + } // Read status PDU from RLC2 assert(rlc2.get_buffer_state()); @@ -1408,8 +1451,7 @@ void resegment_test_8() // Check number of SDUs and their content assert(tester.n_sdus == N_SDU_BUFS); - for(int i=0; iN_bytes == sdu_size); for(uint32_t j=0;jmsg[j] == i); @@ -1449,7 +1491,7 @@ void reset_test() cnfg.ul_am_rlc.poll_pdu = LIBLTE_RRC_POLL_PDU_P4; cnfg.ul_am_rlc.t_poll_retx = LIBLTE_RRC_T_POLL_RETRANSMIT_MS5; - rlc1.configure(&cnfg); + assert(rlc1.configure(&cnfg) == true); // Push 1 SDU of size 10 into RLC1 byte_buffer_t sdu_buf; @@ -1499,7 +1541,7 @@ void stop_test() cnfg.ul_am_rlc.poll_pdu = LIBLTE_RRC_POLL_PDU_P4; cnfg.ul_am_rlc.t_poll_retx = LIBLTE_RRC_T_POLL_RETRANSMIT_MS5; - rlc1.configure(&cnfg); + assert(rlc1.configure(&cnfg) == true); // start thread reading ul_writer writer(&rlc1); @@ -1542,7 +1584,6 @@ int main(int argc, char **argv) { resegment_test_6(); byte_buffer_pool::get_instance()->cleanup(); - resegment_test_7(); byte_buffer_pool::get_instance()->cleanup();