* New upstream release.
[debian/iodine.git] / tests / user.c
1 /*
2  * Copyright (c) 2006 Bjorn Andersson <flex@kryo.se>, 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 #include <stdio.h>
19 #include <string.h>
20 #include <time.h>
21 #include <sys/socket.h>
22 #include <arpa/inet.h>
23 #include <netinet/in.h>
24
25 #include "common.h"
26 #include "user.h"
27 #include "test.h"
28
29 START_TEST(test_init_users)
30 {
31         in_addr_t ip;
32         char givenip[16];
33         int i;
34
35         ip = inet_addr("127.0.0.1");
36         init_users(ip);
37         for (i = 0; i < USERS; i++) {
38                 fail_unless(users[i].id == i);
39                 fail_unless(users[i].q.id == 0);
40                 fail_unless(users[i].inpacket.len == 0);
41                 fail_unless(users[i].outpacket.len == 0);
42                 snprintf(givenip, sizeof(givenip), "127.0.0.%d", i + 2);
43                 fail_unless(users[i].tun_ip == inet_addr(givenip));
44         }
45 }
46 END_TEST
47
48 START_TEST(test_users_waiting)
49 {
50         in_addr_t ip;
51
52         ip = inet_addr("127.0.0.1");
53         init_users(ip);
54
55         fail_unless(users_waiting_on_reply() == 0);
56
57         users[3].active = 1;
58
59         fail_unless(users_waiting_on_reply() == 0);
60
61         users[3].last_pkt = time(NULL);
62         
63         fail_unless(users_waiting_on_reply() == 0);
64         
65         users[3].q.id = 1;
66         
67         fail_unless(users_waiting_on_reply() == 1);
68 }
69 END_TEST
70
71 START_TEST(test_find_user_by_ip)
72 {
73         in_addr_t ip;
74         unsigned int testip;
75
76         ip = inet_addr("127.0.0.1");
77         init_users(ip);
78
79         testip = (unsigned int) inet_addr("10.0.0.1");
80         fail_unless(find_user_by_ip(testip) == -1);
81         
82         testip = (unsigned int) inet_addr("127.0.0.2");
83         fail_unless(find_user_by_ip(testip) == -1);
84         
85         users[0].active = 1;
86         
87         testip = (unsigned int) inet_addr("127.0.0.2");
88         fail_unless(find_user_by_ip(testip) == -1);
89         
90         users[0].last_pkt = time(NULL);
91         
92         testip = (unsigned int) inet_addr("127.0.0.2");
93         fail_unless(find_user_by_ip(testip) == 0);
94 }
95 END_TEST
96
97 START_TEST(test_all_users_waiting_to_send)
98 {
99         in_addr_t ip;
100
101         ip = inet_addr("127.0.0.1");
102         init_users(ip);
103
104         fail_unless(all_users_waiting_to_send() == 1);
105         
106         users[0].active = 1;
107         
108         fail_unless(all_users_waiting_to_send() == 1);
109         
110         users[0].last_pkt = time(NULL);
111         
112         fail_unless(all_users_waiting_to_send() == 0);
113
114         users[0].outpacket.len = 44;
115         
116         fail_unless(all_users_waiting_to_send() == 1);
117 }
118 END_TEST
119
120 START_TEST(test_find_available_user)
121 {
122         in_addr_t ip;
123         int i;
124
125         ip = inet_addr("127.0.0.1");
126         init_users(ip);
127
128         for (i = 0; i < USERS; i++) {
129                 fail_unless(find_available_user() == i);
130         }
131
132         for (i = 0; i < USERS; i++) {
133                 fail_unless(find_available_user() == -1);
134         }
135
136         users[3].active = 0;
137
138         fail_unless(find_available_user() == 3);
139         fail_unless(find_available_user() == -1);
140
141         users[3].last_pkt = 55;
142         
143         fail_unless(find_available_user() == 3);
144         fail_unless(find_available_user() == -1);
145 }
146 END_TEST
147
148 TCase *
149 test_user_create_tests()
150 {
151         TCase *tc;
152
153         tc = tcase_create("User");
154         tcase_add_test(tc, test_init_users);
155         tcase_add_test(tc, test_users_waiting);
156         tcase_add_test(tc, test_find_user_by_ip);
157         tcase_add_test(tc, test_all_users_waiting_to_send);
158         tcase_add_test(tc, test_find_available_user);
159
160         return tc;
161 }