1 // Copyright 2011 Juri Glass, Mathias Runge, Nadim El Sayed
2 // DAI-Labor, TU-Berlin
3 //
4 // This file is part of libSML.
5 //
6 // libSML is free software: you can redistribute it and/or modify
7 // it under the terms of the GNU General Public License as published by
8 // the Free Software Foundation, either version 3 of the License, or
9 // (at your option) any later version.
10 //
11 // libSML is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 // GNU General Public License for more details.
15 //
16 // You should have received a copy of the GNU General Public License
17 // along with libSML.  If not, see <http://www.gnu.org/licenses/>.
18 
19 #include "../unity/unity_fixture.h"
20 #include "test_helper.h"
21 #include <sml/sml_list.h>
22 
23 TEST_GROUP(sml_list);
24 
25 extern sml_buffer *buf;
26 
TEST_SETUP(sml_list)27 TEST_SETUP(sml_list) {
28 	buf = sml_buffer_init(512);
29 }
30 
TEST_TEAR_DOWN(sml_list)31 TEST_TEAR_DOWN(sml_list) {
32 	sml_buffer_free(buf);
33 }
34 
TEST(sml_list,init)35 TEST(sml_list, init) {
36 	sml_list *l = sml_list_init();
37 	TEST_ASSERT_NOT_NULL(l);
38 	TEST_ASSERT_NULL(l->next);
39 	sml_list_free( l );
40 }
41 
TEST(sml_list,add)42 TEST(sml_list, add) {
43 	sml_list *l = sml_list_init();
44 	sml_list *n = sml_list_init();
45 	sml_list_add(l, n);
46 	TEST_ASSERT_NOT_NULL(l);
47 	TEST_ASSERT_NOT_NULL(l->next);
48 	TEST_ASSERT_TRUE(n == l->next);
49 	sml_list_free( l );
50 }
51 
TEST(sml_list,parse_two_entries)52 TEST(sml_list, parse_two_entries) {
53 	hex2binary("727702610101010142000177026101010101420001",  sml_buf_get_current_buf(buf));
54 	sml_list *l = sml_list_parse(buf);
55 
56 	TEST_ASSERT_FALSE(sml_buf_has_errors(buf));
57 	TEST_ASSERT_NOT_NULL(l);
58 	TEST_ASSERT_NOT_NULL(l->next);
59 	TEST_ASSERT_EQUAL(0, sml_octet_string_cmp_with_hex(l->obj_name, "61"));
60 
61 	sml_list_free( l );
62 }
63 
TEST(sml_list,parse_optional)64 TEST(sml_list, parse_optional) {
65 	hex2binary("01",  sml_buf_get_current_buf(buf));
66 	sml_list *l = sml_list_parse(buf);
67 	TEST_ASSERT_NULL(l);
68 	TEST_ASSERT_FALSE(sml_buf_has_errors(buf));
69 	sml_list_free( l );
70 }
71 
TEST(sml_list,write_one_entry)72 TEST(sml_list, write_one_entry) {
73 	sml_list *l = sml_list_init();
74 	l->obj_name = sml_octet_string_init((unsigned char *)"Hallo", 5);
75 	l->value = sml_value_init();
76 	l->value->type = SML_TYPE_OCTET_STRING;
77 	l->value->data.bytes = sml_octet_string_init((unsigned char *)"Hallo", 5);
78 
79 	sml_list_write(l, buf);
80 	expected_buf(buf, "71770648616C6C6F010101010648616C6C6F01", 19);
81 
82 	sml_list_free( l );
83 }
84 
TEST(sml_list,write_optional)85 TEST(sml_list, write_optional) {
86 	sml_list_write(0, buf);
87 	expected_buf(buf, "01", 1);
88 }
89 
TEST_GROUP_RUNNER(sml_list)90 TEST_GROUP_RUNNER(sml_list) {
91 	RUN_TEST_CASE(sml_list, init);
92 	RUN_TEST_CASE(sml_list, add);
93 	RUN_TEST_CASE(sml_list, parse_two_entries);
94 	RUN_TEST_CASE(sml_list, parse_optional);
95 	RUN_TEST_CASE(sml_list, write_one_entry);
96 	RUN_TEST_CASE(sml_list, write_optional);
97 }
98 
99 
100 
101 TEST_GROUP(sml_sequence);
102 
103 sml_buffer *buf;
104 
TEST_SETUP(sml_sequence)105 TEST_SETUP(sml_sequence) {
106 	buf = sml_buffer_init(512);
107 }
108 
TEST_TEAR_DOWN(sml_sequence)109 TEST_TEAR_DOWN(sml_sequence) {
110 	sml_buffer_free(buf);
111 }
112 
TEST(sml_sequence,init)113 TEST(sml_sequence, init) {
114 	sml_sequence *seq = sml_sequence_init(&free);
115 	TEST_ASSERT_NOT_NULL(seq);
116 	sml_sequence_free( seq );
117 }
118 
sml_octet_string_parse_(sml_buffer * buf)119 static void * sml_octet_string_parse_( sml_buffer * buf ) {
120 	return sml_octet_string_parse( buf );
121 }
122 
sml_octet_string_free_(void * p)123 static void sml_octet_string_free_( void * p ) {
124 	sml_octet_string_free( p );
125 }
126 
TEST(sml_sequence,parse_octet_string)127 TEST(sml_sequence, parse_octet_string) {
128 	hex2binary("720648616C6C6F0648616C6C6F", sml_buf_get_current_buf(buf));
129 
130 	sml_sequence *seq = sml_sequence_parse(buf, sml_octet_string_parse_, sml_octet_string_free_);
131 	TEST_ASSERT_NOT_NULL(seq);
132 	TEST_ASSERT_EQUAL(2, seq->elems_len);
133 	sml_sequence_free( seq );
134 }
135 
sml_octet_string_write_(void * p,sml_buffer * buf)136 static void sml_octet_string_write_( void * p, sml_buffer * buf ) {
137 	sml_octet_string_write( p, buf );
138 }
139 
TEST(sml_sequence,write_octet_string)140 TEST(sml_sequence, write_octet_string) {
141 	sml_sequence *seq = sml_sequence_init( sml_octet_string_free_ );
142 	sml_sequence_add(seq, sml_octet_string_init((unsigned char *)"Hallo", 5));
143 	sml_sequence_add(seq, sml_octet_string_init((unsigned char *)"Hallo", 5));
144 
145 	sml_sequence_write(seq, buf, sml_octet_string_write_ );
146 	expected_buf(buf, "720648616C6C6F0648616C6C6F", 13);
147 
148 	sml_sequence_free( seq );
149 }
150 
TEST(sml_sequence,free_octet_string)151 TEST(sml_sequence, free_octet_string) {
152 	sml_sequence *seq = sml_sequence_init( sml_octet_string_free_ );
153 	sml_sequence_add(seq, sml_octet_string_init((unsigned char *)"Hallo", 5));
154 	sml_sequence_free(seq);
155 }
156 
TEST_GROUP_RUNNER(sml_sequence)157 TEST_GROUP_RUNNER(sml_sequence) {
158 	RUN_TEST_CASE(sml_sequence, init);
159 	RUN_TEST_CASE(sml_sequence, parse_octet_string);
160 	RUN_TEST_CASE(sml_sequence, write_octet_string);
161 	RUN_TEST_CASE(sml_sequence, free_octet_string);
162 }
163 
164