fs-tests: integck: always check clean data
authorArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
Tue, 24 May 2011 14:46:11 +0000 (17:46 +0300)
committerArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
Fri, 27 May 2011 12:55:07 +0000 (15:55 +0300)
Check the clean data after every emulated power cut, not only when
'create_test_data()'/'update_test_data()' succeed. This required some minor
re-work.

Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
tests/fs-tests/integrity/integck.c

index 045d63db5028f358afb558fd3ed8d91fd2a7e2c9..0cb81b0ef0e88d2f371d105c9256aaca7003704d 100644 (file)
@@ -2683,7 +2683,10 @@ static void read_all(const char *dir_name)
        assert(args.power_cut_mode);
 
        dir = opendir(dir_name);
-       CHECK(dir != NULL);
+       if (!dir) {
+               errmsg("cannot open %s", dir_name);
+               CHECK(0);
+       }
        CHECK(getcwd(buf, PATH_MAX) != NULL);
        CHECK(chdir(dir_name) == 0);
 
@@ -2723,12 +2726,11 @@ static int integck(void)
        long rpt;
 
        CHECK(chdir(fsinfo.mount_point) == 0);
+       assert(!top_dir);
 
        /* Create our top directory */
        if (chdir(fsinfo.test_dir) == 0) {
                CHECK(chdir("..") == 0);
-               if (args.power_cut_mode)
-                       read_all(fsinfo.test_dir);
                ret = rm_minus_rf_dir(fsinfo.test_dir);
                if (ret)
                        return -1;
@@ -2740,6 +2742,14 @@ static int integck(void)
                return -1;
        }
 
+       ret = sync_directory(fsinfo.test_dir);
+       if (ret)
+               return -1;
+
+       top_dir = zalloc(sizeof(struct dir_info));
+       top_dir->entry = zalloc(sizeof(struct dir_entry_info));
+       top_dir->entry->name = dup_string(fsinfo.test_dir);
+
        ret = create_test_data();
        if (ret)
                return -1;
@@ -3196,11 +3206,13 @@ static int recover_tested_fs(void)
 
 static void free_test_data(void)
 {
-       close_open_files();
-       free_fs_info(top_dir);
-       free(top_dir->entry->name);
-       free(top_dir->entry);
+       if (top_dir) {
+               free_fs_info(top_dir);
+               free(top_dir->entry->name);
+               free(top_dir->entry);
                free(top_dir);
+               top_dir = NULL;
+       }
 }
 
 int main(int argc, char *argv[])
@@ -3250,11 +3262,8 @@ int main(int argc, char *argv[])
 
        /* Do the actual test */
        for (rpt = 0; ; rpt++) {
-               top_dir = zalloc(sizeof(struct dir_info));
-               top_dir->entry = zalloc(sizeof(struct dir_entry_info));
-               top_dir->entry->name = dup_string(fsinfo.test_dir);
-
                ret = integck();
+
                /*
                 * Iterate forever only in case of power-cut emulation testing.
                 */
@@ -3266,7 +3275,7 @@ int main(int argc, char *argv[])
                CHECK(ret);
                CHECK(errno == EROFS || errno == EIO);
 
-               free_test_data();
+               close_open_files();
 
                do {
                        ret = recover_tested_fs();
@@ -3280,6 +3289,17 @@ int main(int argc, char *argv[])
                         */
                } while (ret);
 
+               CHECK(chdir(fsinfo.mount_point) == 0);
+
+               /* Make sure everything is readable after an emulated power cut */
+               if (top_dir) {
+                       /* Check the clean data */
+                       check_tested_fs();
+                       read_all(fsinfo.test_dir);
+               }
+
+               free_test_data();
+
                /*
                 * The file-system became read-only and we are in power cut
                 * testing mode. Re-mount the file-system and re-start the
@@ -3290,6 +3310,7 @@ int main(int argc, char *argv[])
 
        }
 
+       close_open_files();
        free_test_data();
 
 out_free: