Skip to content

Commit 6557fcf

Browse files
committed
kvs/test: cleanup kvsroot convenience tests
Problem: The kvsroot convenience tests are scattered around in one function. Split out convenience function tests into new functions.
1 parent 86bc2ef commit 6557fcf

File tree

1 file changed

+158
-72
lines changed

1 file changed

+158
-72
lines changed

src/modules/kvs/test/kvsroot.c

Lines changed: 158 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@ void basic_api_tests (void)
2929
struct cache *cache;
3030
struct kvsroot *root;
3131
struct kvsroot *tmproot;
32-
struct flux_msg_cred cred;
33-
flux_msg_t *request;
3432

3533
if (!(cache = cache_create (NULL)))
3634
BAIL_OUT ("cache_create");
@@ -78,76 +76,6 @@ void basic_api_tests (void)
7876
ok (kvsroot_mgr_lookup_root_safe (krm, KVS_PRIMARY_NAMESPACE) == NULL,
7977
"kvsroot_mgr_lookup_root_safe returns NULL on root marked removed");
8078

81-
/* test convenience functions */
82-
83-
ok (kvsroot_save_transaction_request (NULL, NULL, NULL) < 0
84-
&& errno == EINVAL,
85-
"invalid inputs to kvsroot_save_transaction_request returns EINVAL");
86-
87-
ok (zhash_size (root->transaction_requests) == 0,
88-
"before saving transaction, no transaction_requests in hash");
89-
90-
if (!(request = flux_request_encode ("mytopic", "{ bar : 1 }")))
91-
BAIL_OUT ("flux_request_encode");
92-
93-
ok (kvsroot_save_transaction_request (root, request, "myname") == 0,
94-
"kvsroot_save_transaction_request works");
95-
96-
ok (kvsroot_save_transaction_request (root, request, "myname") < 0
97-
&& errno == EEXIST,
98-
"kvsroot_save_transaction_request fails on duplicate request");
99-
100-
flux_msg_destroy (request);
101-
102-
ok (zhash_size (root->transaction_requests) == 1,
103-
"after saving transaction, one transaction_requests in hash");
104-
105-
/* invalid input to kvsroot_setroot() won't segfault */
106-
kvsroot_setroot (NULL, NULL, NULL, 0);
107-
108-
kvsroot_setroot (krm, root, "foobar", 18);
109-
110-
ok (streq (root->ref, "foobar"),
111-
"kvsroot_setroot set ref correctly");
112-
113-
ok (root->seq == 18,
114-
"kvsroot_setroot set seq correctly");
115-
116-
cred.rolemask = 0;
117-
cred.userid = 0;
118-
ok (kvsroot_check_user (NULL, NULL, cred) < 0 && errno == EINVAL,
119-
"invalid inputs to kvsroot_check_user returns EINVAL");
120-
121-
cred.rolemask = FLUX_ROLE_OWNER;
122-
cred.userid = 0;
123-
ok (kvsroot_check_user (krm, NULL, cred) < 0
124-
&& errno == EINVAL,
125-
"kvsroot_check_user failed with EINVAL on bad input");
126-
127-
cred.rolemask = FLUX_ROLE_OWNER;
128-
cred.userid = 0;
129-
ok (!kvsroot_check_user (krm, root, cred),
130-
"kvsroot_check_user works on role owner");
131-
132-
cred.rolemask = FLUX_ROLE_OWNER;
133-
cred.userid = 1234;
134-
ok (!kvsroot_check_user (krm, root, cred),
135-
"kvsroot_check_user works on role user and correct id");
136-
137-
cred.rolemask = FLUX_ROLE_USER;
138-
cred.userid = 0;
139-
ok (kvsroot_check_user (krm, root, cred) < 0
140-
&& errno == EPERM,
141-
"kvsroot_check_user fails with EPERM on role user and incorrect id");
142-
143-
cred.rolemask = 0;
144-
cred.userid = 0;
145-
ok (kvsroot_check_user (krm, root, cred) < 0
146-
&& errno == EPERM,
147-
"kvsroot_check_user fails with EPERM on bad role");
148-
149-
/* back to testing kvsroot_mgr functions */
150-
15179
ok (kvsroot_mgr_remove_root (krm, KVS_PRIMARY_NAMESPACE) == 0,
15280
"kvsroot_mgr_remove_root works");
15381

@@ -329,6 +257,160 @@ void basic_kvstxn_mgr_tests (void)
329257
cache_destroy (cache);
330258
}
331259

260+
void basic_convenience_corner_case_tests (void)
261+
{
262+
kvsroot_mgr_t *krm;
263+
struct flux_msg_cred cred;
264+
265+
ok ((krm = kvsroot_mgr_create (NULL, &global)) != NULL,
266+
"kvsroot_mgr_create works");
267+
268+
ok (kvsroot_save_transaction_request (NULL, NULL, NULL) < 0
269+
&& errno == EINVAL,
270+
"invalid inputs to kvsroot_save_transaction_request returns EINVAL");
271+
272+
/* invalid input to kvsroot_setroot() won't segfault */
273+
kvsroot_setroot (NULL, NULL, NULL, 0);
274+
275+
cred.rolemask = FLUX_ROLE_OWNER;
276+
cred.userid = 0;
277+
ok (kvsroot_check_user (krm, NULL, cred) < 0
278+
&& errno == EINVAL,
279+
"kvsroot_check_user failed with EINVAL on bad input");
280+
281+
kvsroot_mgr_destroy (krm);
282+
}
283+
284+
void basic_transaction_request_tests (void)
285+
{
286+
kvsroot_mgr_t *krm;
287+
struct cache *cache;
288+
struct kvsroot *root;
289+
flux_msg_t *request;
290+
291+
if (!(cache = cache_create (NULL)))
292+
BAIL_OUT ("cache_create");
293+
294+
ok ((krm = kvsroot_mgr_create (NULL, &global)) != NULL,
295+
"kvsroot_mgr_create works");
296+
297+
ok (kvsroot_mgr_root_count (krm) == 0,
298+
"kvsroot_mgr_root_count returns correct count of roots");
299+
300+
ok ((root = kvsroot_mgr_create_root (krm,
301+
cache,
302+
"sha1",
303+
KVS_PRIMARY_NAMESPACE,
304+
1234,
305+
0)) != NULL,
306+
"kvsroot_mgr_create_root works");
307+
308+
ok (zhash_size (root->transaction_requests) == 0,
309+
"before saving transaction, no transaction_requests in hash");
310+
311+
if (!(request = flux_request_encode ("mytopic", "{ bar : 1 }")))
312+
BAIL_OUT ("flux_request_encode");
313+
314+
ok (kvsroot_save_transaction_request (root, request, "myname") == 0,
315+
"kvsroot_save_transaction_request works");
316+
317+
ok (kvsroot_save_transaction_request (root, request, "myname") < 0
318+
&& errno == EEXIST,
319+
"kvsroot_save_transaction_request fails on duplicate request");
320+
321+
flux_msg_destroy (request);
322+
323+
ok (zhash_size (root->transaction_requests) == 1,
324+
"after saving transaction, one transaction_requests in hash");
325+
326+
kvsroot_mgr_destroy (krm);
327+
cache_destroy (cache);
328+
}
329+
330+
void basic_setroot_tests (void)
331+
{
332+
kvsroot_mgr_t *krm;
333+
struct cache *cache;
334+
struct kvsroot *root;
335+
336+
if (!(cache = cache_create (NULL)))
337+
BAIL_OUT ("cache_create");
338+
339+
ok ((krm = kvsroot_mgr_create (NULL, &global)) != NULL,
340+
"kvsroot_mgr_create works");
341+
342+
ok ((root = kvsroot_mgr_create_root (krm,
343+
cache,
344+
"sha1",
345+
KVS_PRIMARY_NAMESPACE,
346+
1234,
347+
0)) != NULL,
348+
"kvsroot_mgr_create_root works");
349+
350+
kvsroot_setroot (krm, root, "foobar", 18);
351+
352+
ok (streq (root->ref, "foobar"),
353+
"kvsroot_setroot set ref correctly");
354+
355+
ok (root->seq == 18,
356+
"kvsroot_setroot set seq correctly");
357+
358+
kvsroot_mgr_destroy (krm);
359+
cache_destroy (cache);
360+
}
361+
362+
void basic_check_user_tests (void)
363+
{
364+
kvsroot_mgr_t *krm;
365+
struct cache *cache;
366+
struct kvsroot *root;
367+
struct flux_msg_cred cred;
368+
369+
if (!(cache = cache_create (NULL)))
370+
BAIL_OUT ("cache_create");
371+
372+
ok ((krm = kvsroot_mgr_create (NULL, &global)) != NULL,
373+
"kvsroot_mgr_create works");
374+
375+
ok ((root = kvsroot_mgr_create_root (krm,
376+
cache,
377+
"sha1",
378+
KVS_PRIMARY_NAMESPACE,
379+
1234,
380+
0)) != NULL,
381+
"kvsroot_mgr_create_root works");
382+
383+
cred.rolemask = 0;
384+
cred.userid = 0;
385+
ok (kvsroot_check_user (NULL, NULL, cred) < 0 && errno == EINVAL,
386+
"invalid inputs to kvsroot_check_user returns EINVAL");
387+
388+
cred.rolemask = FLUX_ROLE_OWNER;
389+
cred.userid = 0;
390+
ok (!kvsroot_check_user (krm, root, cred),
391+
"kvsroot_check_user works on role owner");
392+
393+
cred.rolemask = FLUX_ROLE_OWNER;
394+
cred.userid = 1234;
395+
ok (!kvsroot_check_user (krm, root, cred),
396+
"kvsroot_check_user works on role user and correct id");
397+
398+
cred.rolemask = FLUX_ROLE_USER;
399+
cred.userid = 0;
400+
ok (kvsroot_check_user (krm, root, cred) < 0
401+
&& errno == EPERM,
402+
"kvsroot_check_user fails with EPERM on role user and incorrect id");
403+
404+
cred.rolemask = 0;
405+
cred.userid = 0;
406+
ok (kvsroot_check_user (krm, root, cred) < 0
407+
&& errno == EPERM,
408+
"kvsroot_check_user fails with EPERM on bad role");
409+
410+
kvsroot_mgr_destroy (krm);
411+
cache_destroy (cache);
412+
}
413+
332414
int main (int argc, char *argv[])
333415
{
334416
plan (NO_PLAN);
@@ -337,6 +419,10 @@ int main (int argc, char *argv[])
337419
basic_api_tests_non_primary ();
338420
basic_iter_tests ();
339421
basic_kvstxn_mgr_tests ();
422+
basic_convenience_corner_case_tests ();
423+
basic_transaction_request_tests ();
424+
basic_setroot_tests ();
425+
basic_check_user_tests ();
340426

341427
done_testing ();
342428
return (0);

0 commit comments

Comments
 (0)