1313#include "ddb_cmocka.h"
1414#include "ddb_test_driver.h"
1515
16+ /*
17+ * -----------------------------------------------
18+ * Mock implementations
19+ * -----------------------------------------------
20+ */
21+
22+ #define MOCKED_POOL_UUID_STR "12345678-1234-1234-1234-123456789012"
23+
1624static int
1725fake_print (const char * fmt , ...)
1826{
@@ -25,27 +33,89 @@ fake_print(const char *fmt, ...)
2533 * -----------------------------------------------
2634 */
2735
28- #define assert_invalid_f_path (path , parts ) assert_invalid(vos_path_parse(path, &parts))
29- #define assert_f_path (path , parts ) assert_success(vos_path_parse(path, &parts))
30-
3136static void
32- vos_file_parts_tests (void * * state )
37+ vos_file_parse_test_errors (void * * state )
3338{
39+ uuid_t pool_uuid ;
3440 struct vos_file_parts parts = {0 };
35- uuid_t expected_uuid ;
41+ char * buf ;
42+ int rc ;
3643
37- uuid_parse ("12345678-1234-1234-1234-123456789012" , expected_uuid );
44+ rc = uuid_parse (MOCKED_POOL_UUID_STR , pool_uuid );
45+ assert_rc_equal (rc , 0 );
3846
39- assert_invalid_f_path ( "" , parts );
40- assert_invalid_f_path ( "/mnt/daos " , parts );
41- assert_invalid_f_path ( "/mnt/daos/12345678-1234-1234-1234-123456789012" , parts );
47+ /* Test invalid vos paths not respecting regex */
48+ rc = vos_path_parse ( " " , & parts );
49+ assert_rc_equal ( rc , - DER_INVAL );
4250
43- assert_f_path ("/mnt/daos/12345678-1234-1234-1234-123456789012/vos-1" , parts );
51+ rc = vos_path_parse ("/mnt/daos" , & parts );
52+ assert_rc_equal (rc , - DER_INVAL );
53+
54+ rc = vos_path_parse ("/mnt/daos/" MOCKED_POOL_UUID_STR , & parts );
55+ assert_rc_equal (rc , - DER_INVAL );
56+
57+ rc = vos_path_parse ("//mnt/daos/" MOCKED_POOL_UUID_STR "/vos-1" , & parts );
58+ assert_rc_equal (rc , - DER_INVAL );
59+
60+ rc = vos_path_parse ("/mnt/daos/g2345678-1234-1234-1234-123456789012/vos-1" , & parts );
61+ assert_rc_equal (rc , - DER_INVAL );
4462
63+ /* Test invalid vos paths with too long db path */
64+ D_ALLOC (buf , DB_PATH_SIZE + 64 );
65+ assert_non_null (buf );
66+ memset (buf , 'a' , DB_PATH_SIZE + 64 );
67+ buf [0 ] = '/' ;
68+ memcpy (& buf [DB_PATH_SIZE ], "/" MOCKED_POOL_UUID_STR "/vos-0" ,
69+ sizeof ("/" MOCKED_POOL_UUID_STR "/vos-0" ));
70+ rc = vos_path_parse (buf , & parts );
71+ D_FREE (buf );
72+ assert_rc_equal (rc , - DER_INVAL );
73+ D_FREE (buf );
74+
75+ /* Test invalid vos paths with too long vos file name */
76+ rc = vos_path_parse ("/mnt/daos/" MOCKED_POOL_UUID_STR "/vos-999999999999" , & parts );
77+ assert_rc_equal (rc , - DER_INVAL );
78+
79+ /* Test invalid vos paths with invalid target idx */
80+ rc = vos_path_parse ("/mnt/daos/" MOCKED_POOL_UUID_STR "/vos-99999999999" , & parts );
81+ assert_rc_equal (rc , - DER_INVAL );
82+ }
83+
84+ static void
85+ vos_file_parse_test_success (void * * state )
86+ {
87+ uuid_t expected_uuid ;
88+ struct vos_file_parts parts = {0 };
89+ int rc ;
90+
91+ rc = uuid_parse (MOCKED_POOL_UUID_STR , expected_uuid );
92+ assert_rc_equal (rc , 0 );
93+
94+ /* Test with absolute path */
95+ rc = vos_path_parse ("/mnt/daos/" MOCKED_POOL_UUID_STR "/vos-0" , & parts );
96+ assert_rc_equal (rc , 0 );
4597 assert_string_equal ("/mnt/daos" , parts .vf_db_path );
4698 assert_uuid_equal (expected_uuid , parts .vf_pool_uuid );
47- assert_string_equal ("vos-1" , parts .vf_vos_file );
48- assert_int_equal (1 , parts .vf_target_idx );
99+ assert_string_equal ("vos-0" , parts .vf_vos_file_name );
100+ assert_int_equal (0 , parts .vf_target_idx );
101+
102+ /* Test with relative path */
103+ memset (& parts , 0 , sizeof (parts ));
104+ rc = vos_path_parse ("mnt/daos/" MOCKED_POOL_UUID_STR "/vos-42" , & parts );
105+ assert_rc_equal (rc , 0 );
106+ assert_string_equal ("mnt/daos" , parts .vf_db_path );
107+ assert_uuid_equal (expected_uuid , parts .vf_pool_uuid );
108+ assert_string_equal ("vos-42" , parts .vf_vos_file_name );
109+ assert_int_equal (42 , parts .vf_target_idx );
110+
111+ /* Test with null db path */
112+ memset (& parts , 1 , sizeof (parts ));
113+ rc = vos_path_parse (MOCKED_POOL_UUID_STR "/vos-666" , & parts );
114+ assert_rc_equal (rc , 0 );
115+ assert_string_equal ("" , parts .vf_db_path );
116+ assert_uuid_equal (expected_uuid , parts .vf_pool_uuid );
117+ assert_string_equal ("vos-666" , parts .vf_vos_file_name );
118+ assert_int_equal (666 , parts .vf_target_idx );
49119}
50120
51121#define assert_vtp_eq (a , b ) \
293363ddb_parse_tests_run ()
294364{
295365 static const struct CMUnitTest tests [] = {
296- TEST (vos_file_parts_tests ), TEST (parse_dtx_id_tests ), TEST (keys_are_parsed_correctly ),
297- TEST (pool_flags_tests ), TEST (date2cmt_time_tests ),
366+ TEST (vos_file_parse_test_errors ), TEST (vos_file_parse_test_success ),
367+ TEST (parse_dtx_id_tests ), TEST (keys_are_parsed_correctly ),
368+ TEST (pool_flags_tests ), TEST (date2cmt_time_tests ),
298369 };
299370 return cmocka_run_group_tests_name ("DDB helper parsing function tests" , tests ,
300371 NULL , NULL );
0 commit comments