diff --git a/tools/regression/sockets/sendfile/sendfile.c b/tools/regression/sockets/sendfile/sendfile.c index c815824..0b27d95 100644 --- a/tools/regression/sockets/sendfile/sendfile.c +++ b/tools/regression/sockets/sendfile/sendfile.c @@ -27,6 +27,7 @@ */ #include +#include #include #include #include @@ -59,6 +60,7 @@ #define TEST_PORT 5678 #define TEST_MAGIC 0x4440f7bb #define TEST_PAGES 4 +#define TEST_EXTRA 100 #define TEST_SECONDS 30 struct test_header { @@ -345,7 +347,7 @@ run_parent(void) const int pagesize = getpagesize(); - struct sendfile_test tests[10] = { + struct sendfile_test tests[11] = { { .hdr_length = 0, .offset = 0, .length = 1 }, { .hdr_length = 0, .offset = 0, .length = pagesize }, { .hdr_length = 0, .offset = 1, .length = 1 }, @@ -355,12 +357,13 @@ run_parent(void) { .hdr_length = 0, .offset = 0, .length = 0 }, { .hdr_length = 0, .offset = pagesize, .length = 0 }, { .hdr_length = 0, .offset = 2*pagesize, .length = 0 }, - { .hdr_length = 0, .offset = TEST_PAGES*pagesize, .length = 0 } + { .hdr_length = 0, .offset = TEST_PAGES*pagesize, .length = 0 }, + { .hdr_length = 0, .offset = 0, .length = TEST_PAGES*pagesize + TEST_EXTRA } }; - printf("1..10\n"); + printf("1..11\n"); - for (test_num = 1; test_num <= 10; test_num++) { + for (test_num = 1; test_num <= 11; test_num++) { pid = fork(); if (pid == -1) { @@ -412,22 +415,24 @@ main(void) { char *page_buffer; int pagesize; + int i; ssize_t len; + caddr_t va; *path = '\0'; pagesize = getpagesize(); - page_buffer = malloc(TEST_PAGES * pagesize); + page_buffer = malloc(TEST_PAGES * pagesize + TEST_EXTRA); if (page_buffer == NULL) FAIL_ERR("malloc") - bzero(page_buffer, TEST_PAGES * pagesize); + bzero(page_buffer, TEST_PAGES * pagesize + TEST_EXTRA); snprintf(path, PATH_MAX, "/tmp/sendfile.XXXXXXXXXXXX"); file_fd = mkstemp(path); atexit(cleanup); - len = write(file_fd, page_buffer, TEST_PAGES * pagesize); - if (len < 0) + len = write(file_fd, page_buffer, TEST_PAGES * pagesize + TEST_EXTRA); + if (len != TEST_PAGES * pagesize + TEST_EXTRA) FAIL_ERR("write") len = lseek(file_fd, 0, SEEK_SET); @@ -437,5 +442,19 @@ main(void) FAIL("len != 0") run_parent(); +#if 0 + printf("read test\n"); + len = read(file_fd, page_buffer, TEST_PAGES * pagesize + TEST_EXTRA); + if (len != TEST_PAGES * pagesize + TEST_EXTRA) + FAIL_ERR("read") +#endif + printf("mmap test\n"); + va = mmap(NULL, TEST_PAGES * pagesize + TEST_EXTRA, PROT_READ|PROT_WRITE, MAP_SHARED, file_fd, 0); + if (va == NULL) + FAIL_ERR("mmap"); + for (i = 0; i < TEST_PAGES * pagesize + TEST_EXTRA; i++) + if (page_buffer[i] != va[i]) + FAIL_ERR("mmap read"); + return (0); }