int main(int argc, char**argv){ CREATE_FILE(TEST_FILE, DATA_FOR_FILE, DATASIZE_FOR_FILE); /*unlink*/ REMOVE_EXISTING_FILEPATH(TEST_FILE); CREATE_FILE(TEST_FILE2, DATA_FOR_FILE, DATASIZE_FOR_FILE); int ret; TEST_OPERATION_RESULT( link(TEST_FILE2, TEST_FILE), &ret, ret!=-1); /*now we have 2 hardlinks for a single file*/ /*compare files*/ int fd1, fd2; char *data1, *data2; off_t filesize1, filesize2; MMAP_READONLY_SHARED_FILE(TEST_FILE, 0, &fd1, data1); MMAP_READONLY_SHARED_FILE(TEST_FILE2, 0, &fd2, data2); GET_FILE_SIZE(TEST_FILE, &filesize1); GET_FILE_SIZE(TEST_FILE2, &filesize2); TEST_OPERATION_RESULT( (filesize1==filesize2), &ret, ret==1); CMP_MEM_DATA(data1, data2, filesize1); //check stat data struct stat st1; struct stat st2; TEST_OPERATION_RESULT( stat(TEST_FILE, &st1), &ret, ret==0); TEST_OPERATION_RESULT( stat(TEST_FILE2, &st2), &ret, ret==0); TEST_OPERATION_RESULT( st1.st_nlink==st2.st_nlink, &ret, ret!=0); TEST_OPERATION_RESULT( st1.st_ino==st2.st_ino, &ret, ret!=0); MUNMAP_FILE(data1, filesize1); MUNMAP_FILE(data2, filesize2); CLOSE_FILE(fd1); CLOSE_FILE(fd2); test_zrt_issue_67(TMP_TEST_DIR, TMP_TEST_FILE); test_zrt_issue_67(TMP_TEST_DIR, TMP_TEST_FILE); test_zrt_issue_70(); test_zrt_issue_77(TMP_TEST_DIR, TMP_TEST_FILE); return 0; }
int main(int argc, char **argv) { int res; int datalen, datalen1; char testpath[PATH_MAX]; snprintf(testpath, sizeof(testpath), "/test/%s", FILENAME_WITH_DYNAMIC_CONTENTS ); fprintf(stderr, "%s\n", testpath); /*Read files at mountpoint*/ char* contents1 = read_file_contents( testpath, &datalen1 ); CMP_MEM_DATA(MOUNT_CONTENTS, contents1, strlen(MOUNT_CONTENTS) ); char* contents = read_file_contents( FILENAME_WITH_DYNAMIC_CONTENTS, &datalen ); CMP_MEM_DATA(MOUNT_CONTENTS, contents, strlen(MOUNT_CONTENTS) ); TEST_OPERATION_RESULT(strcmp("1", getenv("new")), &res, res==0); struct stat st; TEST_OPERATION_RESULT( lstat("/dev/read-write", &st), &res, res==0 ); TEST_OPERATION_RESULT( (st.st_mode&S_IFCHR)==S_IFCHR, &res, res==1 ); res = zfork(); free(contents); free(contents1); /*After fork it is expected that this file remains unchanged*/ contents1 = read_file_contents( testpath, &datalen1 ); CMP_MEM_DATA(MOUNT_CONTENTS, contents1, strlen(MOUNT_CONTENTS) ); /*After fork it is expected that this file is changed*/ contents = read_file_contents( FILENAME_WITH_DYNAMIC_CONTENTS, &datalen ); CMP_MEM_DATA(REMOUNT_CONTENTS, contents, strlen(REMOUNT_CONTENTS) ); /*After fork env var changed*/ TEST_OPERATION_RESULT(strcmp("2", getenv("new")), &res, res==0); /*After fork channels mapping is changed*/ TEST_OPERATION_RESULT( lstat("/dev/read-write", &st), &res, res==0 ); TEST_OPERATION_RESULT( (st.st_mode&S_IFREG)==S_IFREG, &res, res==1 ); free(contents); free(contents1); return 0; }
void mmap_test(off_t offset) { int fd; char* data; MMAP_READONLY_SHARED_FILE(MMAP_FILE, offset, &fd, data) fprintf(stderr, "expected data:%s\n", DATA_FOR_MMAP+offset); fprintf(stderr, "mmaped data :%s\n", ((char*)data+offset)); off_t filesize; GET_FILE_SIZE(MMAP_FILE, &filesize); CMP_MEM_DATA( DATA_FOR_MMAP+offset, data+offset, filesize-offset ); MUNMAP_FILE(data, filesize); CLOSE_FILE(fd); }