tests/linux: use Akaros's CFLAGS
[akaros.git] / user / utest / dtls.c
1 /* Copyright (c) 2016 Google, Inc.
2  * Barret Rhoden <brho@cs.berkeley.edu>
3  * See LICENSE for details. */
4
5 #include <utest/utest.h>
6 #include <parlib/dtls.h>
7 #include <stdio.h>
8
9 TEST_SUITE("DTLS");
10
11 /* <--- Begin definition of test cases ---> */
12
13 bool test_get_without_set(void)
14 {
15         dtls_key_t key;
16         void *got_val;
17
18         key = dtls_key_create(0);
19         got_val = get_dtls(key);
20         UT_ASSERT_FMT("Expected 0, got %p", got_val == 0, 0, got_val);
21         destroy_dtls();
22         return TRUE;
23 }
24
25 /* This catches a bug, but it had to have a set happen at some point. */
26 bool test_get_after_reset(void)
27 {
28         dtls_key_t key;
29         void *set_val = (void*)0x15;
30         void *got_val;
31
32         key = dtls_key_create(0);
33         set_dtls(key, set_val);
34         destroy_dtls();
35
36         key = dtls_key_create(0);
37         got_val = get_dtls(key);
38         UT_ASSERT_FMT("Expected 0, got %p", got_val == 0, 0, got_val);
39         destroy_dtls();
40         return TRUE;
41 }
42
43 bool test_set_and_get(void)
44 {
45         dtls_key_t key;
46         void *set_val = (void*)0x15;
47         void *got_val;
48
49         key = dtls_key_create(0);
50         set_dtls(key, set_val);
51         got_val = get_dtls(key);
52         UT_ASSERT_FMT("Expected %p, got %p", got_val == set_val, set_val,
53                       got_val);
54         destroy_dtls();
55         return TRUE;
56 }
57
58 bool test_set_twice(void)
59 {
60         dtls_key_t key;
61         void *set_val = (void*)0x15;
62         void *got_val;
63
64         key = dtls_key_create(0);
65         set_dtls(key, set_val);
66         set_dtls(key, set_val + 1);
67         destroy_dtls();
68         return TRUE;
69 }
70
71 static dtls_key_t sfd_global_key;
72
73 static void setting_dtor(void *arg)
74 {
75         set_dtls(sfd_global_key, (void*)0xf00);
76 }
77
78 /* Users can set from a destructor.  In some implementations of pthread keys,
79  * you can't safely set_specific from within a destructor without the risk of an
80  * infinite loop or storage loss.  Our DTLS implementation shouldn't be doing
81  * either, though we can't check for storage loss. */
82 bool test_set_from_dtor(void)
83 {
84         void *set_val = (void*)0x15;
85
86         sfd_global_key = dtls_key_create(setting_dtor);
87         set_dtls(sfd_global_key, set_val);
88         destroy_dtls();
89         return TRUE;
90 }
91
92 /* <--- End definition of test cases ---> */
93
94 struct utest utests[] = {
95         UTEST_REG(get_without_set),
96         UTEST_REG(get_after_reset),
97         UTEST_REG(set_and_get),
98         UTEST_REG(set_twice),
99         UTEST_REG(set_from_dtor),
100 };
101 int num_utests = sizeof(utests) / sizeof(struct utest);
102
103 int main(int argc, char *argv[])
104 {
105         char **whitelist = &argv[1];
106         int whitelist_len = argc - 1;
107
108         RUN_TEST_SUITE(utests, num_utests, whitelist, whitelist_len);
109 }