summaryrefslogtreecommitdiff
path: root/tests/fs-tests/integrity
diff options
context:
space:
mode:
Diffstat (limited to 'tests/fs-tests/integrity')
-rw-r--r--tests/fs-tests/integrity/integck.c45
1 files changed, 33 insertions, 12 deletions
diff --git a/tests/fs-tests/integrity/integck.c b/tests/fs-tests/integrity/integck.c
index 045d63d..0cb81b0 100644
--- a/tests/fs-tests/integrity/integck.c
+++ b/tests/fs-tests/integrity/integck.c
@@ -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: