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