blob: e3bc2e02f057f3d2e064c6f3b024be39b981049e [file] [log] [blame]
Harald Welte5943cbb2017-10-13 15:57:01 +02001#include <stdio.h>
2#include <stdlib.h>
3#include <string.h>
4#include <unistd.h>
5#include <time.h>
6
7#include <osmocom/core/utils.h>
8#include <osmocom/core/application.h>
9#include <osmocom/core/logging.h>
Neels Hofmeyr1d85bea2017-11-18 18:29:49 +010010#include <osmocom/core/bits.h>
Harald Welte5943cbb2017-10-13 15:57:01 +020011
12#include "../../lib/syserr.h"
13#include "../../gtp/gtpie.h"
14
15static const uint8_t in[] = { 1,2,3,4,5,6 };
16static uint8_t buf[256];
17static int rc;
18
19static void test_gtpie_tlv()
20{
21 unsigned int len = 0;
22
23 printf("Testing gtpie_tlv()\n");
24
25 /* normal / successful case */
26 memset(buf, 0, sizeof(buf));
27 rc = gtpie_tlv(buf, &len, sizeof(buf), 23, sizeof(in), in);
28 OSMO_ASSERT(rc == 0);
29 OSMO_ASSERT(len == sizeof(in) + 3);
30 OSMO_ASSERT(buf[0] == 23);
Neels Hofmeyr1d85bea2017-11-18 18:29:49 +010031 OSMO_ASSERT(osmo_load16be(&buf[1]) == sizeof(in));
Harald Welte5943cbb2017-10-13 15:57:01 +020032 OSMO_ASSERT(!memcmp(buf+3, in, sizeof(in)));
33
34 /* overflow */
35 memset(buf, 0, sizeof(buf));
36 rc = gtpie_tlv(buf, &len, 4, 23, sizeof(in), in);
37 OSMO_ASSERT(rc == 1);
38}
39
40static void test_gtpie_tv0()
41{
42 unsigned int len = 0;
43
44 printf("Testing gtpie_tv0()\n");
45
46 memset(buf, 0, sizeof(buf));
47 rc = gtpie_tv0(buf, &len, sizeof(buf), 42, sizeof(in), in);
48 OSMO_ASSERT(rc == 0);
49 OSMO_ASSERT(len == sizeof(in) + 1);
50}
51
52static void test_gtpie_tv1()
53{
54 unsigned int len = 0;
55
56 printf("Testing gtpie_tv1()\n");
57
58 memset(buf, 0, sizeof(buf));
59 rc = gtpie_tv1(buf, &len, sizeof(buf), 42, 0xAD);
60 OSMO_ASSERT(rc == 0);
61 OSMO_ASSERT(len == 2);
62 OSMO_ASSERT(buf[0] == 42);
63 OSMO_ASSERT(buf[1] == 0xAD);
64}
65
66static void test_gtpie_tv2()
67{
68 unsigned int len = 0;
69
70 printf("Testing gtpie_tv2()\n");
71
72 memset(buf, 0, sizeof(buf));
73 rc = gtpie_tv2(buf, &len, sizeof(buf), 42, 0xABCD);
74 OSMO_ASSERT(rc == 0);
75 OSMO_ASSERT(len == 3);
76 OSMO_ASSERT(buf[0] == 42);
Neels Hofmeyr1d85bea2017-11-18 18:29:49 +010077 OSMO_ASSERT(osmo_load16be(&buf[1]) == 0xABCD);
Harald Welte5943cbb2017-10-13 15:57:01 +020078}
79
80static void test_gtpie_tv4()
81{
82 unsigned int len = 0;
83
84 printf("Testing gtpie_tv4()\n");
85
86 memset(buf, 0, sizeof(buf));
87 rc = gtpie_tv4(buf, &len, sizeof(buf), 42, 0xABCD0123);
88 OSMO_ASSERT(rc == 0);
89 OSMO_ASSERT(len == 5);
90 OSMO_ASSERT(buf[0] == 42);
Neels Hofmeyr1d85bea2017-11-18 18:29:49 +010091 OSMO_ASSERT(osmo_load32be(&buf[1]) == 0xABCD0123);
Harald Welte5943cbb2017-10-13 15:57:01 +020092}
93
94static void test_gtpie_tv8()
95{
96 unsigned int len = 0;
97
98 printf("Testing gtpie_tv8()\n");
99
100 memset(buf, 0, sizeof(buf));
101 rc = gtpie_tv8(buf, &len, sizeof(buf), 42, 0x0001020304050607ULL);
102 OSMO_ASSERT(rc == 0);
103 OSMO_ASSERT(len == 9);
104 OSMO_ASSERT(buf[0] == 42);
Neels Hofmeyr1d85bea2017-11-18 18:29:49 +0100105 OSMO_ASSERT(osmo_load32be(&buf[1]) == 0x00010203);
106 OSMO_ASSERT(osmo_load32be(&buf[5]) == 0x04050607);
Harald Welte5943cbb2017-10-13 15:57:01 +0200107}
108
109int main(int argc, char **argv)
110{
111 osmo_init_logging(&log_info);
112 log_set_use_color(osmo_stderr_target, 0);
113 log_set_print_filename(osmo_stderr_target, 0);
114
115 srand(time(NULL));
116
117 test_gtpie_tlv();
118 test_gtpie_tv0();
119 test_gtpie_tv1();
120 test_gtpie_tv2();
121 test_gtpie_tv4();
122 test_gtpie_tv8();
123
124 /* TODO: gtpie_decaps() */
125 /* TODO: gtpie_encaps() */
126 /* TODO: gtpie_encaps2() */
127 /* TODO: gtpie_getie(), gtpie_exist(), gtpie_get*() */
Neels Hofmeyrdabb8b42017-10-29 01:53:50 +0200128 return 0;
Harald Welte5943cbb2017-10-13 15:57:01 +0200129}