blob: 517f8ea3e65afd6cbd6a1102037e9501737777bf [file] [log] [blame]
Holger Hans Peter Freyther60582202013-11-21 21:30:23 +01001/*
2 * TypesTest.cpp Test the primitive data types
3 *
4 * Copyright (C) 2013 by Holger Hans Peter Freyther
5 *
6 * All Rights Reserved
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU Affero General Public License as published by
10 * the Free Software Foundation; either version 3 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU Affero General Public License
19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 *
21 */
22#include "bts.h"
23#include "tbf.h"
24#include "gprs_debug.h"
25
26extern "C" {
27#include <osmocom/core/application.h>
28#include <osmocom/core/msgb.h>
29#include <osmocom/core/talloc.h>
30#include <osmocom/core/utils.h>
31}
32
33void *tall_pcu_ctx;
34int16_t spoof_mnc = 0, spoof_mcc = 0;
35
36static void test_llc(void)
37{
38 {
39 uint8_t data[LLC_MAX_LEN] = {1, 2, 3, 4, };
40 uint8_t out;
41 gprs_llc llc;
42 llc.init();
43
44 OSMO_ASSERT(llc.chunk_size() == 0);
45 OSMO_ASSERT(llc.remaining_space() == LLC_MAX_LEN);
46 OSMO_ASSERT(llc.frame_length() == 0);
47
48 llc.put_frame(data, 2);
49 OSMO_ASSERT(llc.remaining_space() == LLC_MAX_LEN - 2);
50 OSMO_ASSERT(llc.frame_length() == 2);
51 OSMO_ASSERT(llc.chunk_size() == 2);
52 OSMO_ASSERT(llc.frame[0] == 1);
53 OSMO_ASSERT(llc.frame[1] == 2);
54
55 llc.append_frame(&data[3], 1);
56 OSMO_ASSERT(llc.remaining_space() == LLC_MAX_LEN - 3);
57 OSMO_ASSERT(llc.frame_length() == 3);
58 OSMO_ASSERT(llc.chunk_size() == 3);
59
60 /* consume two bytes */
61 llc.consume(&out, 1);
62 OSMO_ASSERT(llc.remaining_space() == LLC_MAX_LEN - 3);
63 OSMO_ASSERT(llc.frame_length() == 3);
64 OSMO_ASSERT(llc.chunk_size() == 2);
65
66 /* check that the bytes are as we expected */
67 OSMO_ASSERT(llc.frame[0] == 1);
68 OSMO_ASSERT(llc.frame[1] == 2);
69 OSMO_ASSERT(llc.frame[2] == 4);
70
71 /* now fill the frame */
72 llc.append_frame(data, llc.remaining_space() - 1);
73 OSMO_ASSERT(llc.fits_in_current_frame(1));
74 OSMO_ASSERT(!llc.fits_in_current_frame(2));
75 }
76}
77
Holger Hans Peter Freytherc6382dd2013-11-21 21:42:20 +010078static void test_rlc()
79{
80 {
81 struct gprs_rlc_data rlc = { 0, };
82 memset(rlc.block, 0x23, RLC_MAX_LEN);
83 uint8_t *p = rlc.prepare(20);
84 OSMO_ASSERT(p == rlc.block);
85 for (int i = 0; i < 20; ++i)
86 OSMO_ASSERT(p[i] == 0x2B);
87 for (int i = 20; i < RLC_MAX_LEN; ++i)
88 OSMO_ASSERT(p[i] == 0x0);
89 }
90}
91
Holger Hans Peter Freyther95255672013-11-23 16:18:18 +010092static void test_rlc_v_b()
93{
94 {
95 gprs_rlc_v_b vb;
96 vb.reset();
97
98 for (size_t i = 0; i < RLC_MAX_SNS/2; ++i)
99 OSMO_ASSERT(vb.is_invalid(i));
100
101 vb.mark_unacked(23);
102 OSMO_ASSERT(vb.is_unacked(23));
103
104 vb.mark_nacked(23);
105 OSMO_ASSERT(vb.is_nacked(23));
106
107 vb.mark_acked(23);
108 OSMO_ASSERT(vb.is_acked(23));
109
110 vb.mark_resend(23);
111 OSMO_ASSERT(vb.is_resend(23));
112
113 vb.mark_invalid(23);
114 OSMO_ASSERT(vb.is_invalid(23));
115 }
116}
117
Holger Hans Peter Freyther60582202013-11-21 21:30:23 +0100118int main(int argc, char **argv)
119{
120 printf("Making some basic type testing.\n");
121 test_llc();
Holger Hans Peter Freytherc6382dd2013-11-21 21:42:20 +0100122 test_rlc();
Holger Hans Peter Freyther95255672013-11-23 16:18:18 +0100123 test_rlc_v_b();
Holger Hans Peter Freyther60582202013-11-21 21:30:23 +0100124 return EXIT_SUCCESS;
125}
126
127/*
128 * stubs that should not be reached
129 */
130extern "C" {
131void l1if_pdch_req() { abort(); }
132void l1if_connect_pdch() { abort(); }
133void l1if_close_pdch() { abort(); }
134void l1if_open_pdch() { abort(); }
135}