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