Pass WriteTest with fischl_write

This commit is contained in:
Victor 2023-11-26 14:07:21 -08:00
parent fd175e5470
commit d0659eb379
2 changed files with 9 additions and 23 deletions

View File

@ -467,14 +467,12 @@ int FilesOperation::fischl_write(const char *path, const char *buf, size_t size,
size_t copy_size = std::min(size - bytes_write, IO_BLOCK_SIZE - block_offset); size_t copy_size = std::min(size - bytes_write, IO_BLOCK_SIZE - block_offset);
memcpy(block_buffer + block_offset, buf + bytes_write, copy_size); memcpy(block_buffer + block_offset, buf + bytes_write, copy_size);
write_datablock(inode, block_index, block_buffer); write_datablock(inode, block_index, block_buffer);
fprintf(stderr,"[%s ,%d] inode.size %d\n",__func__,__LINE__, inode.size); // fprintf(stderr,"[%s ,%d] inode.size %d, block_index %d, block_buffer %s\n",__func__,__LINE__, inode.size, block_index, block_buffer);
fprintf(stderr,"[%s ,%d] block_index %d\n",__func__,__LINE__, block_index);
fprintf(stderr,"[%s ,%d] buf %s, block_buffer %s\n",__func__,__LINE__, buf, block_buffer);
bytes_write += copy_size; bytes_write += copy_size;
block_index++; block_index++;
block_offset = 0; // Only the first block might have a non-zero offset block_offset = 0; // Only the first block might have a non-zero offset
} }
inode.inode_save(disk);
return bytes_write; // Return the actual number of bytes read return bytes_write; // Return the actual number of bytes read
} }

View File

@ -66,30 +66,18 @@ TEST(FileOperationTest, WriteTest) {
//file test //file test
get_disk_inum = fsop->disk_namei("/test"); get_disk_inum = fsop->disk_namei("/test");
inode.inode_construct(get_disk_inum, *H); fsop->fischl_open("/test", &fi);
EXPECT_EQ(fi.fh, get_disk_inum);
buffer[0] = '1'; buffer[0] = '1';
fsop->write_datablock(inode, 0, buffer); fsop->fischl_write("/test", buffer, sizeof(buffer), 0, &fi);
inode.inode_save(*H);
/*with fischl_write API*/
// fsop->fischl_open("/test", &fi);
// EXPECT_EQ(fi.fh, get_disk_inum);
// fsop->fischl_write("/test", buffer, sizeof(buffer), 0, &fi);
//other file baz //other file baz
get_disk_inum = fsop->disk_namei("/foo/bar/baz"); get_disk_inum = fsop->disk_namei("/foo/bar/baz");
inode.inode_construct(get_disk_inum, *H);
buffer[0] = '4'; buffer[0] = '4';
fsop->write_datablock(inode, 3, buffer); fsop->fischl_open("/foo/bar/baz", &fi);
EXPECT_EQ(fi.fh, get_disk_inum);
fsop->fischl_write("/foo/bar/baz", buffer, sizeof(buffer), 3*IO_BLOCK_SIZE, &fi);
buffer[0] = '5'; buffer[0] = '5';
fsop->write_datablock(inode, 101, buffer); fsop->fischl_write("/foo/bar/baz", buffer, sizeof(buffer), 101*IO_BLOCK_SIZE, &fi);
inode.inode_save(*H);
// TODO: guard against overwriting directory datablocks
/*with new API*/
// buffer[0] = '4';
// fsop->fischl_open("/foo/bar/baz", &fi);
// EXPECT_EQ(fi.fh, get_disk_inum);
// fsop->fischl_write("/foo/bar/baz", buffer, sizeof(buffer), 3*IO_BLOCK_SIZE, &fi);
// buffer[0] = '5';
// fsop->fischl_write("/foo/bar/baz", buffer, sizeof(buffer), 101*IO_BLOCK_SIZE, &fi);
} }
TEST(FileOperationTest, RamDiskTest) { TEST(FileOperationTest, RamDiskTest) {