From d7f6398556ca9eb0caa72f3d57560fef4214f2b8 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Mon, 8 Oct 2001 12:18:38 +0000 Subject: * winsup.api/mmaptest01.c: Add several tests on mmaps. Use libltp. * winsup.api/winsup.exp: Link all tests agains libltp. --- winsup/testsuite/winsup.api/mmaptest01.c | 91 +++++++++++++++++++++++++++----- winsup/testsuite/winsup.api/winsup.exp | 10 ++-- 2 files changed, 82 insertions(+), 19 deletions(-) (limited to 'winsup/testsuite/winsup.api') diff --git a/winsup/testsuite/winsup.api/mmaptest01.c b/winsup/testsuite/winsup.api/mmaptest01.c index 5a14461e6..a48110eb7 100644 --- a/winsup/testsuite/winsup.api/mmaptest01.c +++ b/winsup/testsuite/winsup.api/mmaptest01.c @@ -1,6 +1,9 @@ /* Copyright 2001 Free Software Foundation, Inc. Written by Michael Chastain, + Changes by Corinna Vinschen, : + - Using mkstemp to generate filenames. + - Adding tests This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -50,6 +53,13 @@ #include #include +#include "test.h" +#include "usctest.h" + +char *TCID = "mmaptest01"; /* Test program identifier. */ +int TST_TOTAL = 7; /* Total number of test cases. */ +extern int Tst_count; /* Test Case counter for tst_* routines */ + /* some systems have O_BINARY and some do not */ #ifndef O_BINARY #define O_BINARY 0 @@ -67,43 +77,100 @@ char const line2 [] = "y2 y2 y2 y2 y2 y2 y2 y2 y2 y2 y2 y2 y2 y2 y2 y2 y2\n"; int main () { + int ret = 0; + + char fnam1[32]; + char fnam2[32]; + int fd1; char * buf1; int fd2; char * buf2; + char buf3[20]; + int i; + strcpy (fnam1, "mmaptest01.1.XXXXXX"); + strcpy (fnam2, "mmaptest01.2.XXXXXX"); + /* create file 1 */ - fd1 = open ("y1.txt", O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0644); + //fd1 = open (fnam1, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0644); + fd1 = mkstemp (fnam1); for (i = 0; i < count1; i++) write (fd1, line1, size1); close (fd1); /* create file 2 */ - fd2 = open ("y2.txt", O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0644); + //fd2 = open (fnam2, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0644); + fd2 = mkstemp (fnam2); for (i = 0; i < count2; i++) write (fd2, line2, size2); close (fd2); /* mmap file 1 */ - fd1 = open ("y1.txt", O_RDONLY | O_BINARY, 0644); - buf1 = mmap (0, 4096, PROT_READ, MAP_PRIVATE, fd1, 0); + fd1 = open (fnam1, O_RDONLY | O_BINARY, 0644); + buf1 = mmap (0, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd1, 0); close (fd1); /* mmap file 2 */ - fd2 = open ("y2.txt", O_RDONLY | O_BINARY, 0644); - buf2 = mmap (0, 4096, PROT_READ, MAP_PRIVATE, fd2, 0); + fd2 = open (fnam2, O_RDONLY | O_BINARY, 0644); + buf2 = mmap (0, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd2, 0); close (fd2); /* the buffers have to be different */ - if (buf1 == buf2 || !memcmp (buf1, buf2, 20)) - { - printf ("buffers are not different!\n"); - return 1; - } + Tst_count = 0; + tst_resm (buf1 == buf2 || !memcmp (buf1, buf2, 20) ? TFAIL : TPASS, + "mmap uses unique buffers when mapping different already closed files"); + munmap (buf2, 4096); + + /* mmap file 1 twice with MAP_PRIVATE */ + fd2 = open (fnam1, O_RDONLY | O_BINARY, 0644); + buf2 = mmap (0, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd2, 0); + close (fd2); + + tst_resm (buf1 == buf2 ? TFAIL : TPASS, + "mmap uses different buffers on MAP_PRIVATE mapping"); + + tst_resm (memcmp (buf1, buf2, 20) ? TFAIL : TPASS, + "two private buffers of the same file are identical"); + + buf1[0] = 0x7f; + tst_resm (!memcmp (buf1, buf2, 20) ? TFAIL : TPASS, + "changes are private in MAP_PRIVATE mappings"); + + munmap (buf1, 4096); + munmap (buf2, 4096); + + /* mmap file 1 twice with MAP_SHARED */ + fd1 = open (fnam1, O_RDWR | O_BINARY, 0644); + buf1 = mmap (0, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, fd1, 0); + close (fd1); + + fd2 = open (fnam1, O_RDWR | O_BINARY, 0644); + buf2 = mmap (0, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, fd2, 0); + close (fd2); + + tst_resm (memcmp (buf1, buf2, 20) ? TFAIL : TPASS, + "two shared buffers of the same file are identical"); + + buf1[0] = 0x7f; + tst_resm (memcmp (buf1, buf2, 20) ? TFAIL : TPASS, + "changes are shared between MAP_SHARED mappings of the same file"); + munmap (buf2, 4096); + + fd2 = open (fnam1, O_RDWR | O_BINARY, 0644); + memset (buf3, 0, 20); + read (fd2, buf3, 20); + close (fd2); + + tst_resm (memcmp (buf1, buf3, 20) ? TFAIL : TPASS, + "changes are propagated to the mapped file on MAP_SHARED mapping"); - return 0; + munmap (buf1, 4096); + unlink (fnam1); + unlink (fnam2); + tst_exit (); } diff --git a/winsup/testsuite/winsup.api/winsup.exp b/winsup/testsuite/winsup.api/winsup.exp index 6fb566335..1d45c9527 100644 --- a/winsup/testsuite/winsup.api/winsup.exp +++ b/winsup/testsuite/winsup.api/winsup.exp @@ -7,12 +7,13 @@ if { ! [isnative] } { } set rv "" -set add_includes "" -set add_libs "" set ltp_includes "-I$ltp_includes" set ltp_libs "$rootme/libltp.a" +set add_includes $ltp_includes +set add_libs $ltp_libs + set test_filter "" if { [info exists env(CYGWIN_TESTSUITE_TESTS)] } { @@ -47,11 +48,6 @@ foreach src [glob -nocomplain $srcdir/$subdir/*.c $srcdir/$subdir/*/*.c] { clear_xfail } - if { [regexp "^ltp/" $testcase ] } { - set add_includes $ltp_includes - set add_libs $ltp_libs - } - ws_spawn "$CC -g3 $CFLAGS $src $add_includes $add_libs $runtime_root/binmode.o $runtime_root/new-libcygwin.a -o $base.exe" if { $rv != "" } { verbose -log "$rv" -- cgit v1.2.3