summaryrefslogtreecommitdiff
path: root/src/pal/tests/palsuite/file_io/CopyFileA/test3/test3.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pal/tests/palsuite/file_io/CopyFileA/test3/test3.c')
-rw-r--r--src/pal/tests/palsuite/file_io/CopyFileA/test3/test3.c141
1 files changed, 141 insertions, 0 deletions
diff --git a/src/pal/tests/palsuite/file_io/CopyFileA/test3/test3.c b/src/pal/tests/palsuite/file_io/CopyFileA/test3/test3.c
new file mode 100644
index 0000000000..18c8ce80dc
--- /dev/null
+++ b/src/pal/tests/palsuite/file_io/CopyFileA/test3/test3.c
@@ -0,0 +1,141 @@
+// 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: test3.c
+**
+** Purpose: Tests the PAL implementation of the CopyFileA function
+** to see if a file can be copied to itself
+**
+**
+**===================================================================*/
+
+#include <palsuite.h>
+
+int __cdecl main(int argc, char *argv[])
+{
+
+ BOOL bRc = TRUE;
+ char* szSrcExisting = "src_existing.tmp";
+ char* szDest = "src_dest.tmp";
+ FILE* tempFile = NULL;
+ int retCode;
+
+ if (0 != PAL_Initialize(argc,argv))
+ {
+ return FAIL;
+ }
+
+ /* create the src_existing file */
+ tempFile = fopen(szSrcExisting, "w");
+ if (tempFile != NULL)
+ {
+ retCode = fputs("CopyFileA test file: src_existing.tmp ", tempFile);
+ if(retCode < 0)
+ {
+ retCode = fclose(tempFile);
+ if(retCode != 0)
+ {
+ Trace("CopyFileA: ERROR-> Couldn't close file: %s with error "
+ "%u.\n", szSrcExisting, GetLastError());
+ }
+
+ Fail("CopyFileA: ERROR-> Couldn't write to %s with error "
+ "%u.\n", szSrcExisting, GetLastError());
+ }
+ retCode = fclose(tempFile);
+ if(retCode != 0)
+ {
+ Fail("CopyFileA: ERROR-> Couldn't close file: %s with error "
+ "%u.\n", szSrcExisting, GetLastError());
+ }
+
+ }
+ else
+ {
+ Fail("CopyFileA: ERROR-> Couldn't create %s with "
+ "error %ld\n",szSrcExisting,GetLastError());
+ }
+
+ /* set the file attributes of the source file to readonly */
+ bRc = SetFileAttributes(szSrcExisting, FILE_ATTRIBUTE_READONLY);
+ if(!bRc)
+ {
+ Fail("CopyFileA: ERROR-> Couldn't set file attributes for "
+ "file %s with error %u\n", szSrcExisting, GetLastError());
+ }
+
+ // Check the file attributes to make sure SetFileAttributes() above actually succeeded
+ DWORD fileAttributes = GetFileAttributesA(szSrcExisting);
+ if (fileAttributes == INVALID_FILE_ATTRIBUTES)
+ {
+ Fail("CopyFileA: Failed to get file attributes for source file, %u\n", GetLastError());
+ }
+ if ((fileAttributes & FILE_ATTRIBUTE_READONLY) == 0)
+ {
+ Fail("CopyFileA: SetFileAttributes(read-only) on source file returned success but did not make it read-only.\n");
+ }
+
+ /* copy the file */
+ bRc = CopyFileA(szSrcExisting,szDest,TRUE);
+ if(!bRc)
+ {
+ Fail("CopyFileA: Cannot copy a file with error, %u",GetLastError());
+ }
+
+
+ /* try to get file attributes of destination file */
+ fileAttributes = GetFileAttributesA(szDest);
+ if (fileAttributes == INVALID_FILE_ATTRIBUTES)
+ {
+ Fail("CopyFileA: GetFileAttributes of destination file "
+ "failed with error code %ld. \n",
+ GetLastError());
+ }
+
+ /* verify attributes of destination file to source file*/
+ if((fileAttributes & FILE_ATTRIBUTE_READONLY) != FILE_ATTRIBUTE_READONLY)
+ {
+ Fail("CopyFileA : The file attributes of the "
+ "destination file do not match the file "
+ "attributes of the source file.\n");
+ }
+
+ /* set the attributes of the destination file to normal again */
+ bRc = SetFileAttributesA(szDest, FILE_ATTRIBUTE_NORMAL);
+ if(!bRc)
+ {
+ Fail("CopyFileA: ERROR-> Couldn't set file attributes for "
+ "file %s with error %u\n", szDest, GetLastError());
+ }
+
+ /* delete the newly copied file */
+ bRc = DeleteFile(szDest);
+ if(!bRc)
+ {
+ Fail("CopyFileA: DeleteFile failed to delete the"
+ "file correctly with error,%u.\n",GetLastError());
+ }
+
+ /* set the attributes of the source file to normal again */
+ bRc = SetFileAttributesA(szSrcExisting, FILE_ATTRIBUTE_NORMAL);
+ if(!bRc)
+ {
+ Fail("CopyFileA: ERROR-> Couldn't set file attributes for "
+ "file %s with error %u\n", szSrcExisting, GetLastError());
+ }
+
+ /* delete the original file */
+ bRc = DeleteFile(szSrcExisting);
+ if(!bRc)
+ {
+ Fail("CopyFileA: DeleteFile failed to delete the"
+ "file correctly with error,%u.\n",GetLastError());
+ }
+
+ PAL_Terminate();
+ return PASS;
+
+}