[storage-unittest] Test file list api (fails if some tests has failed before)
Bug: 79992807
Change-Id: I1eb05694540be73ee773ca67f4d333ab6bc48b7c
diff --git a/storage-unittest/main.c b/storage-unittest/main.c
index c908503..b84281a 100644
--- a/storage-unittest/main.c
+++ b/storage-unittest/main.c
@@ -427,6 +427,120 @@
TEST_END;
}
+TEST_P(FileList) {
+ int rc;
+ file_handle_t handle;
+ struct storage_open_dir_state* dir;
+ const char* fname_pat = "test_file_list_%d_file";
+ char file_name[64];
+ char file_name_dir[64];
+ uint8_t read_dir_flags;
+ int i;
+ int file_count = 100;
+
+ TEST_BEGIN(__func__);
+
+ // make sure test file does not exist (expect success or ERR_NOT_FOUND)
+ for (i = 0; i < file_count; i++) {
+ snprintf(file_name, sizeof(file_name), fname_pat, i);
+ rc = storage_delete_file(ss, file_name, STORAGE_OP_COMPLETE);
+ rc = (rc == ERR_NOT_FOUND) ? 0 : rc;
+ EXPECT_EQ(0, rc, "delete test file1");
+ ASSERT_ALL_OK();
+ }
+
+ // one more time (expect ERR_NOT_FOUND)
+ for (i = 0; i < file_count; i++) {
+ snprintf(file_name, sizeof(file_name), fname_pat, i);
+ rc = storage_delete_file(ss, file_name, STORAGE_OP_COMPLETE);
+ EXPECT_EQ(ERR_NOT_FOUND, rc, "delete 1 again");
+ ASSERT_ALL_OK();
+ }
+
+ // test empty dir
+ rc = storage_open_dir(ss, "", &dir);
+ EXPECT_EQ(0, rc, "open_dir");
+ ASSERT_ALL_OK();
+
+ rc = storage_read_dir(ss, dir, &read_dir_flags, file_name_dir,
+ sizeof(file_name_dir));
+ EXPECT_EQ(0, rc, "read_dir");
+ EXPECT_EQ(STORAGE_FILE_LIST_END,
+ read_dir_flags & STORAGE_FILE_LIST_STATE_MASK, "dir flags");
+ ASSERT_ALL_OK();
+
+ storage_close_dir(ss, dir);
+
+ // create file (expect 0)
+ snprintf(file_name, sizeof(file_name), fname_pat, 0);
+ rc = storage_open_file(
+ ss, &handle, file_name,
+ STORAGE_FILE_OPEN_CREATE | STORAGE_FILE_OPEN_CREATE_EXCLUSIVE,
+ STORAGE_OP_COMPLETE);
+ EXPECT_EQ(0, rc, "create test file 1");
+ ASSERT_ALL_OK();
+
+ // close it
+ storage_close_file(handle);
+
+ for (i = 1; i < file_count; i++) {
+ snprintf(file_name, sizeof(file_name), fname_pat, i);
+ rc = storage_open_file(
+ ss, &handle, file_name,
+ STORAGE_FILE_OPEN_CREATE | STORAGE_FILE_OPEN_CREATE_EXCLUSIVE,
+ 0);
+ EXPECT_EQ(0, rc, "create test file 2");
+ ASSERT_ALL_OK();
+
+ // close it
+ storage_close_file(handle);
+ }
+
+ // test read_dir fname1 comitted, fname2 added
+ rc = storage_open_dir(ss, "", &dir);
+ EXPECT_EQ(0, rc, "open_dir");
+ ASSERT_ALL_OK();
+
+ snprintf(file_name, sizeof(file_name), fname_pat, 0);
+ rc = storage_read_dir(ss, dir, &read_dir_flags, file_name_dir,
+ sizeof(file_name_dir));
+ EXPECT_EQ(0, rc, "read_dir");
+ EXPECT_EQ(STORAGE_FILE_LIST_COMMITTED,
+ read_dir_flags & STORAGE_FILE_LIST_STATE_MASK, "dir flags");
+ EXPECT_EQ(0, strcmp(file_name, file_name_dir), "file name");
+ ASSERT_ALL_OK();
+
+ for (i = 1; i < file_count; i++) {
+ rc = storage_read_dir(ss, dir, &read_dir_flags, file_name_dir,
+ sizeof(file_name_dir));
+ EXPECT_EQ(0, rc, "read_dir");
+ EXPECT_EQ(STORAGE_FILE_LIST_ADDED,
+ read_dir_flags & STORAGE_FILE_LIST_STATE_MASK, "dir flags");
+ EXPECT_NE(0, strcmp(file_name, file_name_dir), "file name");
+ ASSERT_ALL_OK();
+ }
+
+ rc = storage_read_dir(ss, dir, &read_dir_flags, file_name_dir,
+ sizeof(file_name_dir));
+ EXPECT_EQ(0, rc, "read_dir");
+ EXPECT_EQ(STORAGE_FILE_LIST_END,
+ read_dir_flags & STORAGE_FILE_LIST_STATE_MASK, "end dir flag");
+ ASSERT_ALL_OK();
+
+ storage_close_dir(ss, dir);
+
+ rc = storage_end_transaction(ss, true);
+ EXPECT_EQ(0, rc, "commit");
+ ASSERT_ALL_OK();
+
+test_abort:
+ for (i = 0; i < file_count; i++) {
+ snprintf(file_name, sizeof(file_name), fname_pat, i);
+ rc = storage_delete_file(ss, file_name, STORAGE_OP_COMPLETE);
+ }
+ TEST_END;
+}
+
TEST_P(DeleteOpened) {
int rc;
file_handle_t handle;
@@ -2759,6 +2873,7 @@
RUN_TEST_P(port, CreateDelete);
RUN_TEST_P(port, CreateMoveDelete);
+ RUN_TEST_P(port, FileList);
RUN_TEST_P(port, DeleteOpened);
RUN_TEST_P(port, OpenNoCreate);
RUN_TEST_P(port, OpenOrCreate);