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/CreateDirectoryW/test1 | |
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/CreateDirectoryW/test1')
3 files changed, 378 insertions, 0 deletions
diff --git a/src/pal/tests/palsuite/file_io/CreateDirectoryW/test1/CMakeLists.txt b/src/pal/tests/palsuite/file_io/CreateDirectoryW/test1/CMakeLists.txt new file mode 100644 index 0000000000..1981e37082 --- /dev/null +++ b/src/pal/tests/palsuite/file_io/CreateDirectoryW/test1/CMakeLists.txt @@ -0,0 +1,19 @@ +cmake_minimum_required(VERSION 2.8.12.2) + +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +set(SOURCES + CreateDirectoryW.c +) + +add_executable(paltest_createdirectoryw_test1 + ${SOURCES} +) + +add_dependencies(paltest_createdirectoryw_test1 coreclrpal) + +target_link_libraries(paltest_createdirectoryw_test1 + pthread + m + coreclrpal +) diff --git a/src/pal/tests/palsuite/file_io/CreateDirectoryW/test1/CreateDirectoryW.c b/src/pal/tests/palsuite/file_io/CreateDirectoryW/test1/CreateDirectoryW.c new file mode 100644 index 0000000000..9b020cc19c --- /dev/null +++ b/src/pal/tests/palsuite/file_io/CreateDirectoryW/test1/CreateDirectoryW.c @@ -0,0 +1,347 @@ +// 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: CreateDirectoryW.c +** +** Purpose: Tests the PAL implementation of the CreateDirectoryW function. +** +** +**===================================================================*/ + +#include <palsuite.h> + + +/* apparently, under WIN32 the max path size is 248 but under + BSD it is _MAX_PATH */ +#if WIN32 +#define CREATE_MAX_PATH_SIZE 248 +#else +#define CREATE_MAX_PATH_SIZE _MAX_PATH +#endif + + +int __cdecl main(int argc, char *argv[]) +{ + BOOL bRc = FALSE; + BOOL bSuccess = FALSE; + const int buf_size = CREATE_MAX_PATH_SIZE + 10; + char szDirName[CREATE_MAX_PATH_SIZE + 10]; + char buffer[CREATE_MAX_PATH_SIZE + 10]; + WCHAR* pTemp = NULL; + DWORD curDirLen; + DWORD curDirectory = 1024; + + + + if (0 != PAL_Initialize(argc,argv)) + { + return FAIL; + } + + /* directory does not exist */ + pTemp = convert("test_directory"); + bRc = CreateDirectoryW(pTemp, NULL); + free(pTemp); + if (bRc == FALSE) + { + Fail("CreateDirectoryW: Failed to create \"test_directory\"\n"); + } + + /* directory exists */ + pTemp = convert("test_directory"); + bRc = CreateDirectoryW(pTemp, NULL); + if (bRc == TRUE) + { + bRc = RemoveDirectoryW(pTemp); + if(!bRc) + { + free(pTemp); + Fail("CreateDirectoryW: RemoveDirectoryW failed to " + "delete the directory with error %u.\n", + GetLastError()); + } + free(pTemp); + Fail("CreateDirectoryW: Succeeded creating the directory" + " \"test_directory\" when it exists already.\n"); + } + + bRc = RemoveDirectoryW(pTemp); + if(!bRc) + { + free(pTemp); + Fail("CreateDirectoryW: RemoveDirectoryW failed to " + "delete the directory with error %u.\n", + GetLastError()); + } + free(pTemp); + + /* long directory names (CREATE_MAX_PATH_SIZE - 1, CREATE_MAX_PATH_SIZE + and CREATE_MAX_PATH_SIZE + 1 characters + including terminating null char) */ + + curDirLen = GetCurrentDirectoryA(0, NULL); + + memset(szDirName, 0, buf_size); + memset(szDirName, 'a', CREATE_MAX_PATH_SIZE - 2 - curDirLen); + pTemp = convert((LPSTR)szDirName); + bRc = CreateDirectoryW(pTemp, NULL); + if (bRc == FALSE) + { + free(pTemp); + Fail("CreateDirectoryW: Failed to create a directory" + " name (%d) chars long with the error code %ld\n", + CREATE_MAX_PATH_SIZE - 1, + GetLastError()); + } + else + { + + /* Check to see if it's possible to navigate to directory */ + GetCurrentDirectoryA(curDirectory, buffer); + bSuccess = SetCurrentDirectoryA(szDirName); + if(!bSuccess) + { + Trace("CreateDirectoryW: SetCurrentDirectoryA failed to " + "navigate to the newly created directory with error " + "code %u.\n", GetLastError()); + bRc = RemoveDirectoryW(pTemp); + if(!bRc) + { + free(pTemp); + Fail("CreateDirectoryW: RemoveDirectoryW failed to " + "delete the directory with error %u.\n", + GetLastError()); + } + free(pTemp); + Fail(""); + + } + + /* Set directory back to initial directory */ + bRc = SetCurrentDirectoryA(buffer); + if(!bRc) + { + free(pTemp); + Fail("CreateDirectoryW: SetCurrentDirectoryA failed to " + "change the directory with error %u.\n", + GetLastError()); + } + + bRc = RemoveDirectoryW(pTemp); + if(!bRc) + { + free(pTemp); + Fail("CreateDirectoryW: RemoveDirectoryW failed to " + "delete the directory with error %u.\n", + GetLastError()); + } + free(pTemp); + } + + + memset(szDirName, 0, buf_size); + memset(szDirName, 'a', CREATE_MAX_PATH_SIZE - 1 - curDirLen); + pTemp = convert(szDirName); + bRc = CreateDirectoryW(pTemp, NULL); + if (bRc == FALSE) + { + free(pTemp); + Fail("CreateDirectoryW: Failed to create a directory" + " name %d chars long with error code %ld\n", + strlen(szDirName), + GetLastError()); + } + else + { + /* Check to see if it's possible to navigate to directory */ + GetCurrentDirectoryA(curDirectory, buffer); + bSuccess = SetCurrentDirectoryA(szDirName); + if(!bSuccess) + { + Trace("CreateDirectoryW: SetCurrentDirectoryA failed to " + "navigate to the newly created directory with error " + "code %u.\n", GetLastError()); + + bRc = RemoveDirectoryW(pTemp); + if(!bRc) + { + free(pTemp); + Fail("CreateDirectoryW: RemoveDirectoryW failed to " + "delete the directory with error %u.\n", + GetLastError()); + } + free(pTemp); + Fail(""); + } + + /* Set directory back to initial directory */ + bRc = SetCurrentDirectoryA(buffer); + if(!bRc) + { + free(pTemp); + Fail("CreateDirectoryW: SetCurrentDirectoryA failed to " + "change the directory with error %u.\n", + GetLastError()); + } + + + bRc = RemoveDirectoryW(pTemp); + if(!bRc) + { + free(pTemp); + Fail("CreateDirectoryW: RemoveDirectoryW failed to " + "delete the directory with error %u.\n", + GetLastError()); + } + free(pTemp); + } + + memset(szDirName, 0, buf_size); + memset(szDirName, 'a', CREATE_MAX_PATH_SIZE - curDirLen); + pTemp = convert(szDirName); + bRc = CreateDirectoryW(pTemp, NULL); + + if (bRc != FALSE) + { + RemoveDirectoryW(pTemp); + if(!bRc) + { + free(pTemp); + Fail("CreateDirectoryW: RemoveDirectoryW failed to " + "delete the directory with error %u.\n", + GetLastError()); + } + if (strlen(szDirName) > CREATE_MAX_PATH_SIZE) + { + free(pTemp); + Fail("CreateDirectoryW: Failed because it created a directory" + " name 1 character longer (%d chars) than the max dir size" + " allowed\n", + strlen(szDirName)); + } + } + + free(pTemp); + + /* long directory name CREATE_MAX_PATH_SIZE + 3 chars including "..\" + (real path length <= CREATE_MAX_PATH_SIZE) */ + memset(szDirName, 0, buf_size); + memset(szDirName, 'a', CREATE_MAX_PATH_SIZE + 3 - 1 - curDirLen); + szDirName[0] = '.'; + szDirName[1] = '.'; + szDirName[2] = '\\'; + pTemp = convert(szDirName); + bRc = CreateDirectoryW(pTemp, NULL); + if (bRc == FALSE) + { + free(pTemp); + Fail("CreateDirectoryW: Failed to create a directory name more " + "than %d chars long and its real path name is less " + "than %d chars\n", + CREATE_MAX_PATH_SIZE, + CREATE_MAX_PATH_SIZE); + } + else + { + /* Check to see if it's possible to navigate to directory */ + GetCurrentDirectoryA(curDirectory, buffer); + bSuccess = SetCurrentDirectoryA(szDirName); + if(!bSuccess) + { + Trace("CreateDirectoryW: SetCurrentDirectoryA failed to " + "navigate to the newly created directory with error " + "code %u.\n", GetLastError()); + bRc = RemoveDirectoryW(pTemp); + if(!bRc) + { + free(pTemp); + Fail("CreateDirectoryW: RemoveDirectoryW failed to " + "delete the directory with error %u.\n", + GetLastError()); + } + free(pTemp); + Fail(""); + } + + /* Set directory back to initial directory */ + bRc = SetCurrentDirectoryA(buffer); + if(!bRc) + { + free(pTemp); + Fail("CreateDirectoryW: SetCurrentDirectoryA failed to " + "change the directory with error %u.\n", + GetLastError()); + } + + bRc = RemoveDirectoryW(pTemp); + if(!bRc) + { + free(pTemp); + Fail("CreateDirectoryW: RemoveDirectoryW failed to " + "delete the directory with error %u.\n", + GetLastError()); + } + free(pTemp); + } + + /* directories with dots */ + memset(szDirName, 0, 252); + sprintf(szDirName, ".dotDirectory"); + pTemp = convert(szDirName); + bRc = CreateDirectoryW(pTemp, NULL); + if (bRc == FALSE) + { + free(pTemp); + Fail("CreateDirectoryW: Failed to create a dot directory\n"); + } + else + { + /* Check to see if it's possible to navigate to directory */ + GetCurrentDirectoryA(curDirectory, buffer); + bSuccess = SetCurrentDirectoryA(szDirName); + if(!bSuccess) + { + Trace("CreateDirectoryW: SetCurrentDirectoryA failed to " + "navigate to the newly created directory with error " + "code %u.\n", GetLastError()); + + bRc = RemoveDirectoryW(pTemp); + if(!bRc) + { + free(pTemp); + Fail("CreateDirectoryW: RemoveDirectoryW failed to " + "delete the directory with error %u.\n", + GetLastError()); + } + free(pTemp); + Fail(""); + } + + /* Set directory back to initial directory */ + bRc = SetCurrentDirectoryA(buffer); + if(!bRc) + { + free(pTemp); + Fail("CreateDirectoryW: SetCurrentDirectoryA failed to " + "change the directory with error %u.\n", + GetLastError()); + } + + bRc = RemoveDirectoryW(pTemp); + if(!bRc) + { + free(pTemp); + Fail("CreateDirectoryW: RemoveDirectoryW failed to " + "delete the directory with error %u.\n", + GetLastError()); + } + free(pTemp); + } + + PAL_Terminate(); + return PASS; +} + diff --git a/src/pal/tests/palsuite/file_io/CreateDirectoryW/test1/testinfo.dat b/src/pal/tests/palsuite/file_io/CreateDirectoryW/test1/testinfo.dat new file mode 100644 index 0000000000..bc664892b4 --- /dev/null +++ b/src/pal/tests/palsuite/file_io/CreateDirectoryW/test1/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 = file_io +Function = CreateDirectoryW +Name = Positive Test for CreateDirectoryW +Type = DEFAULT +EXE1 = createdirectoryw +Description += Test the CreateDirctoryW function |