@@ -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+
332414int 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