Compare commits

...

1 Commits

Author SHA1 Message Date
Victor
8a6b5ffcac add renameTest and revise .. name from subdirectory(underconstruct) 2023-12-02 21:06:04 -08:00
2 changed files with 34 additions and 2 deletions

View File

@ -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;

View File

@ -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