Checks if files are (correctly) overwritten if they already exist in the destination folder, by checking whether the file size is equal in source and destination
Signed-off-by: Florian Eder others.meder@gmail.com --- programs/robocopy/tests/robocopy.c | 40 ++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+)
diff --git a/programs/robocopy/tests/robocopy.c b/programs/robocopy/tests/robocopy.c index 433b65c587f..4bbf600e45a 100644 --- a/programs/robocopy/tests/robocopy.c +++ b/programs/robocopy/tests/robocopy.c @@ -172,8 +172,48 @@ static void check_folder_and_delete(const WCHAR *relative_path, BOOL should_exis } }
+static void check_files_equal(const WCHAR *relative_path_1, const WCHAR *relative_path_2, BOOL should_be_equal) +{ + WCHAR path_1[1024], path_2[1024]; + HANDLE file_1, file_2; + LARGE_INTEGER size_1, size_2; + wcscpy(path_1, L"\\?\"); + GetTempPathW(ARRAY_SIZE(path_1) - 4, &(path_1[4])); + wcscpy(path_2, L"\\?\"); + GetTempPathW(ARRAY_SIZE(path_2) - 4, &(path_2[4])); + wcscat(path_1, relative_path_1); + wcscat(path_2, relative_path_2); + file_1 = CreateFileW(path_1, FILE_GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); + file_2 = CreateFileW(path_2, FILE_GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); + if (file_1 == INVALID_HANDLE_VALUE || file_2 == INVALID_HANDLE_VALUE) + { + ok(file_1 != INVALID_HANDLE_VALUE, "file "%S" does not exist, can't check equality with file "%S"\n", relative_path_1, relative_path_2); + ok(file_2 != INVALID_HANDLE_VALUE, "file "%S" does not exist, can't check equality with file "%S"\n", relative_path_2, relative_path_1); + CloseHandle(file_1); + CloseHandle(file_2); + return; + } + GetFileSizeEx(file_1, &size_1); + GetFileSizeEx(file_2, &size_2); + CloseHandle(file_1); + CloseHandle(file_2); + if (size_1.QuadPart == size_2.QuadPart) + { + ok(should_be_equal, "files "%S" and "%S" should be different, but are equal (size: %lld bytes)\n", + relative_path_1, relative_path_2, size_1.QuadPart); + } + else + { + ok(!should_be_equal, "files "%S" and "%S" should be equal, but are different (size: %lld bytes vs %lld bytes)\n", + relative_path_1, relative_path_2, size_1.QuadPart, size_2.QuadPart); + } +} + static void check_basic_copy_test(void) { + check_files_equal(L"robocopy_source\fileA.a", L"robocopy_destination\fileA.a", TRUE); + check_files_equal(L"robocopy_source\fileB.b", L"robocopy_destination\fileB.b", TRUE); + check_file_and_delete(L"robocopy_source\fileA.a", TRUE); check_file_and_delete(L"robocopy_source\fileB.b", TRUE); check_file_and_delete(L"robocopy_source\folderA\fileC.c", TRUE);