diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2001-10-08 16:18:38 +0400 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2001-10-08 16:18:38 +0400 |
commit | d7f6398556ca9eb0caa72f3d57560fef4214f2b8 (patch) | |
tree | 7a30228d5d7756600ed464c1d216a4cd9670dbc6 | |
parent | 97405ef5b07997c805ebd2a6c3ecbe4440c92346 (diff) |
* winsup.api/mmaptest01.c: Add several tests on mmaps. Use libltp.
* winsup.api/winsup.exp: Link all tests agains libltp.
-rw-r--r-- | winsup/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | winsup/testsuite/winsup.api/mmaptest01.c | 91 | ||||
-rw-r--r-- | winsup/testsuite/winsup.api/winsup.exp | 10 |
3 files changed, 87 insertions, 19 deletions
diff --git a/winsup/testsuite/ChangeLog b/winsup/testsuite/ChangeLog index 1d39325c4..8dae33417 100644 --- a/winsup/testsuite/ChangeLog +++ b/winsup/testsuite/ChangeLog @@ -1,3 +1,8 @@ +Mon Oct 8 14:15:00 2001 Corinna Vinschen <corinna@vinschen.de> + + * winsup.api/mmaptest01.c: Add several tests on mmaps. Use libltp. + * winsup.api/winsup.exp: Link all tests agains libltp. + Fri Oct 5 11:15:55 2001 Christopher Faylor <cgf@cygnus.com> * winsup.api/nullgetcwd.c: New file. Check that NULL first argument to 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, <chastain@redhat.com> + Changes by Corinna Vinschen, <corinna@vinschen.de>: + - 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 <stdio.h> #include <stdlib.h> +#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" |