|
7 | 7 | #include "errno-util.h" |
8 | 8 | #include "hashmap.h" |
9 | 9 | #include "nulstr-util.h" |
| 10 | +#include "path-util.h" |
10 | 11 | #include "string-util.h" |
11 | 12 | #include "tests.h" |
12 | 13 | #include "time-util.h" |
13 | 14 |
|
14 | 15 | static void test_sd_device_one(sd_device *d) { |
15 | | - _cleanup_(sd_device_unrefp) sd_device *device_from_id = NULL; |
16 | | - const char *syspath, *subsystem, *id, *val; |
| 16 | + _cleanup_(sd_device_unrefp) sd_device *dev = NULL; |
| 17 | + const char *syspath, *sysname, *subsystem = NULL, *id, *devname, *val; |
| 18 | + bool is_block = false; |
17 | 19 | dev_t devnum; |
18 | 20 | usec_t usec; |
19 | 21 | int i, r; |
20 | 22 |
|
21 | 23 | assert_se(sd_device_get_syspath(d, &syspath) >= 0); |
| 24 | + assert_se(path_startswith(syspath, "/sys")); |
| 25 | + assert_se(sd_device_new_from_syspath(&dev, syspath) >= 0); |
| 26 | + assert_se(sd_device_get_syspath(dev, &val) >= 0); |
| 27 | + assert_se(streq(syspath, val)); |
| 28 | + dev = sd_device_unref(dev); |
22 | 29 |
|
23 | | - r = sd_device_get_subsystem(d, &subsystem); |
24 | | - assert_se(r >= 0 || r == -ENOENT); |
| 30 | + assert_se(sd_device_new_from_path(&dev, syspath) >= 0); |
| 31 | + assert_se(sd_device_get_syspath(dev, &val) >= 0); |
| 32 | + assert_se(streq(syspath, val)); |
| 33 | + dev = sd_device_unref(dev); |
25 | 34 |
|
26 | | - r = sd_device_get_devtype(d, &val); |
27 | | - assert_se(r >= 0 || r == -ENOENT); |
| 35 | + assert_se(sd_device_get_sysname(d, &sysname) >= 0); |
| 36 | + r = sd_device_get_subsystem(d, &subsystem); |
| 37 | + if (r >= 0) { |
| 38 | + const char *name; |
| 39 | + |
| 40 | + if (streq(subsystem, "drivers")) |
| 41 | + name = strjoina(d->driver_subsystem, ":", sysname); |
| 42 | + else |
| 43 | + name = sysname; |
| 44 | + assert_se(sd_device_new_from_subsystem_sysname(&dev, subsystem, name) >= 0); |
| 45 | + assert_se(sd_device_get_syspath(dev, &val) >= 0); |
| 46 | + assert_se(streq(syspath, val)); |
| 47 | + dev = sd_device_unref(dev); |
| 48 | + } else |
| 49 | + assert_se(r == -ENOENT); |
| 50 | + |
| 51 | + is_block = streq_ptr(subsystem, "block"); |
| 52 | + |
| 53 | + r = sd_device_get_devname(d, &devname); |
| 54 | + if (r >= 0) { |
| 55 | + r = sd_device_new_from_devname(&dev, devname); |
| 56 | + if (r >= 0) { |
| 57 | + assert_se(sd_device_get_syspath(dev, &val) >= 0); |
| 58 | + assert_se(streq(syspath, val)); |
| 59 | + dev = sd_device_unref(dev); |
| 60 | + } else |
| 61 | + assert_se(r == -ENODEV || ERRNO_IS_PRIVILEGE(r)); |
| 62 | + |
| 63 | + r = sd_device_new_from_path(&dev, devname); |
| 64 | + if (r >= 0) { |
| 65 | + assert_se(sd_device_get_syspath(dev, &val) >= 0); |
| 66 | + assert_se(streq(syspath, val)); |
| 67 | + dev = sd_device_unref(dev); |
| 68 | + } else |
| 69 | + assert_se(r == -ENODEV || ERRNO_IS_PRIVILEGE(r)); |
| 70 | + } else |
| 71 | + assert_se(r == -ENOENT); |
28 | 72 |
|
29 | 73 | r = sd_device_get_devnum(d, &devnum); |
30 | | - assert_se((r >= 0 && major(devnum) > 0) || r == -ENOENT); |
| 74 | + if (r >= 0) { |
| 75 | + _cleanup_free_ char *p = NULL; |
| 76 | + |
| 77 | + assert_se(major(devnum) > 0); |
| 78 | + |
| 79 | + assert_se(sd_device_new_from_devnum(&dev, is_block ? 'b' : 'c', devnum) >= 0); |
| 80 | + assert_se(sd_device_get_syspath(dev, &val) >= 0); |
| 81 | + assert_se(streq(syspath, val)); |
| 82 | + dev = sd_device_unref(dev); |
| 83 | + |
| 84 | + assert_se(asprintf(&p, "/dev/%s/%u:%u", is_block ? "block" : "char", major(devnum), minor(devnum)) >= 0); |
| 85 | + assert_se(sd_device_new_from_devname(&dev, p) >= 0); |
| 86 | + assert_se(sd_device_get_syspath(dev, &val) >= 0); |
| 87 | + assert_se(streq(syspath, val)); |
| 88 | + dev = sd_device_unref(dev); |
| 89 | + |
| 90 | + assert_se(sd_device_new_from_path(&dev, p) >= 0); |
| 91 | + assert_se(sd_device_get_syspath(dev, &val) >= 0); |
| 92 | + assert_se(streq(syspath, val)); |
| 93 | + dev = sd_device_unref(dev); |
| 94 | + } else |
| 95 | + assert_se(r == -ENOENT); |
31 | 96 |
|
32 | 97 | r = sd_device_get_ifindex(d, &i); |
33 | | - assert_se((r >= 0 && i > 0) || r == -ENOENT); |
| 98 | + if (r >= 0) { |
| 99 | + assert_se(i > 0); |
34 | 100 |
|
35 | | - r = sd_device_get_driver(d, &val); |
36 | | - assert_se(r >= 0 || r == -ENOENT); |
| 101 | + assert_se(sd_device_new_from_ifindex(&dev, i) >= 0); |
| 102 | + assert_se(sd_device_get_syspath(dev, &val) >= 0); |
| 103 | + assert_se(streq(syspath, val)); |
| 104 | + dev = sd_device_unref(dev); |
| 105 | + |
| 106 | + assert_se(sd_device_new_from_ifname(&dev, sysname) >= 0); |
| 107 | + assert_se(sd_device_get_syspath(dev, &val) >= 0); |
| 108 | + assert_se(streq(syspath, val)); |
| 109 | + dev = sd_device_unref(dev); |
| 110 | + } else |
| 111 | + assert_se(r == -ENOENT); |
37 | 112 |
|
38 | 113 | assert_se(sd_device_get_devpath(d, &val) >= 0); |
39 | 114 |
|
40 | | - r = sd_device_get_devname(d, &val); |
| 115 | + r = sd_device_get_devtype(d, &val); |
41 | 116 | assert_se(r >= 0 || r == -ENOENT); |
42 | 117 |
|
43 | | - assert_se(sd_device_get_sysname(d, &val) >= 0); |
| 118 | + r = sd_device_get_driver(d, &val); |
| 119 | + assert_se(r >= 0 || r == -ENOENT); |
44 | 120 |
|
45 | 121 | r = sd_device_get_sysnum(d, &val); |
46 | 122 | assert_se(r >= 0 || r == -ENOENT); |
47 | 123 |
|
48 | | - i = sd_device_get_is_initialized(d); |
49 | | - assert_se(i >= 0); |
50 | | - if (i > 0) { |
| 124 | + r = sd_device_get_is_initialized(d); |
| 125 | + if (r > 0) { |
51 | 126 | r = sd_device_get_usec_since_initialized(d, &usec); |
52 | 127 | assert_se((r >= 0 && usec > 0) || r == -ENODATA); |
53 | | - } |
| 128 | + } else |
| 129 | + assert(r == 0); |
54 | 130 |
|
55 | 131 | r = sd_device_get_sysattr_value(d, "name_assign_type", &val); |
56 | 132 | assert_se(r >= 0 || ERRNO_IS_PRIVILEGE(r) || IN_SET(r, -ENOENT, -EINVAL)); |
57 | 133 |
|
58 | 134 | r = sd_device_get_property_value(d, "ID_NET_DRIVER", &val); |
59 | 135 | assert_se(r >= 0 || r == -ENOENT); |
60 | 136 |
|
61 | | - r = device_get_device_id(d, &id); |
62 | | - assert_se(r >= 0); |
63 | | - |
64 | | - r = sd_device_new_from_device_id(&device_from_id, id); |
65 | | - assert_se(r >= 0); |
66 | | - |
67 | | - r = sd_device_get_syspath(device_from_id, &val); |
68 | | - assert_se(r >= 0); |
| 137 | + assert_se(device_get_device_id(d, &id) >= 0); |
| 138 | + assert_se(sd_device_new_from_device_id(&dev, id) >= 0); |
| 139 | + assert_se(sd_device_get_syspath(dev, &val) >= 0); |
69 | 140 | assert_se(streq(syspath, val)); |
70 | 141 |
|
71 | 142 | log_info("syspath:%s subsystem:%s id:%s initialized:%s", syspath, strna(subsystem), id, yes_no(i)); |
|
0 commit comments