9 #include "afb-session.h"
11 #define GOOD_UUID "123456789012345678901234567890123456"
12 #define BAD_UUID "1234567890123456789012345678901234567"
14 START_TEST (test_initialisation)
16 ck_assert_int_eq(0, afb_session_init(0, 0, NULL));
17 ck_assert_int_eq(0, afb_session_init(200, 0, NULL));
18 ck_assert_int_eq(0, afb_session_init(10, 0, GOOD_UUID));
19 ck_assert_str_eq(GOOD_UUID, afb_session_initial_token());
20 ck_assert_int_eq(-1, afb_session_init(10, 0, BAD_UUID));
21 ck_assert_int_eq(errno, EINVAL);
26 START_TEST (test_sanity)
28 struct afb_session *s;
29 s = afb_session_addref(NULL);
31 afb_session_unref(NULL);
37 START_TEST (test_creation)
40 struct afb_session *s, *x;
43 ck_assert_int_eq(0, afb_session_init(10, 3600, GOOD_UUID));
45 /* create a session */
46 s = afb_session_create(AFB_SESSION_TIMEOUT_DEFAULT);
49 /* the session is valid */
50 ck_assert(afb_session_uuid(s) != NULL);
51 ck_assert(afb_session_token(s) != NULL);
52 ck_assert(!afb_session_is_closed(s));
54 /* token is the initial one */
55 ck_assert_str_eq(afb_session_token(s), GOOD_UUID);
56 ck_assert(afb_session_check_token(s, GOOD_UUID));
57 ck_assert(afb_session_check_token(s, afb_session_token(s)));
59 /* token can be renewed */
60 afb_session_new_token(s);
61 ck_assert(strcmp(afb_session_token(s), GOOD_UUID));
62 ck_assert(!afb_session_check_token(s, GOOD_UUID));
63 ck_assert(afb_session_check_token(s, afb_session_token(s)));
65 /* query the session */
66 uuid = strdup(afb_session_uuid(s));
67 x = afb_session_search(uuid);
70 /* still alive after search */
73 s = afb_session_search(uuid);
77 /* but not after closing */
79 ck_assert(afb_session_is_closed(s));
82 s = afb_session_search(uuid);
89 START_TEST (test_capacity)
91 struct afb_session *s[3];
92 ck_assert_int_eq(0, afb_session_init(2, 3600, GOOD_UUID));
93 s[0] = afb_session_create(AFB_SESSION_TIMEOUT_DEFAULT);
95 s[1] = afb_session_create(AFB_SESSION_TIMEOUT_DEFAULT);
97 s[2] = afb_session_create(AFB_SESSION_TIMEOUT_DEFAULT);
99 afb_session_close(s[0]);
100 afb_session_unref(s[0]);
101 s[2] = afb_session_create(AFB_SESSION_TIMEOUT_DEFAULT);
103 s[0] = afb_session_create(AFB_SESSION_TIMEOUT_DEFAULT);
105 afb_session_unref(s[0]);
106 afb_session_unref(s[1]);
107 afb_session_unref(s[2]);
113 void *mkcookie(void *closure)
115 mkcookie_got = closure;
119 void *freecookie_got;
120 void freecookie(void *item)
122 freecookie_got = item;
125 START_TEST (test_cookies)
127 char *k[] = { "key1", "key2", "key3", NULL }, *p, *q, *d = "default";
128 struct afb_session *s;
132 ck_assert_int_eq(0, afb_session_init(10, 3600, GOOD_UUID));
134 extern void *afb_session_cookie(struct afb_session *session, const void *key, void *(*makecb)(void *closure), void (*freecb)(void *item), void *closure, int replace);
136 /* create a session */
137 s = afb_session_create(AFB_SESSION_TIMEOUT_DEFAULT);
141 for (i = 0 ; k[i] ; i++) {
142 for (j = 0 ; k[j] ; j++) {
143 /* retrieve the previous value */
144 mkcookie_got = freecookie_got = NULL;
145 p = afb_session_cookie(s, k[j], NULL, NULL, NULL, 0);
147 /* never set (i = 0) */
148 q = afb_session_cookie(s, k[j], NULL, NULL, d, 0);
150 p = afb_session_cookie(s, k[j], NULL, NULL, NULL, 0);
153 q = afb_session_cookie(s, k[j], mkcookie, freecookie, k[i], 1);
154 ck_assert(q == k[i]);
155 ck_assert(mkcookie_got == q);
156 ck_assert(freecookie_got == p);
161 for (i = 1 ; k[i] ; i++) {
162 mkcookie_got = freecookie_got = NULL;
163 p = afb_session_cookie(s, k[i], NULL, NULL, NULL, 0);
164 ck_assert(!freecookie_got);
165 q = afb_session_cookie(s, k[i], NULL, NULL, NULL, 1);
167 ck_assert(freecookie_got == p);
170 /* closing session */
171 p = afb_session_cookie(s, k[0], NULL, NULL, NULL, 0);
172 mkcookie_got = freecookie_got = NULL;
173 afb_session_close(s);
174 ck_assert(freecookie_got == p);
175 p = afb_session_cookie(s, k[0], NULL, NULL, NULL, 0);
177 afb_session_unref(s);
184 void mksuite(const char *name) { suite = suite_create(name); }
185 void addtcase(const char *name) { tcase = tcase_create(name); suite_add_tcase(suite, tcase); }
186 void addtest(TFun fun) { tcase_add_test(tcase, fun); }
190 SRunner *srunner = srunner_create(suite);
191 srunner_run_all(srunner, CK_NORMAL);
192 nerr = srunner_ntests_failed(srunner);
193 srunner_free(srunner);
197 int main(int ac, char **av)
201 addtest(test_initialisation);
202 addtest(test_sanity);
203 addtest(test_creation);
204 addtest(test_capacity);
205 addtest(test_cookies);