diff options
author | lns <matzeton@googlemail.com> | 2022-05-27 22:09:58 +0200 |
---|---|---|
committer | Toni Uhlig <matzeton@googlemail.com> | 2022-08-24 11:47:46 +0200 |
commit | 71f91b5183f9a2735add7e1f0ec86f41f0b06845 (patch) | |
tree | d6808a59c8357973af9a164681f1f1737c7a725d /tests/unit | |
parent | ac24b35b1fa36f8df6d586742200a0dc2d54f59e (diff) |
Provide a generic reassembler interface.add/generic-reassembler-interface
* Shall be used for stream based protocols e.g. Kerberos, QUIC, etc.
Signed-off-by: lns <matzeton@googlemail.com>
Signed-off-by: Toni Uhlig <matzeton@googlemail.com>
Diffstat (limited to 'tests/unit')
-rw-r--r-- | tests/unit/unit.c | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/tests/unit/unit.c b/tests/unit/unit.c index 13de97a1f..152777be7 100644 --- a/tests/unit/unit.c +++ b/tests/unit/unit.c @@ -317,6 +317,76 @@ int serializeProtoUnitTest(void) /* *********************************************** */ +static int reassmbleUnitTest() +{ + u_int8_t const * org_payload = NULL; + u_int16_t org_payload_len; + char const * const packets[] = { "There", " ", "is", " ", "some", " ", "payload", " ", "on", " ", "the", " ", "wire!" }; + struct ndpi_packet_struct packet = {}; + struct ndpi_reasm reasm = {}; + size_t i, j; + + assert(ndpi_reassemble_in_progress(&reasm) == 0); + assert(ndpi_reassemble_is_complete(&reasm) != 0); + for (i = 0; i < NDPI_ARRAY_LENGTH(packets); ++i) + { + ndpi_reassemble_set_buffer_len(&reasm, reasm.buf_req + strlen(packets[i])); + assert(ndpi_reassemble_is_complete(&reasm) == 0); + assert(ndpi_reassemble_in_progress(&reasm) != 0); + + packet.payload = (u_int8_t const *)packets[i]; + packet.payload_packet_len = strlen(packets[i]); + + assert(ndpi_reassemble_payload(&reasm, &packet) == 0); + } + assert(ndpi_reassemble_in_progress(&reasm) == 0); + assert(ndpi_reassemble_is_complete(&reasm) != 0); + + ndpi_reassemble_swap_payload(&packet, &reasm, &org_payload, &org_payload_len); + + j = 0; + for (i = 0; i < NDPI_ARRAY_LENGTH(packets); ++i) + { + assert(strncmp((char *)&packet.payload[j], packets[i], strlen(packets[i])) == 0); + j += strlen(packets[i]); + } + assert(j == packet.payload_packet_len); + + ndpi_reassemble_swap_payload(&packet, &reasm, &org_payload, &org_payload_len); + + free(reasm.buf); + free(reasm.buf_bitmap); + memset(&reasm, 0, sizeof(reasm)); + + assert(ndpi_reassemble_in_progress(&reasm) == 0); + assert(ndpi_reassemble_is_complete(&reasm) != 0); + j = 0; + for (i = 0; i < NDPI_ARRAY_LENGTH(packets); ++i) + { + j += strlen(packets[i]); + } + ndpi_reassemble_set_buffer_len(&reasm, j); + assert(ndpi_reassemble_is_complete(&reasm) == 0); + for (i = NDPI_ARRAY_LENGTH(packets); i > 0; --i) + { + assert(ndpi_reassemble_is_complete(&reasm) == 0); + assert(ndpi_reassemble_in_progress(&reasm) != 0); + + j -= strlen(packets[i - 1]); + assert(ndpi_reassemble(&reasm, (u_int8_t const *)packets[i - 1], strlen(packets[i - 1]), j) == 0); + } + + free(reasm.buf); + free(reasm.buf_bitmap); + memset(&reasm, 0, sizeof(reasm)); + + printf("%30s OK\n", __FUNCTION__); + + return 0; +} + +/* *********************************************** */ + int main(int argc, char **argv) { #ifndef WIN32 int c; @@ -355,6 +425,7 @@ int main(int argc, char **argv) { /* Tests */ if (serializerUnitTest() != 0) return -1; if (serializeProtoUnitTest() != 0) return -1; + if (reassmbleUnitTest() != 0) return -1; return 0; } |