diff options
author | Jiyoung Yun <jy910.yun@samsung.com> | 2016-11-23 19:09:09 +0900 |
---|---|---|
committer | Jiyoung Yun <jy910.yun@samsung.com> | 2016-11-23 19:09:09 +0900 |
commit | 4b4aad7217d3292650e77eec2cf4c198ea9c3b4b (patch) | |
tree | 98110734c91668dfdbb126fcc0e15ddbd93738ca /src/pal/tests/palsuite/file_io/CopyFileW/test3 | |
parent | fa45f57ed55137c75ac870356a1b8f76c84b229c (diff) | |
download | coreclr-4b4aad7217d3292650e77eec2cf4c198ea9c3b4b.tar.gz coreclr-4b4aad7217d3292650e77eec2cf4c198ea9c3b4b.tar.bz2 coreclr-4b4aad7217d3292650e77eec2cf4c198ea9c3b4b.zip |
Imported Upstream version 1.1.0upstream/1.1.0
Diffstat (limited to 'src/pal/tests/palsuite/file_io/CopyFileW/test3')
3 files changed, 231 insertions, 0 deletions
diff --git a/src/pal/tests/palsuite/file_io/CopyFileW/test3/CMakeLists.txt b/src/pal/tests/palsuite/file_io/CopyFileW/test3/CMakeLists.txt new file mode 100644 index 0000000000..52d9aad1c0 --- /dev/null +++ b/src/pal/tests/palsuite/file_io/CopyFileW/test3/CMakeLists.txt @@ -0,0 +1,19 @@ +cmake_minimum_required(VERSION 2.8.12.2) + +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +set(SOURCES + test3.c +) + +add_executable(paltest_copyfilew_test3 + ${SOURCES} +) + +add_dependencies(paltest_copyfilew_test3 coreclrpal) + +target_link_libraries(paltest_copyfilew_test3 + pthread + m + coreclrpal +) diff --git a/src/pal/tests/palsuite/file_io/CopyFileW/test3/test3.c b/src/pal/tests/palsuite/file_io/CopyFileW/test3/test3.c new file mode 100644 index 0000000000..a2eb04c443 --- /dev/null +++ b/src/pal/tests/palsuite/file_io/CopyFileW/test3/test3.c @@ -0,0 +1,196 @@ +// 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: test4.c +** +** Purpose: Tests the PAL implementation of the CopyFileW function +** to see if a file can through different users belonging to +** different groups. +** + +=====================================================================*/ + +/* USECASE + Copy a file from a different user, belonging to a different group to + the the current user, who is a member of the current group. Then check + to see that the current user has the basic access rights to the copied + file. + + Thie original file used is the passwd file in the etc directory of a + BSD machine. This file should exist on all machines. +*/ + +#include <palsuite.h> + +int __cdecl main(int argc, char *argv[]) +{ + +#if WIN32 + return PASS; + +#else + + BOOL bRc = TRUE; + WCHAR szSrcExisting[] = {'/','e','t','c','/','p','a','s','s','w','d','\0'}; + WCHAR szDest[] = {'t','e','m','p','.','t','m','p','\0'}; + WCHAR szStringTest[] = {'M','a','r','r','y',' ','h','a','d',' ','a',' ', + 'l','i','t','t','l','e',' ','l','a','m','b','\0'}; + WCHAR szStringRead[30]; /* large enough for string szStringTest */ + + HANDLE hFile = NULL; + DWORD dwBytesWritten=0; + DWORD dwBytesRead=0; + int size=0; + + if (0 != PAL_Initialize(argc,argv)) + { + return FAIL; + } + + /* copy the file */ + bRc = CopyFileW(szSrcExisting,szDest,TRUE); + if(!bRc) + { + Fail("CopyFileW: Cannot copy a file with error, %u",GetLastError()); + } + + /* try to get file attributes of destination file */ + if (GetFileAttributesW(szDest) == -1) + { + Fail("CopyFileW: GetFileAttributes of destination file " + "failed with error code %u. \n", + GetLastError()); + } + + /* set the attributes of the destination file to normal again */ + bRc = SetFileAttributesW(szDest, FILE_ATTRIBUTE_NORMAL); + if(!bRc) + { + Fail("CopyFileW: ERROR-> Couldn't set file attributes for " + "file %S with error %u\n", szDest, GetLastError()); + } + + /* open the file for write purposes */ + hFile = CreateFileW((WCHAR *)szDest, + GENERIC_WRITE, + 0, + NULL, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + NULL); + + if(hFile == INVALID_HANDLE_VALUE) + { + Fail("CopyFileW: ERROR -> Unable to create file \"%S\".\n", + szDest); + } + + /* To account for the size of a WCHAR is twice that of a char */ + size = wcslen(szStringTest); + size = size*sizeof(WCHAR); + + /* Attempt to write to the file */ + bRc = WriteFile(hFile, + szStringTest, + size, + &dwBytesWritten, + NULL); + + if (!bRc) + { + Trace("CopyFileW: ERROR -> Unable to write to copied file with error " + "%u.\n", GetLastError()); + bRc = CloseHandle(hFile); + if (!bRc) + { + Fail("CopyFileW: ERROR -> Unable to close file \"%S\" with " + "error %u.\n",szDest, GetLastError()); + } + Fail(""); + + } + + /* Close the file handle */ + bRc = CloseHandle(hFile); + if (!bRc) + { + Fail("CopyFileW: ERROR -> Unable to close file \"%S\" with error %u " + ".\n",szDest,GetLastError()); + } + + + /* open the file for read purposes */ + hFile = CreateFileW((WCHAR *)szDest, + GENERIC_READ, + 0, + NULL, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + NULL); + + if(hFile == INVALID_HANDLE_VALUE) + { + Fail("CopyFileW: ERROR -> Unable to create file \"%S\".\n", + szDest); + } + + /* Attempt to read from the file */ + bRc = ReadFile(hFile, + szStringRead, + size, + &dwBytesRead, + NULL); + + if (!bRc) + { + Trace("CopyFileW: ERROR -> Unable to read from copied file with " + "error %u.\n",GetLastError()); + bRc = CloseHandle(hFile); + if (!bRc) + { + Fail("CopyFileW: ERROR -> Unable to close file \"%S\" with " + "error %u.\n",szDest, GetLastError()); + } + Fail(""); + + } + + if(wcsncmp(szStringTest,szStringRead, wcslen(szStringTest)) != 0) + { + Trace("CopyFileW: ERROR -> The string which was written '%S' does not " + "match the string '%S' which was read from the copied file.\n", + szStringTest,szStringRead); + bRc = CloseHandle(hFile); + if (!bRc) + { + Fail("CopyFileW: ERROR -> Unable to close file \"%S\" with " + "error %u.\n",szDest, GetLastError()); + } + Fail(""); + } + + /* Close the file handle */ + bRc = CloseHandle(hFile); + if (!bRc) + { + Fail("CopyFileW: ERROR -> Unable to close file \"%S\" with error %u " + ".\n",szDest,GetLastError()); + } + + /* Remove the temporary file */ + bRc = DeleteFileW(szDest); + if(!bRc) + { + Fail("CopyFileW: Could not remove copied file with error %u.\n", + GetLastError()); + } + + PAL_Terminate(); + return PASS; + +#endif + +} diff --git a/src/pal/tests/palsuite/file_io/CopyFileW/test3/testinfo.dat b/src/pal/tests/palsuite/file_io/CopyFileW/test3/testinfo.dat new file mode 100644 index 0000000000..9fd185dad0 --- /dev/null +++ b/src/pal/tests/palsuite/file_io/CopyFileW/test3/testinfo.dat @@ -0,0 +1,16 @@ +# 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 = file_io +Function = CopyFileW +Name = CopyFileW - checking file attributes maintained (test3) +Type = DEFAULT +EXE1 = test3 +Description += Copy a file from a different user, belonging to a different group to += the the current user, who is a member of the current group. Then check += to see that the current user has the basic access rights to the copied += file. + |