diff options
Diffstat (limited to 'src/pal/tests/palsuite/file_io/GetStdHandle')
7 files changed, 280 insertions, 0 deletions
diff --git a/src/pal/tests/palsuite/file_io/GetStdHandle/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetStdHandle/CMakeLists.txt new file mode 100644 index 0000000000..ef14ea5352 --- /dev/null +++ b/src/pal/tests/palsuite/file_io/GetStdHandle/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 2.8.12.2) + +add_subdirectory(test1) +add_subdirectory(test2) + diff --git a/src/pal/tests/palsuite/file_io/GetStdHandle/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetStdHandle/test1/CMakeLists.txt new file mode 100644 index 0000000000..04bcc5fd67 --- /dev/null +++ b/src/pal/tests/palsuite/file_io/GetStdHandle/test1/CMakeLists.txt @@ -0,0 +1,19 @@ +cmake_minimum_required(VERSION 2.8.12.2) + +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +set(SOURCES + GetStdHandle.c +) + +add_executable(paltest_getstdhandle_test1 + ${SOURCES} +) + +add_dependencies(paltest_getstdhandle_test1 coreclrpal) + +target_link_libraries(paltest_getstdhandle_test1 + pthread + m + coreclrpal +) diff --git a/src/pal/tests/palsuite/file_io/GetStdHandle/test1/GetStdHandle.c b/src/pal/tests/palsuite/file_io/GetStdHandle/test1/GetStdHandle.c new file mode 100644 index 0000000000..f4fe03195d --- /dev/null +++ b/src/pal/tests/palsuite/file_io/GetStdHandle/test1/GetStdHandle.c @@ -0,0 +1,132 @@ +// 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: GetStdHandle.c (test 1) +** +** Purpose: Tests the PAL implementation of the GetStdHandle function. +** +** +**===================================================================*/ + +#include <palsuite.h> + + +int __cdecl main(int argc, char *argv[]) +{ + HANDLE hFile = NULL; + DWORD dwBytesWritten = 0; + DWORD dwFileType; + BOOL bRc = FALSE; + const char* szText = "this is a test of GetStdHandle\n"; + + + if (0 != PAL_Initialize(argc,argv)) + { + return FAIL; + } + + /* + * attempt to get an invalid handle + */ + hFile = GetStdHandle(-2); + if (hFile != INVALID_HANDLE_VALUE) + { + Fail("GetStdHandle: ERROR -> A request for the STD_INPUT_HANDLE " + "returned an invalid handle.\n"); + } + + + /* + * test the STD_INPUT_HANDLE handle + */ + hFile = GetStdHandle(STD_INPUT_HANDLE); + if (hFile == INVALID_HANDLE_VALUE) + { + Fail("GetStdHandle: ERROR -> A request for the STD_INPUT_HANDLE " + "returned an invalid handle.\n"); + } + + /* an attempt to write to the input handle should fail */ + /* I don't know how to automate a read from the input handle */ + bRc = WriteFile(hFile, szText, (DWORD)strlen(szText), &dwBytesWritten, NULL); + if (bRc != FALSE) + { + Fail("GetStdHandle: ERROR -> WriteFile was able to write to " + "STD_INPUT_HANDLE when it should have failed.\n"); + } + + + /* + * test the STD_OUTPUT_HANDLE handle + */ + hFile = GetStdHandle(STD_OUTPUT_HANDLE); + if (hFile == INVALID_HANDLE_VALUE) + { + Fail("GetStdHandle: ERROR -> A request for the STD_OUTPUT_HANDLE " + "returned an invalid handle.\n"); + } + + /* try to write to the output handle */ + bRc = WriteFile(hFile, szText, (DWORD)strlen(szText), &dwBytesWritten, NULL); + if (bRc != TRUE) + { + Fail("GetStdHandle: ERROR -> WriteFile failed to write to " + "STD_OUTPUT_HANDLE with the error %ld\n", + GetLastError()); + } + + + /* test the STD_ERROR_HANDLE handle */ + hFile = GetStdHandle(STD_ERROR_HANDLE); + if (hFile == INVALID_HANDLE_VALUE) + { + Fail("GetStdHandle: ERROR -> A request for the STD_ERROR_HANDLE " + "returned an invalid handle.\n"); + } + + /* try to write to the error handle */ + bRc = WriteFile(hFile, szText, (DWORD)strlen(szText), &dwBytesWritten, NULL); + if (bRc != TRUE) + { + Fail("GetStdHandle: ERROR -> WriteFile failed to write to " + "STD_ERROR_HANDLE with the error %ld\n", + GetLastError()); + } + + /* check if the file type is correct for the handle */ + if((dwFileType = GetFileType(hFile)) != FILE_TYPE_CHAR) + { + Fail("GetStdHandle: ERROR -> GetFileType returned %u for " + "STD_ERROR_HANDLE instead of the expected FILE_TYPE_CHAR (%u).\n", + dwFileType, + FILE_TYPE_CHAR); + } + + /* check to see if we can CloseHandle works on the STD_ERROR_HANDLE */ + if (!CloseHandle(hFile)) + { + Fail("GetStdHandle: ERROR -> CloseHandle failed. GetLastError " + "returned %u.\n", + GetLastError()); + } + + /* try to write to the closed error handle */ + bRc = WriteFile(hFile, + szText, + (DWORD)strlen(szText), + &dwBytesWritten, + NULL); + if (bRc) + { + Fail("GetStdHandle: ERROR -> WriteFile was able to write to the closed" + " STD_ERROR_HANDLE handle.\n"); + } + + + PAL_Terminate(); + return PASS; +} + diff --git a/src/pal/tests/palsuite/file_io/GetStdHandle/test1/testinfo.dat b/src/pal/tests/palsuite/file_io/GetStdHandle/test1/testinfo.dat new file mode 100644 index 0000000000..3f7dbf5f42 --- /dev/null +++ b/src/pal/tests/palsuite/file_io/GetStdHandle/test1/testinfo.dat @@ -0,0 +1,13 @@ +# 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 = GetStdHandle +Name = Positive Test for GetStdHandle (test 1) +Type = DEFAULT +EXE1 = getstdhandle +Description += Test GetStdHandle on a valid/invalid std handles + diff --git a/src/pal/tests/palsuite/file_io/GetStdHandle/test2/CMakeLists.txt b/src/pal/tests/palsuite/file_io/GetStdHandle/test2/CMakeLists.txt new file mode 100644 index 0000000000..97816b4319 --- /dev/null +++ b/src/pal/tests/palsuite/file_io/GetStdHandle/test2/CMakeLists.txt @@ -0,0 +1,19 @@ +cmake_minimum_required(VERSION 2.8.12.2) + +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +set(SOURCES + GetStdHandle.c +) + +add_executable(paltest_getstdhandle_test2 + ${SOURCES} +) + +add_dependencies(paltest_getstdhandle_test2 coreclrpal) + +target_link_libraries(paltest_getstdhandle_test2 + pthread + m + coreclrpal +) diff --git a/src/pal/tests/palsuite/file_io/GetStdHandle/test2/GetStdHandle.c b/src/pal/tests/palsuite/file_io/GetStdHandle/test2/GetStdHandle.c new file mode 100644 index 0000000000..45f5ddd243 --- /dev/null +++ b/src/pal/tests/palsuite/file_io/GetStdHandle/test2/GetStdHandle.c @@ -0,0 +1,79 @@ +// 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: GetStdHandle.c (test 2) +** +** Purpose: Smoke Tests the PAL implementation of the GetStdHandle function. +** +** +**===================================================================*/ + +#include <palsuite.h> + + +int __cdecl main(int argc, char *argv[]) +{ + HANDLE hFile = NULL; + + if (0 != PAL_Initialize(argc,argv)) + { + return FAIL; + } + + /* + * attempt to get an invalid handle + */ + hFile = GetStdHandle(-2); + if (hFile != INVALID_HANDLE_VALUE) + { + Fail("GetStdHandle: ERROR -> A request for the STD_INPUT_HANDLE " + "returned an invalid handle.\n"); + } + + + /* + * test the STD_INPUT_HANDLE handle + */ + hFile = GetStdHandle(STD_INPUT_HANDLE); + if (hFile == INVALID_HANDLE_VALUE) + { + Fail("GetStdHandle: ERROR -> A request for the STD_INPUT_HANDLE " + "returned an invalid handle.\n"); + } + + + /* + * test the STD_OUTPUT_HANDLE handle + */ + hFile = GetStdHandle(STD_OUTPUT_HANDLE); + if (hFile == INVALID_HANDLE_VALUE) + { + Fail("GetStdHandle: ERROR -> A request for the STD_OUTPUT_HANDLE " + "returned an invalid handle.\n"); + } + + /* test the STD_ERROR_HANDLE handle */ + hFile = GetStdHandle(STD_ERROR_HANDLE); + if (hFile == INVALID_HANDLE_VALUE) + { + Fail("GetStdHandle: ERROR -> A request for the STD_ERROR_HANDLE " + "returned an invalid handle.\n"); + } + + + /* check to see if we can CloseHandle works on the STD_ERROR_HANDLE */ + if (!CloseHandle(hFile)) + { + Fail("GetStdHandle: ERROR -> CloseHandle failed. GetLastError " + "returned %u.\n", + GetLastError()); + } + + + PAL_Terminate(); + return PASS; +} + diff --git a/src/pal/tests/palsuite/file_io/GetStdHandle/test2/testinfo.dat b/src/pal/tests/palsuite/file_io/GetStdHandle/test2/testinfo.dat new file mode 100644 index 0000000000..dcd498c6ef --- /dev/null +++ b/src/pal/tests/palsuite/file_io/GetStdHandle/test2/testinfo.dat @@ -0,0 +1,13 @@ +# 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 = GetStdHandle +Name = Positive Test for GetStdHandle (test 2) +Type = DEFAULT +EXE1 = getstdhandle +Description += Smoke Test GetStdHandle on a valid/invalid std handles + |