]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test-umount: add a simple test for swap_list_get()
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 14 Mar 2018 11:06:34 +0000 (12:06 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 16 Mar 2018 09:12:50 +0000 (10:12 +0100)
The implementation seems buggy:
/* test_swap_list("/home/zbyszek/src/systemd/test/test-umount/example.swaps") */
path=0 o= f=0x0 try-ro=no dev=0:0
path=/some/swapfile2 o= f=0x0 try-ro=no dev=0:0
path=/some/swapfile o= f=0x0 try-ro=no dev=0:0
path=/dev/dm-2 o= f=0x0 try-ro=no dev=0:0

src/core/umount.c
src/core/umount.h
src/test/test-umount.c
test/meson.build
test/test-umount/example.swaps [new file with mode: 0644]

index 0565fd537527f157704b2ed9c43909b023acff48..6dc88ca7bbddb1b80a8940bc7146cb686614d1c3 100644 (file)
@@ -179,14 +179,14 @@ int mount_points_list_get(const char *mountinfo, MountPoint **head) {
         return 0;
 }
 
-static int swap_list_get(MountPoint **head) {
+int swap_list_get(const char *swaps, MountPoint **head) {
         _cleanup_fclose_ FILE *proc_swaps = NULL;
         unsigned int i;
         int r;
 
         assert(head);
 
-        proc_swaps = fopen("/proc/swaps", "re");
+        proc_swaps = fopen(swaps ?: "/proc/swaps", "re");
         if (!proc_swaps)
                 return (errno == ENOENT) ? 0 : -errno;
 
@@ -680,7 +680,7 @@ int swapoff_all(bool *changed) {
 
         LIST_HEAD_INIT(swap_list_head);
 
-        r = swap_list_get(&swap_list_head);
+        r = swap_list_get(NULL, &swap_list_head);
         if (r < 0)
                 return r;
 
index fa1c6de90df44587c53e9efbbad21855ff450d3f..dee324c83bf52c35d2b2de5b246ec63afe70d34d 100644 (file)
@@ -42,3 +42,4 @@ typedef struct MountPoint {
 
 int mount_points_list_get(const char *mountinfo, MountPoint **head);
 void mount_points_list_free(MountPoint **head);
+int swap_list_get(const char *swaps, MountPoint **head);
index dfafc71acf86818521516aae2212e54ef746c661..e1d56291acbbf40073156767cd3bb2237104a95f 100644 (file)
@@ -24,6 +24,24 @@ static void test_mount_points_list(const char *fname) {
                           major(m->devnum), minor(m->devnum));
 }
 
+static void test_swap_list(const char *fname) {
+        _cleanup_(mount_points_list_free) LIST_HEAD(MountPoint, mp_list_head);
+        MountPoint *m;
+
+        log_info("/* %s(\"%s\") */", __func__, fname ?: "/proc/self/mountinfo");
+
+        LIST_HEAD_INIT(mp_list_head);
+        assert_se(swap_list_get(fname, &mp_list_head) >= 0);
+
+        LIST_FOREACH(mount_point, m, mp_list_head)
+                log_debug("path=%s o=%s f=0x%lx try-ro=%s dev=%u:%u",
+                          m->path,
+                          strempty(m->remount_options),
+                          m->remount_flags,
+                          yes_no(m->try_remount_ro),
+                          major(m->devnum), minor(m->devnum));
+}
+
 int main(int argc, char **argv) {
         log_set_max_level(LOG_DEBUG);
         log_parse_environment();
@@ -33,4 +51,7 @@ int main(int argc, char **argv) {
         test_mount_points_list(get_testdata_dir("/test-umount/empty.mountinfo"));
         test_mount_points_list(get_testdata_dir("/test-umount/garbled.mountinfo"));
         test_mount_points_list(get_testdata_dir("/test-umount/rhbug-1554943.mountinfo"));
+
+        test_swap_list(NULL);
+        test_swap_list(get_testdata_dir("/test-umount/example.swaps"));
 }
index 51c47793e087210b112254da0faa7fe40792b585..99103e95708abc3fc82b5843ce37294a6eeaf0a2 100644 (file)
@@ -177,6 +177,7 @@ test_data_files = '''
         test-umount/empty.mountinfo
         test-umount/garbled.mountinfo
         test-umount/rhbug-1554943.mountinfo
+        test-umount/example.swaps
 '''.split()
 
 if conf.get('ENABLE_RESOLVE') == 1
diff --git a/test/test-umount/example.swaps b/test/test-umount/example.swaps
new file mode 100644 (file)
index 0000000..9de4e3e
--- /dev/null
@@ -0,0 +1,4 @@
+Filename                               Type            Size    Used    Priority
+/dev/dm-2                               partition      8151036 2283436 -2
+/some/swapfile                          file            111     111     0
+/some/swapfile2 (deleted)               file            111     111     0