]>
git.ipfire.org Git - thirdparty/strongswan.git/blob - src/libstrongswan/tests/suites/test_metadata_set.c
2 * Copyright (C) 2021 Tobias Brunner
4 * Copyright (C) secunet Security Networks AG
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2 of the License, or (at your
9 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
11 * This program is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 #include "test_suite.h"
19 #include <metadata/metadata_set.h>
21 START_TEST(test_destroy_null
)
23 metadata_set_t
*set
= NULL
;
24 metadata_set_destroy(set
);
28 START_TEST(test_destroy_empty
)
30 metadata_set_t
*set
= metadata_set_create();
31 metadata_set_destroy(set
);
35 START_TEST(test_put_null
)
37 metadata_set_t
*set
= NULL
;
40 metadata
= lib
->metadata
->create(lib
->metadata
, "int", 42);
41 metadata_set_put(set
, "key", metadata
);
42 metadata_set_put(set
, "other", NULL
);
48 metadata_set_t
*set
= metadata_set_create();
51 metadata
= lib
->metadata
->create(lib
->metadata
, "int", 42);
52 metadata_set_put(set
, "key", metadata
);
53 metadata_set_destroy(set
);
57 START_TEST(test_get_null
)
59 metadata_set_t
*set
= NULL
;
62 metadata
= metadata_set_get(set
, "key");
68 * Assert that the given int metadata value is found with the given key.
70 static void assert_int_value(metadata_set_t
*set
, const char *key
, int expected
)
75 metadata
= metadata_set_get(set
, key
);
77 metadata
->get(metadata
, &value
);
78 ck_assert_int_eq(expected
, value
);
83 metadata_set_t
*set
= metadata_set_create();
86 metadata
= lib
->metadata
->create(lib
->metadata
, "int", 42);
87 metadata_set_put(set
, "key", metadata
);
88 assert_int_value(set
, "key", 42);
89 metadata_set_destroy(set
);
93 START_TEST(test_get_missing
)
95 metadata_set_t
*set
= metadata_set_create();
98 metadata
= metadata_set_get(set
, "key");
101 metadata
= lib
->metadata
->create(lib
->metadata
, "int", 42);
102 metadata_set_put(set
, "other", metadata
);
103 metadata
= metadata_set_get(set
, "key");
104 ck_assert(!metadata
);
105 metadata_set_destroy(set
);
109 START_TEST(test_get_multi
)
111 metadata_set_t
*set
= metadata_set_create();
112 metadata_t
*metadata
;
114 metadata
= lib
->metadata
->create(lib
->metadata
, "int", 42);
115 metadata_set_put(set
, "key", metadata
);
116 metadata
= lib
->metadata
->create(lib
->metadata
, "int", 0);
117 metadata_set_put(set
, "other", metadata
);
118 assert_int_value(set
, "key", 42);
119 assert_int_value(set
, "other", 0);
120 metadata_set_destroy(set
);
124 START_TEST(test_put_replace
)
126 metadata_set_t
*set
= metadata_set_create();
127 metadata_t
*metadata
;
129 metadata
= lib
->metadata
->create(lib
->metadata
, "int", 42);
130 metadata_set_put(set
, "whatever", metadata
);
131 metadata
= lib
->metadata
->create(lib
->metadata
, "int", 0);
132 metadata_set_put(set
, "other", metadata
);
133 metadata
= lib
->metadata
->create(lib
->metadata
, "int", 666);
134 metadata_set_put(set
, "other", metadata
);
135 assert_int_value(set
, "whatever", 42);
136 assert_int_value(set
, "other", 666);
137 metadata_set_destroy(set
);
141 START_TEST(test_put_remove
)
143 metadata_set_t
*set
= metadata_set_create();
144 metadata_t
*metadata
;
146 metadata
= lib
->metadata
->create(lib
->metadata
, "int", 42);
147 metadata_set_put(set
, "key", metadata
);
148 metadata
= lib
->metadata
->create(lib
->metadata
, "int", 0);
149 metadata_set_put(set
, "other", metadata
);
150 metadata_set_put(set
, "other", NULL
);
151 assert_int_value(set
, "key", 42);
152 metadata
= metadata_set_get(set
, "other");
153 ck_assert(!metadata
);
154 metadata_set_put(set
, "key", NULL
);
155 metadata
= metadata_set_get(set
, "key");
156 ck_assert(!metadata
);
157 metadata_set_destroy(set
);
161 START_TEST(test_put_remove_missing
)
163 metadata_set_t
*set
= metadata_set_create();
164 metadata_t
*metadata
;
166 metadata_set_put(set
, "key", NULL
);
167 metadata
= lib
->metadata
->create(lib
->metadata
, "int", 42);
168 metadata_set_put(set
, "key", metadata
);
169 assert_int_value(set
, "key", 42);
170 metadata_set_put(set
, "key", NULL
);
171 metadata
= metadata_set_get(set
, "key");
172 ck_assert(!metadata
);
173 metadata_set_put(set
, "key", NULL
);
174 metadata_set_destroy(set
);
178 START_TEST(test_clone_null
)
180 metadata_set_t
*set
= NULL
, *clone
;
182 clone
= metadata_set_clone(set
);
187 START_TEST(test_clone_empty
)
189 metadata_set_t
*set
= metadata_set_create(), *clone
;
191 clone
= metadata_set_clone(set
);
192 ck_assert(clone
!= set
);
194 metadata_set_destroy(clone
);
195 metadata_set_destroy(set
);
199 START_TEST(test_clone
)
201 metadata_set_t
*set
= metadata_set_create(), *clone
;
202 metadata_t
*metadata
;
213 for (i
= 0; i
< countof(expected
); i
++)
215 metadata
= lib
->metadata
->create(lib
->metadata
, "int", expected
[i
].value
);
216 metadata_set_put(set
, expected
[i
].key
, metadata
);
219 clone
= metadata_set_clone(set
);
220 ck_assert(clone
!= set
);
222 for (i
= 0; i
< countof(expected
); i
++)
224 assert_int_value(set
, expected
[i
].key
, expected
[i
].value
);
225 assert_int_value(clone
, expected
[i
].key
, expected
[i
].value
);
228 metadata_set_put(set
, expected
[0].key
, NULL
);
229 assert_int_value(clone
, expected
[0].key
, expected
[0].value
);
231 metadata_set_destroy(clone
);
232 metadata_set_destroy(set
);
236 Suite
*metadata_set_suite_create()
241 s
= suite_create("metadata_set");
243 tc
= tcase_create("create/destroy");
244 tcase_add_test(tc
, test_destroy_null
);
245 tcase_add_test(tc
, test_destroy_empty
);
246 suite_add_tcase(s
, tc
);
248 tc
= tcase_create("put/get");
249 tcase_add_test(tc
, test_put_null
);
250 tcase_add_test(tc
, test_put
);
251 tcase_add_test(tc
, test_get_null
);
252 tcase_add_test(tc
, test_get
);
253 tcase_add_test(tc
, test_get_missing
);
254 tcase_add_test(tc
, test_get_multi
);
255 tcase_add_test(tc
, test_put_replace
);
256 tcase_add_test(tc
, test_put_remove
);
257 tcase_add_test(tc
, test_put_remove_missing
);
258 suite_add_tcase(s
, tc
);
260 tc
= tcase_create("clone");
261 tcase_add_test(tc
, test_clone_null
);
262 tcase_add_test(tc
, test_clone_empty
);
263 tcase_add_test(tc
, test_clone
);
264 suite_add_tcase(s
, tc
);