aboutsummaryrefslogtreecommitdiffstats
path: root/tests/gtp/gtpie_test.c
blob: e3bc2e02f057f3d2e064c6f3b024be39b981049e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <time.h>

#include <osmocom/core/utils.h>
#include <osmocom/core/application.h>
#include <osmocom/core/logging.h>
#include <osmocom/core/bits.h>

#include "../../lib/syserr.h"
#include "../../gtp/gtpie.h"

static const uint8_t in[] = { 1,2,3,4,5,6 };
static uint8_t buf[256];
static int rc;

static void test_gtpie_tlv()
{
	unsigned int len = 0;

	printf("Testing gtpie_tlv()\n");

	/* normal / successful case */
	memset(buf, 0, sizeof(buf));
	rc = gtpie_tlv(buf, &len, sizeof(buf), 23, sizeof(in), in);
	OSMO_ASSERT(rc == 0);
	OSMO_ASSERT(len == sizeof(in) + 3);
	OSMO_ASSERT(buf[0] == 23);
	OSMO_ASSERT(osmo_load16be(&buf[1]) == sizeof(in));
	OSMO_ASSERT(!memcmp(buf+3, in, sizeof(in)));

	/* overflow */
	memset(buf, 0, sizeof(buf));
	rc = gtpie_tlv(buf, &len, 4, 23, sizeof(in), in);
	OSMO_ASSERT(rc == 1);
}

static void test_gtpie_tv0()
{
	unsigned int len = 0;

	printf("Testing gtpie_tv0()\n");

	memset(buf, 0, sizeof(buf));
	rc = gtpie_tv0(buf, &len, sizeof(buf), 42, sizeof(in), in);
	OSMO_ASSERT(rc == 0);
	OSMO_ASSERT(len == sizeof(in) + 1);
}

static void test_gtpie_tv1()
{
	unsigned int len = 0;

	printf("Testing gtpie_tv1()\n");

	memset(buf, 0, sizeof(buf));
	rc = gtpie_tv1(buf, &len, sizeof(buf), 42, 0xAD);
	OSMO_ASSERT(rc == 0);
	OSMO_ASSERT(len == 2);
	OSMO_ASSERT(buf[0] == 42);
	OSMO_ASSERT(buf[1] == 0xAD);
}

static void test_gtpie_tv2()
{
	unsigned int len = 0;

	printf("Testing gtpie_tv2()\n");

	memset(buf, 0, sizeof(buf));
	rc = gtpie_tv2(buf, &len, sizeof(buf), 42, 0xABCD);
	OSMO_ASSERT(rc == 0);
	OSMO_ASSERT(len == 3);
	OSMO_ASSERT(buf[0] == 42);
	OSMO_ASSERT(osmo_load16be(&buf[1]) == 0xABCD);
}

static void test_gtpie_tv4()
{
	unsigned int len = 0;

	printf("Testing gtpie_tv4()\n");

	memset(buf, 0, sizeof(buf));
	rc = gtpie_tv4(buf, &len, sizeof(buf), 42, 0xABCD0123);
	OSMO_ASSERT(rc == 0);
	OSMO_ASSERT(len == 5);
	OSMO_ASSERT(buf[0] == 42);
	OSMO_ASSERT(osmo_load32be(&buf[1]) == 0xABCD0123);
}

static void test_gtpie_tv8()
{
	unsigned int len = 0;

	printf("Testing gtpie_tv8()\n");

	memset(buf, 0, sizeof(buf));
	rc = gtpie_tv8(buf, &len, sizeof(buf), 42, 0x0001020304050607ULL);
	OSMO_ASSERT(rc == 0);
	OSMO_ASSERT(len == 9);
	OSMO_ASSERT(buf[0] == 42);
	OSMO_ASSERT(osmo_load32be(&buf[1]) == 0x00010203);
	OSMO_ASSERT(osmo_load32be(&buf[5]) == 0x04050607);
}

int main(int argc, char **argv)
{
	osmo_init_logging(&log_info);
	log_set_use_color(osmo_stderr_target, 0);
	log_set_print_filename(osmo_stderr_target, 0);

	srand(time(NULL));

	test_gtpie_tlv();
	test_gtpie_tv0();
	test_gtpie_tv1();
	test_gtpie_tv2();
	test_gtpie_tv4();
	test_gtpie_tv8();

	/* TODO: gtpie_decaps() */
	/* TODO: gtpie_encaps() */
	/* TODO: gtpie_encaps2() */
	/* TODO: gtpie_getie(), gtpie_exist(), gtpie_get*() */
	return 0;
}