zvfs: testcase重写
This commit is contained in:
78
test/test_two_files.c
Executable file
78
test/test_two_files.c
Executable file
@@ -0,0 +1,78 @@
|
||||
#include "test_utils.h"
|
||||
|
||||
static int test_two_files(const char *path_a, const char *path_b)
|
||||
{
|
||||
printf("\n=== test_two_files ===\n");
|
||||
|
||||
int fd_a = open(path_a, O_CREAT | O_RDWR | O_TRUNC, 0644);
|
||||
if (fd_a < 0) { perror("open A"); return 1; }
|
||||
|
||||
int fd_b = open(path_b, O_CREAT | O_RDWR | O_TRUNC, 0644);
|
||||
if (fd_b < 0) { perror("open B"); return 2; }
|
||||
|
||||
printf("fd_a=%d fd_b=%d\n", fd_a, fd_b);
|
||||
|
||||
const char *data_a = "File-A: Hello World!";
|
||||
const char *data_b = "File-B: Goodbye World!";
|
||||
if (write(fd_a, data_a, strlen(data_a)) < 0) { perror("write A"); return 3; }
|
||||
if (write(fd_b, data_b, strlen(data_b)) < 0) { perror("write B"); return 4; }
|
||||
printf("write A: %s\n", data_a);
|
||||
printf("write B: %s\n", data_b);
|
||||
|
||||
lseek(fd_a, 0, SEEK_SET);
|
||||
lseek(fd_b, 0, SEEK_SET);
|
||||
|
||||
char buf_a[64] = {0};
|
||||
char buf_b[64] = {0};
|
||||
ssize_t r_a = read(fd_a, buf_a, sizeof(buf_a));
|
||||
ssize_t r_b = read(fd_b, buf_b, sizeof(buf_b));
|
||||
|
||||
printf("read A: %zd bytes: %.*s\n", r_a, (int)r_a, buf_a);
|
||||
printf("read B: %zd bytes: %.*s\n", r_b, (int)r_b, buf_b);
|
||||
|
||||
int ok = 1;
|
||||
if (strncmp(buf_a, data_a, strlen(data_a)) != 0) {
|
||||
printf("FAIL: A content mismatch!\n");
|
||||
ok = 0;
|
||||
}
|
||||
if (strncmp(buf_b, data_b, strlen(data_b)) != 0) {
|
||||
printf("FAIL: B content mismatch!\n");
|
||||
ok = 0;
|
||||
}
|
||||
if (ok) {
|
||||
printf("PASS: both files read back correctly\n");
|
||||
}
|
||||
|
||||
lseek(fd_a, 0, SEEK_END);
|
||||
if (write(fd_a, "[A-TAIL]", 8) != 8) { perror("append A"); return 5; }
|
||||
|
||||
lseek(fd_b, 8, SEEK_SET);
|
||||
if (write(fd_b, "Hi! ", 7) != 7) { perror("overwrite B"); return 6; }
|
||||
|
||||
lseek(fd_a, 0, SEEK_SET);
|
||||
lseek(fd_b, 0, SEEK_SET);
|
||||
memset(buf_a, 0, sizeof(buf_a));
|
||||
memset(buf_b, 0, sizeof(buf_b));
|
||||
r_a = read(fd_a, buf_a, sizeof(buf_a));
|
||||
r_b = read(fd_b, buf_b, sizeof(buf_b));
|
||||
printf("after cross-write:\n");
|
||||
printf(" A: %.*s\n", (int)r_a, buf_a);
|
||||
printf(" B: %.*s\n", (int)r_b, buf_b);
|
||||
|
||||
close(fd_a);
|
||||
close(fd_b);
|
||||
unlink(path_a);
|
||||
unlink(path_b);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
char path_a[PATH_MAX];
|
||||
char path_b[PATH_MAX];
|
||||
const char *dir = argc >= 2 ? argv[1] : NULL;
|
||||
make_path(path_a, sizeof(path_a), dir, "file_a.dat");
|
||||
make_path(path_b, sizeof(path_b), dir, "file_b.dat");
|
||||
int rc = test_two_files(path_a, path_b);
|
||||
return report_result("test_two_files", rc);
|
||||
}
|
||||
Reference in New Issue
Block a user