diff options
Diffstat (limited to 'src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingW/test3')
3 files changed, 241 insertions, 0 deletions
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingW/test3/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingW/test3/CMakeLists.txt new file mode 100644 index 0000000000..5a54368110 --- /dev/null +++ b/src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingW/test3/CMakeLists.txt @@ -0,0 +1,19 @@ +cmake_minimum_required(VERSION 2.8.12.2) + +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +set(SOURCES + OpenFileMappingW.c +) + +add_executable(paltest_openfilemappingw_test3 + ${SOURCES} +) + +add_dependencies(paltest_openfilemappingw_test3 coreclrpal) + +target_link_libraries(paltest_openfilemappingw_test3 + pthread + m + coreclrpal +) diff --git a/src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingW/test3/OpenFileMappingW.c b/src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingW/test3/OpenFileMappingW.c new file mode 100644 index 0000000000..9c83491f6b --- /dev/null +++ b/src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingW/test3/OpenFileMappingW.c @@ -0,0 +1,210 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +/*============================================================= +** +** Source: openfilemappingw.c (test 3) +** +** Purpose: Positive test the OpenFileMappingW API. +** Call OpenFileMappingW to open a named file-mapping +** object with FILE_MAP_READ access +** +** +**============================================================*/ +#define UNICODE +#include <palsuite.h> + +int __cdecl main(int argc, char *argv[]) +{ + char buf[] = "this is a test"; + char ch[1024]; + HANDLE FileMappingHandle; + HANDLE OpenFileMappingHandle; + HANDLE OpenFileMappingHandle2; + HANDLE lpMapViewAddress; + HANDLE lpMapViewAddress2; + const int LOWORDERSIZE = 1024; + int RetVal = PASS; + WCHAR wpMappingFileObject[] = {'m','y','O','b','j','e','c','t','\0'}; + + + /* Initialize the PAL environment. + */ + if(0 != PAL_Initialize(argc, argv)) + { + return FAIL; + } + + /* Create a unnamed file-mapping object with file handle FileHandle. + */ + FileMappingHandle = CreateFileMapping( + INVALID_HANDLE_VALUE, + NULL, /* not inherited */ + PAGE_READWRITE, /* read and wite */ + 0, /* high-order size */ + LOWORDERSIZE, /* must be non-zero */ + wpMappingFileObject);/* named object */ + + if(NULL == FileMappingHandle) + { + Fail("\nFailed to call CreateFileMapping to create mapping object!\n"); + } + if(GetLastError() == ERROR_ALREADY_EXISTS) + { + Trace("\nFile mapping object already exists!\n"); + RetVal = FAIL; + goto CleanUpOne; + } + + /* Open a named file-mapping object with FILE_MAP_ALL_ACCESS access. + */ + OpenFileMappingHandle = OpenFileMapping( + FILE_MAP_READ, + FALSE, + wpMappingFileObject); + + if(NULL == OpenFileMappingHandle) + { + Trace("\nFailed to Call OpenFileMapping API!\n"); + RetVal = FAIL; + goto CleanUpOne; + } + + /* Open a file mapping with FILE_MAP_ALL_ACCESS access, + * to verify the FILE_MAP_READ. + */ + OpenFileMappingHandle2 = OpenFileMapping( + FILE_MAP_ALL_ACCESS, + FALSE, + wpMappingFileObject); + + if(NULL == OpenFileMappingHandle2) + { + Trace("\nFailed to Call OpenFileMapping API!\n"); + RetVal = FAIL; + goto CleanUpTwo; + } + + /* Test the opened map view. + */ + lpMapViewAddress = MapViewOfFile( + OpenFileMappingHandle, + FILE_MAP_READ, /* access code */ + 0, /* high order offset */ + 0, /* low order offset */ + LOWORDERSIZE); /* number of bytes for map */ + + if(NULL == lpMapViewAddress) + { + Trace("ERROR:%u: Failed to call MapViewOfFile " + "API to map a view of file!\n", + GetLastError()); + RetVal = FAIL; + goto CleanUpThree; + } + + /* Open a map view with FILE_MAP_ALL_ACCESS to verify, + * the FILE_MAP_READ view. + */ + lpMapViewAddress2 = MapViewOfFile( + OpenFileMappingHandle2, + FILE_MAP_ALL_ACCESS, /* access code */ + 0, /* high order offset */ + 0, /* low order offset */ + LOWORDERSIZE); /* number of bytes for map */ + + if(NULL == lpMapViewAddress2) + { + Trace("2ERROR:%u: Failed to call MapViewOfFile " + "API to map a view of file!\n", + GetLastError()); + RetVal = FAIL; + goto CleanUpFour; + } + + /* Write to the Map View. + */ + memcpy(lpMapViewAddress2, buf, strlen(buf)); + /* Read from the Map View. + */ + memcpy(ch, (LPCSTR)lpMapViewAddress, LOWORDERSIZE); + + /* Compare what was written to the Map View, + * to what was read. + */ + if (memcmp(ch, buf, strlen(buf))!= 0) + { + Trace("ERROR: MapViewOfFile not equal to file contents " + "retrieved \"%s\", expected \"%s\".\n", + ch, + buf); + RetVal = FAIL; + goto CleanUpFive; + } + +CleanUpFive: + + /* Unmap the view of file. + */ + if ( UnmapViewOfFile(lpMapViewAddress2) == FALSE ) + { + Trace("ERROR:%u: Failed to UnmapViewOfFile of \"%0x%lx\".\n", + GetLastError(), + lpMapViewAddress2); + RetVal = FAIL; + } + +CleanUpFour: + + /* Unmap the view of file. + */ + if ( UnmapViewOfFile(lpMapViewAddress) == FALSE ) + { + Trace("ERROR:%u: Failed to UnmapViewOfFile of \"%0x%lx\".\n", + GetLastError(), + lpMapViewAddress); + RetVal = FAIL; + } + +CleanUpThree: + + /* Close Handle to opened file mapping. + */ + if ( CloseHandle(OpenFileMappingHandle2) == 0 ) + { + Trace("ERROR:%u: Failed to CloseHandle \"0x%lx\".\n", + GetLastError(), + OpenFileMappingHandle2); + RetVal = FAIL; + } + +CleanUpTwo: + + /* Close Handle to opened file mapping. + */ + if ( CloseHandle(OpenFileMappingHandle) == 0 ) + { + Trace("ERROR:%u: Failed to CloseHandle \"0x%lx\".\n", + GetLastError(), + OpenFileMappingHandle); + RetVal = FAIL; + } + +CleanUpOne: + + /* Close Handle to create file mapping. + */ + if ( CloseHandle(FileMappingHandle) == 0 ) + { + Trace("ERROR:%u: Failed to CloseHandle \"0x%lx\".\n", + GetLastError(), + FileMappingHandle); + RetVal = FAIL; + } + + /* Terminate the PAL. + */ + PAL_TerminateEx(RetVal); + return RetVal; +} diff --git a/src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingW/test3/testinfo.dat b/src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingW/test3/testinfo.dat new file mode 100644 index 0000000000..b4ac69ec36 --- /dev/null +++ b/src/pal/tests/palsuite/filemapping_memmgt/OpenFileMappingW/test3/testinfo.dat @@ -0,0 +1,12 @@ +# Licensed to the .NET Foundation under one or more agreements. +# The .NET Foundation licenses this file to you under the MIT license. +# See the LICENSE file in the project root for more information. + +Version = 1.0 +Section = Filemapping_memmgt +Function = OpenFileMappingW +Name = Positive test for OpenFileMappingW API with FILE_MAP_READ access +TYPE = DEFAULT +EXE1 = openfilemappingw +Description +=Test the OpenFileMappingW with FILE_MAP_READ access |