New upstream release.
[debian/iodine.git] / tests / fw_query.c
1 /*
2  * Copyright (c) 2006-2009 Erik Ekman <yarrick@kryo.se>
3  *
4  * Permission to use, copy, modify, and distribute this software for any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  */
16
17 #include <check.h>
18
19 #include "fw_query.h"
20 #include "test.h"
21
22 START_TEST(test_fw_query_simple)
23 {
24         struct fw_query q;
25         struct fw_query *qp;
26
27         q.addrlen = 33;
28         q.id = 0x848A;
29
30         fw_query_init();
31         
32         /* Test empty cache */
33         fw_query_get(0x848A, &qp);
34         fail_unless(qp == NULL);
35
36         fw_query_put(&q);
37
38         /* Test cache with one entry */
39         fw_query_get(0x848A, &qp);
40         fail_unless(qp->addrlen == q.addrlen);
41         fail_unless(qp->id == q.id);
42 }
43 END_TEST
44
45 START_TEST(test_fw_query_edge)
46 {
47         struct fw_query q;
48         struct fw_query *qp;
49         int i;
50
51         fw_query_init();
52         
53         q.addrlen = 33;
54         q.id = 0x848A;
55         fw_query_put(&q);
56
57         for (i = 1; i < FW_QUERY_CACHE_SIZE; i++) {
58                 q.addrlen++;
59                 q.id++;
60                 fw_query_put(&q);
61         }
62
63         /* The query should still be cached */
64         fw_query_get(0x848A, &qp);
65         fail_unless(qp->addrlen == 33);
66         fail_unless(qp->id == 0x848A);
67                 
68         q.addrlen++;
69         q.id++;
70         fw_query_put(&q);
71
72         /* but now it is overwritten */
73         fw_query_get(0x848A, &qp);
74         fail_unless(qp == NULL);
75 }
76 END_TEST
77
78 TCase *
79 test_fw_query_create_tests()
80 {
81         TCase *tc;
82
83         tc = tcase_create("Forwarded query");
84         tcase_add_test(tc, test_fw_query_simple);
85         tcase_add_test(tc, test_fw_query_edge);
86
87         return tc;
88 }