blob: 95dd9002c01b37559801e0b4668ed5884e982f8a [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>
Pau Espin Pedrol042a4452018-04-17 14:31:42 +020010#include <osmocom/core/msgb.h>
Neels Hofmeyr1d85bea2017-11-18 18:29:49 +010011#include <osmocom/core/bits.h>
Harald Welte5943cbb2017-10-13 15:57:01 +020012
13#include "../../lib/syserr.h"
14#include "../../gtp/gtpie.h"
15
16static const uint8_t in[] = { 1,2,3,4,5,6 };
17static uint8_t buf[256];
18static int rc;
19
20static void test_gtpie_tlv()
21{
22 unsigned int len = 0;
23
24 printf("Testing gtpie_tlv()\n");
25
26 /* normal / successful case */
27 memset(buf, 0, sizeof(buf));
28 rc = gtpie_tlv(buf, &len, sizeof(buf), 23, sizeof(in), in);
29 OSMO_ASSERT(rc == 0);
30 OSMO_ASSERT(len == sizeof(in) + 3);
31 OSMO_ASSERT(buf[0] == 23);
Neels Hofmeyr1d85bea2017-11-18 18:29:49 +010032 OSMO_ASSERT(osmo_load16be(&buf[1]) == sizeof(in));
Harald Welte5943cbb2017-10-13 15:57:01 +020033 OSMO_ASSERT(!memcmp(buf+3, in, sizeof(in)));
34
35 /* overflow */
36 memset(buf, 0, sizeof(buf));
37 rc = gtpie_tlv(buf, &len, 4, 23, sizeof(in), in);
38 OSMO_ASSERT(rc == 1);
39}
40
41static void test_gtpie_tv0()
42{
43 unsigned int len = 0;
44
45 printf("Testing gtpie_tv0()\n");
46
47 memset(buf, 0, sizeof(buf));
48 rc = gtpie_tv0(buf, &len, sizeof(buf), 42, sizeof(in), in);
49 OSMO_ASSERT(rc == 0);
50 OSMO_ASSERT(len == sizeof(in) + 1);
51}
52
53static void test_gtpie_tv1()
54{
55 unsigned int len = 0;
56
57 printf("Testing gtpie_tv1()\n");
58
59 memset(buf, 0, sizeof(buf));
60 rc = gtpie_tv1(buf, &len, sizeof(buf), 42, 0xAD);
61 OSMO_ASSERT(rc == 0);
62 OSMO_ASSERT(len == 2);
63 OSMO_ASSERT(buf[0] == 42);
64 OSMO_ASSERT(buf[1] == 0xAD);
65}
66
67static void test_gtpie_tv2()
68{
69 unsigned int len = 0;
70
71 printf("Testing gtpie_tv2()\n");
72
73 memset(buf, 0, sizeof(buf));
74 rc = gtpie_tv2(buf, &len, sizeof(buf), 42, 0xABCD);
75 OSMO_ASSERT(rc == 0);
76 OSMO_ASSERT(len == 3);
77 OSMO_ASSERT(buf[0] == 42);
Neels Hofmeyr1d85bea2017-11-18 18:29:49 +010078 OSMO_ASSERT(osmo_load16be(&buf[1]) == 0xABCD);
Harald Welte5943cbb2017-10-13 15:57:01 +020079}
80
81static void test_gtpie_tv4()
82{
83 unsigned int len = 0;
84
85 printf("Testing gtpie_tv4()\n");
86
87 memset(buf, 0, sizeof(buf));
88 rc = gtpie_tv4(buf, &len, sizeof(buf), 42, 0xABCD0123);
89 OSMO_ASSERT(rc == 0);
90 OSMO_ASSERT(len == 5);
91 OSMO_ASSERT(buf[0] == 42);
Neels Hofmeyr1d85bea2017-11-18 18:29:49 +010092 OSMO_ASSERT(osmo_load32be(&buf[1]) == 0xABCD0123);
Harald Welte5943cbb2017-10-13 15:57:01 +020093}
94
95static void test_gtpie_tv8()
96{
97 unsigned int len = 0;
98
99 printf("Testing gtpie_tv8()\n");
100
101 memset(buf, 0, sizeof(buf));
102 rc = gtpie_tv8(buf, &len, sizeof(buf), 42, 0x0001020304050607ULL);
103 OSMO_ASSERT(rc == 0);
104 OSMO_ASSERT(len == 9);
105 OSMO_ASSERT(buf[0] == 42);
Neels Hofmeyr1d85bea2017-11-18 18:29:49 +0100106 OSMO_ASSERT(osmo_load32be(&buf[1]) == 0x00010203);
107 OSMO_ASSERT(osmo_load32be(&buf[5]) == 0x04050607);
Harald Welte5943cbb2017-10-13 15:57:01 +0200108}
109
110int main(int argc, char **argv)
111{
Pau Espin Pedrol042a4452018-04-17 14:31:42 +0200112 void *tall_ctx = talloc_named_const(NULL, 1, "Root context");
113 msgb_talloc_ctx_init(tall_ctx, 0);
114 osmo_init_logging2(tall_ctx, &log_info);
Harald Welte5943cbb2017-10-13 15:57:01 +0200115 log_set_use_color(osmo_stderr_target, 0);
116 log_set_print_filename(osmo_stderr_target, 0);
117
118 srand(time(NULL));
119
120 test_gtpie_tlv();
121 test_gtpie_tv0();
122 test_gtpie_tv1();
123 test_gtpie_tv2();
124 test_gtpie_tv4();
125 test_gtpie_tv8();
126
127 /* TODO: gtpie_decaps() */
128 /* TODO: gtpie_encaps() */
129 /* TODO: gtpie_encaps2() */
130 /* TODO: gtpie_getie(), gtpie_exist(), gtpie_get*() */
Neels Hofmeyrdabb8b42017-10-29 01:53:50 +0200131 return 0;
Harald Welte5943cbb2017-10-13 15:57:01 +0200132}