1 /* check-sources:disable-copyright-check */
2 #include <unistd.h>
3 #include <check.h>
4 #include <droplet.h>
5 #include <droplet/utils.h>
6 #include <droplet/uks/uks.h>
7 #include "utest_main.h"
8 
START_TEST(strrstr_test)9 START_TEST(strrstr_test)
10 {
11   dpl_assert_str_eq(dpl_strrstr("lev1DIRlev2DIRlev3", "DIR"), "DIRlev3");
12   dpl_assert_str_eq(dpl_strrstr("foo/bar/", "/"), "/");
13 }
14 END_TEST
15 
START_TEST(xattrs_test)16 START_TEST(xattrs_test)
17 {
18   char path[] = "/tmp/test_droplet_util_XXXXXX";
19   dpl_dict_t* dict = NULL;
20   int ret;
21   char* value = NULL;
22 
23   int fd = mkstemp(path);
24   dpl_assert_int_ne(-1, fd);
25   ret = close(fd);
26   dpl_assert_int_eq(0, ret);
27 
28   char command[1000];
29   sprintf(command, "sh " SRCDIR "/tools/util_utest.sh prepare %s", path);
30   ret = system(command);
31   dpl_assert_int_eq(0, ret);
32 
33   /* No encoding, with prefix filter */
34   dict = dpl_dict_new(13);
35   dpl_assert_ptr_not_null(dict);
36   ret = dpl_get_xattrs(path, dict, "user.", XATTRS_NO_ENCODING);
37   dpl_assert_int_eq(DPL_SUCCESS, ret);
38 
39   ret = dpl_dict_count(dict);
40   dpl_assert_int_eq(100, ret);
41   value = dpl_dict_get_value(dict, "key042");
42   dpl_assert_ptr_not_null(value);
43   dpl_assert_str_eq("value042", value);
44   dpl_dict_free(dict);
45 
46   /* No encoding, without prefix filter */
47   dict = dpl_dict_new(13);
48   dpl_assert_ptr_not_null(dict);
49   ret = dpl_get_xattrs(path, dict, NULL, XATTRS_NO_ENCODING);
50   dpl_assert_int_eq(DPL_SUCCESS, ret);
51 
52   ret = dpl_dict_count(dict);
53   dpl_assert_int_eq(101, ret); /* 100 user attributes + 1 acl */
54   value = dpl_dict_get_value(dict, "user.key042");
55   dpl_assert_ptr_not_null(value);
56   dpl_assert_str_eq("value042", value);
57   dpl_dict_free(dict);
58 
59   /* Base64 encoding, without prefix filter */
60   dict = dpl_dict_new(13);
61   dpl_assert_ptr_not_null(dict);
62   ret = dpl_get_xattrs(path, dict, NULL, XATTRS_ENCODE_BASE64);
63   dpl_assert_int_eq(DPL_SUCCESS, ret);
64 
65   ret = dpl_dict_count(dict);
66   dpl_assert_int_eq(101, ret); /* 100 user attributes + 1 acl */
67   value = dpl_dict_get_value(dict, "user.key042");
68   dpl_assert_ptr_not_null(value);
69   dpl_assert_str_eq("dmFsdWUwNDI=", value);
70   dpl_dict_free(dict);
71 
72   sprintf(command, "sh " SRCDIR "/tools/util_utest.sh clean %s", path);
73   ret = system(command);
74   dpl_assert_int_eq(0, ret);
75 }
76 END_TEST
77 
START_TEST(uks_hash_setget_test)78 START_TEST(uks_hash_setget_test)
79 {
80   int hash_set = 0xcabefe;
81   int hash_rd = 0;
82   int ret;
83   BIGNUM* bn = BN_new();
84   dpl_assert_ptr_not_null(bn);
85 
86   BN_set_bit(bn, DPL_UKS_NBITS - 1);
87   BN_clear_bit(bn, DPL_UKS_NBITS - 1);
88 
89   ret = dpl_uks_hash_set(bn, hash_set);
90   dpl_assert_int_eq(ret, DPL_SUCCESS);
91 
92   hash_rd = dpl_uks_hash_get(bn);
93   dpl_assert_int_eq(hash_set, hash_rd);
94 
95   BN_free(bn);
96 }
97 END_TEST
98 
util_suite(void)99 Suite* util_suite(void)
100 {
101   Suite* s = suite_create("util");
102   TCase* t = tcase_create("base");
103   tcase_add_test(t, strrstr_test);
104   tcase_add_test(t, xattrs_test);
105   tcase_add_test(t, uks_hash_setget_test);
106   suite_add_tcase(s, t);
107   return s;
108 }
109