Skip to content

Commit 209294a

Browse files
committed
test: add more tests for sd_device_new_from_xxx()
1 parent e418f96 commit 209294a

File tree

1 file changed

+95
-24
lines changed

1 file changed

+95
-24
lines changed

src/libsystemd/sd-device/test-sd-device.c

Lines changed: 95 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,65 +7,136 @@
77
#include "errno-util.h"
88
#include "hashmap.h"
99
#include "nulstr-util.h"
10+
#include "path-util.h"
1011
#include "string-util.h"
1112
#include "tests.h"
1213
#include "time-util.h"
1314

1415
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;
1719
dev_t devnum;
1820
usec_t usec;
1921
int i, r;
2022

2123
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);
2229

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);
2534

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);
2872

2973
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);
3196

3297
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);
34100

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);
37112

38113
assert_se(sd_device_get_devpath(d, &val) >= 0);
39114

40-
r = sd_device_get_devname(d, &val);
115+
r = sd_device_get_devtype(d, &val);
41116
assert_se(r >= 0 || r == -ENOENT);
42117

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);
44120

45121
r = sd_device_get_sysnum(d, &val);
46122
assert_se(r >= 0 || r == -ENOENT);
47123

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) {
51126
r = sd_device_get_usec_since_initialized(d, &usec);
52127
assert_se((r >= 0 && usec > 0) || r == -ENODATA);
53-
}
128+
} else
129+
assert(r == 0);
54130

55131
r = sd_device_get_sysattr_value(d, "name_assign_type", &val);
56132
assert_se(r >= 0 || ERRNO_IS_PRIVILEGE(r) || IN_SET(r, -ENOENT, -EINVAL));
57133

58134
r = sd_device_get_property_value(d, "ID_NET_DRIVER", &val);
59135
assert_se(r >= 0 || r == -ENOENT);
60136

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);
69140
assert_se(streq(syspath, val));
70141

71142
log_info("syspath:%s subsystem:%s id:%s initialized:%s", syspath, strna(subsystem), id, yes_no(i));

0 commit comments

Comments
 (0)