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