Branch data Line data Source code
1 : : #include "sd-hwdb.h" 2 : : 3 : : #include "alloc-util.h" 4 : : #include "errno.h" 5 : : #include "tests.h" 6 : : 7 : 4 : static int test_failed_enumerate(void) { 8 : 4 : _cleanup_(sd_hwdb_unrefp) sd_hwdb *hwdb = NULL; 9 : : const char *key, *value; 10 : : int r; 11 : : 12 [ + - ]: 4 : log_info("/* %s */", __func__); 13 : : 14 : 4 : r = sd_hwdb_new(&hwdb); 15 [ - + ]: 4 : if (r == -ENOENT) 16 : 0 : return r; 17 [ - + ]: 4 : assert_se(r == 0); 18 : : 19 [ - + ]: 4 : assert_se(sd_hwdb_seek(hwdb, "no-such-modalias-should-exist") == 0); 20 : : 21 [ - + ]: 4 : assert_se(sd_hwdb_enumerate(hwdb, &key, &value) == 0); 22 [ - + ]: 4 : assert_se(sd_hwdb_enumerate(hwdb, &key, NULL) == -EINVAL); 23 [ - + ]: 4 : assert_se(sd_hwdb_enumerate(hwdb, NULL, &value) == -EINVAL); 24 : : 25 : 4 : return 0; 26 : : } 27 : : 28 : : #define DELL_MODALIAS \ 29 : : "evdev:atkbd:dmi:bvnXXX:bvrYYY:bdZZZ:svnDellXXX:pnYYY" 30 : : 31 : 4 : static void test_basic_enumerate(void) { 32 : 4 : _cleanup_(sd_hwdb_unrefp) sd_hwdb *hwdb = NULL; 33 : : const char *key, *value; 34 : 4 : size_t len1 = 0, len2 = 0; 35 : : int r; 36 : : 37 [ + - ]: 4 : log_info("/* %s */", __func__); 38 : : 39 [ - + ]: 4 : assert_se(sd_hwdb_new(&hwdb) == 0); 40 : : 41 [ - + ]: 4 : assert_se(sd_hwdb_seek(hwdb, DELL_MODALIAS) == 0); 42 : : 43 : : for (;;) { 44 : 120 : r = sd_hwdb_enumerate(hwdb, &key, &value); 45 [ + - - + ]: 120 : assert(IN_SET(r, 0, 1)); 46 [ + + ]: 120 : if (r == 0) 47 : 4 : break; 48 [ - + ]: 116 : assert(key); 49 [ - + ]: 116 : assert(value); 50 [ + - ]: 116 : log_debug("A: \"%s\" → \"%s\"", key, value); 51 : 116 : len1 += strlen(key) + strlen(value); 52 : : } 53 : : 54 [ + - + + ]: 120 : SD_HWDB_FOREACH_PROPERTY(hwdb, DELL_MODALIAS, key, value) { 55 [ + - ]: 116 : log_debug("B: \"%s\" → \"%s\"", key, value); 56 : 116 : len2 += strlen(key) + strlen(value); 57 : : } 58 : : 59 [ - + ]: 4 : assert_se(len1 == len2); 60 : 4 : } 61 : : 62 : 4 : int main(int argc, char *argv[]) { 63 : : int r; 64 : : 65 : 4 : test_setup_logging(LOG_DEBUG); 66 : : 67 : 4 : r = test_failed_enumerate(); 68 [ - + ]: 4 : if (r < 0) 69 : 0 : return log_tests_skipped_errno(r, "cannot open hwdb"); 70 : : 71 : 4 : test_basic_enumerate(); 72 : : 73 : 4 : return 0; 74 : : }