aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorDaniel Willmann <dwillmann@sysmocom.de>2021-03-17 16:24:15 +0100
committerDaniel Willmann <dwillmann@sysmocom.de>2021-03-18 14:20:35 +0100
commit2fa0e9df68ce45d5afa234ccb184b8d76560e1cc (patch)
tree0037a3afadd1f663e4abab5c42725fe1c947fb20 /tests
parentd290439b4afe928e7e341540cb92f1abf36a82cb (diff)
tlv: Fix length returned by t{l16,16l}v_put
Every other function returns a pointer to the first byte after the tlv that was just written. tl16v seems to be a copy and paste error from tlv16 above and t16lv seems to count the 16-bit tag twice. The new tests verify that the return value of *_put(buf, tag, len, val) points to buf + *_GROSS_LEN(len). Change-Id: I268a7e11fb5dce67ce1bd7974ab86c4d2bd002f7
Diffstat (limited to 'tests')
-rw-r--r--tests/tlv/tlv_test.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/tests/tlv/tlv_test.c b/tests/tlv/tlv_test.c
index 3b4f441c..fdd15ab0 100644
--- a/tests/tlv/tlv_test.c
+++ b/tests/tlv/tlv_test.c
@@ -423,6 +423,37 @@ static void test_tlv_parser_bounds()
OSMO_ASSERT(TLVP_VAL(&dec, 0x23) == NULL);
}
+static void test_tlv_lens()
+{
+ uint16_t buf_len;
+ uint8_t buf[512];
+ uint8_t val[512] = { 0 };
+ uint16_t x;
+
+
+ for (x = 0; x < 16; x++) {
+ buf_len = lv_put(buf, x, val) - buf;
+ OSMO_ASSERT(buf_len == LV_GROSS_LEN(x));
+ buf_len = tlv_put(buf, 0x23, x, val) - buf;
+ OSMO_ASSERT(buf_len == TLV_GROSS_LEN(x));
+ buf_len = tlv16_put(buf, 0x23, x, (uint16_t *) val) - buf;
+ OSMO_ASSERT(buf_len == TLV16_GROSS_LEN(x));
+ buf_len = tl16v_put(buf, 0x23, x, val) - buf;
+ OSMO_ASSERT(buf_len == TL16V_GROSS_LEN(x));
+ buf_len = t16lv_put(buf, 0x2342, x, val) - buf;
+ OSMO_ASSERT(buf_len == T16LV_GROSS_LEN(x));
+ buf_len = tvlv_put(buf, 0x23, x, val) - buf;
+ OSMO_ASSERT(buf_len == TVLV_GROSS_LEN(x));
+ }
+
+ for (x = 250; x < 300; x++) {
+ buf_len = tl16v_put(buf, 0x23, x, val) - buf;
+ OSMO_ASSERT(buf_len == TL16V_GROSS_LEN(x));
+ buf_len = tvlv_put(buf, 0x23, x, val) - buf;
+ OSMO_ASSERT(buf_len == TVLV_GROSS_LEN(x));
+ }
+}
+
int main(int argc, char **argv)
{
//osmo_init_logging2(ctx, &info);
@@ -431,6 +462,7 @@ int main(int argc, char **argv)
test_tlv_repeated_ie();
test_tlv_encoder();
test_tlv_parser_bounds();
+ test_tlv_lens();
printf("Done.\n");
return EXIT_SUCCESS;