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