rlc_am_test: extend status PDU test

add full test with malformed status PDU
master
Andre Puschmann 3 years ago
parent d7204df896
commit 475c033440

@ -3376,8 +3376,11 @@ bool incorrect_status_pdu_test2()
if (not rlc1.configure(rlc_config_t::default_rlc_am_config())) { if (not rlc1.configure(rlc_config_t::default_rlc_am_config())) {
return -1; return -1;
} }
if (not rlc2.configure(rlc_config_t::default_rlc_am_config())) {
return -1;
}
// Push 5 SDUs into RLC1 // Push 10 SDUs into RLC1
const uint32_t n_sdus = 10; const uint32_t n_sdus = 10;
unique_byte_buffer_t sdu_bufs[n_sdus]; unique_byte_buffer_t sdu_bufs[n_sdus];
for (uint32_t i = 0; i < n_sdus; i++) { for (uint32_t i = 0; i < n_sdus; i++) {
@ -3387,12 +3390,15 @@ bool incorrect_status_pdu_test2()
rlc1.write_sdu(std::move(sdu_bufs[i])); rlc1.write_sdu(std::move(sdu_bufs[i]));
} }
// Read 5 PDUs from RLC1 (1 byte each) // Read 10 PDUs from RLC1 (1 byte each) and push half of them to RLC2
const uint32_t n_pdus = n_sdus; const uint32_t n_pdus = n_sdus;
byte_buffer_t pdu_bufs[n_pdus]; byte_buffer_t pdu_bufs[n_pdus];
for (uint32_t i = 0; i < n_pdus; i++) { for (uint32_t i = 0; i < n_pdus; i++) {
len = rlc1.read_pdu(pdu_bufs[i].msg, 3); // 2 byte header + 1 byte payload len = rlc1.read_pdu(pdu_bufs[i].msg, 3); // 2 byte header + 1 byte payload
pdu_bufs[i].N_bytes = len; pdu_bufs[i].N_bytes = len;
if (i < 5) {
rlc2.write_pdu(pdu_bufs[i].msg, pdu_bufs[i].N_bytes);
}
} }
TESTASSERT(0 == rlc1.get_buffer_state()); TESTASSERT(0 == rlc1.get_buffer_state());
@ -3431,14 +3437,34 @@ bool incorrect_status_pdu_test2()
rlc_am_write_status_pdu(&status_pdu, &status_buf); rlc_am_write_status_pdu(&status_pdu, &status_buf);
rlc1.write_pdu(status_buf.msg, status_buf.N_bytes); rlc1.write_pdu(status_buf.msg, status_buf.N_bytes);
// now ack all // Step timers until reordering timeout expires
status_pdu.ack_sn = n_pdus; int cnt = 5;
status_pdu.N_nack = 0; while (cnt--) {
TESTASSERT(rlc_am_is_valid_status_pdu(status_pdu)); timers.step_all();
}
// pack and write to RLC again // retransmit all outstanding PDUs
rlc_am_write_status_pdu(&status_pdu, &status_buf); for (int i = 0; i < 5; i++) {
byte_buffer_t retx;
retx.N_bytes = rlc1.read_pdu(retx.msg, 3);
rlc2.write_pdu(retx.msg, retx.N_bytes);
// Step timers until reordering timeout expires
int cnt = 5;
while (cnt--) {
timers.step_all();
}
// read status
byte_buffer_t status_buf;
status_buf.N_bytes = rlc2.read_pdu(status_buf.msg, 10);
rlc1.write_pdu(status_buf.msg, status_buf.N_bytes); rlc1.write_pdu(status_buf.msg, status_buf.N_bytes);
}
TESTASSERT(tester.sdus.size() == n_sdus);
for (uint32_t i = 0; i < tester.sdus.size(); i++) {
TESTASSERT(tester.sdus[i]->N_bytes == 1);
}
return SRSRAN_SUCCESS; return SRSRAN_SUCCESS;
} }

Loading…
Cancel
Save