From 8a6b5ffcac44a110f7b8229f20998481579d1a1a Mon Sep 17 00:00:00 2001 From: Victor Date: Sat, 2 Dec 2023 21:06:04 -0800 Subject: [PATCH] add renameTest and revise .. name from subdirectory(underconstruct) --- lib/files.cpp | 8 ++++++-- test/layer2_API_dir.cpp | 28 ++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/lib/files.cpp b/lib/files.cpp index 77705e5..49a0442 100644 --- a/lib/files.cpp +++ b/lib/files.cpp @@ -790,10 +790,11 @@ int FilesOperation::fischl_rename(const char *old_path, const char *new_path, un RenameInfo rename_info; rename_info.exchangeExist = false; rename_info.oldParentNode = fischl_find_entry(root_node, oldParentPath); - rename_info.oldFileNode = fischl_find_entry(rename_info.oldParentNode->subdirectory, filename); + //if path end with / means to rename directory + rename_info.oldFileNode = strlen(filename)? fischl_find_entry(rename_info.oldParentNode->subdirectory, filename):rename_info.oldParentNode; if (rename_info.oldFileNode == NULL) { - printf("path %s not found by fischl_find_entry\n", old_path); + fprintf(stderr,"[%s ,%d] path %s not found by fischl_find_entry\n",__func__,__LINE__, old_path); free(pathdup); return -1; } @@ -832,7 +833,10 @@ int FilesOperation::fischl_rename(const char *old_path, const char *new_path, un // Normal rename logic if no flags are specified; can overwirte // Hard Disk rename + if(rename_info.oldFileNode->subdirectory != NULL){//secure its directory + //remove its record from subdirectory; find .. from subdirectory + } // remove its record from parent INode_Data parent_INode; parent_INode.inode_num = rename_info.oldParentNode->inode_number; diff --git a/test/layer2_API_dir.cpp b/test/layer2_API_dir.cpp index 6e83f33..c730e7b 100644 --- a/test/layer2_API_dir.cpp +++ b/test/layer2_API_dir.cpp @@ -206,6 +206,34 @@ TEST(FileOperationTest, UnlinkTest) { printf("/AAA...AAA is inode %llu, it is a file\n", filelong); } +TEST(FileOperationTest, renameTest){ + struct fuse_file_info fi; + char read_buffer[IO_BLOCK_SIZE] = {0}; + + u_int64_t get_inode_num = fsop->disk_namei("/test"); + fprintf(stderr,"[%s ,%d] /test inode %d\n",__func__,__LINE__,get_inode_num); + /*Cache are not yet implemented*/ + // fsop->fischl_open("/test", &fi); + // fprintf(stderr,"[%s ,%d] fi.fh %d\n",__func__,__LINE__,fi.fh); + // fsop->fischl_read("/test", read_buffer, sizeof(read_buffer), 0, &fi); + // EXPECT_EQ(read_buffer[0], '1'); + + EXPECT_EQ(fsop->fischl_rename("/test", "/test123", 0),0);//defualt + EXPECT_EQ(fsop->disk_namei("/test123"),get_inode_num); + get_inode_num = fsop->disk_namei("/test");//should be failed becuase cannot find + fprintf(stderr,"[%s ,%d] /test inode %d\n",__func__,__LINE__,get_inode_num); + /*Cache are not yet implemented*/ + // fsop->fischl_open("/test123", &fi); + // fprintf(stderr,"[%s ,%d] fi.fh %d\n",__func__,__LINE__,fi.fh); + // fsop->fischl_read("/test123", read_buffer, sizeof(read_buffer), 0, &fi); + // EXPECT_EQ(read_buffer[0], '1'); + /*Read with hard disk*/ + INode_Data inode; + inode.inode_num = fsop->disk_namei("/test123"); + fs->inode_manager->load_inode(&inode); + fs->read(&inode, read_buffer, sizeof(read_buffer), 0); + EXPECT_EQ(read_buffer[0], '1'); +} int main(int argc, char **argv) { srand(time(NULL)); // Seed the random number generator