Module: wine Branch: master Commit: 6a6b4c5000fb3f800291af8f62d4f83eddb7efe8 URL: http://source.winehq.org/git/wine.git/?a=commit;h=6a6b4c5000fb3f800291af8f62...
Author: Dmitry Timoshkov dmitry@baikal.ru Date: Fri Sep 13 18:35:01 2013 +0900
kernel32/tests: Add a file access test.
---
dlls/kernel32/tests/file.c | 82 ++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 82 insertions(+), 0 deletions(-)
diff --git a/dlls/kernel32/tests/file.c b/dlls/kernel32/tests/file.c index b0de968..d7a8776 100644 --- a/dlls/kernel32/tests/file.c +++ b/dlls/kernel32/tests/file.c @@ -3806,6 +3806,87 @@ static void test_SetFileValidData(void) DeleteFile(filename); }
+static void test_file_access(void) +{ + static const struct + { + int access, create_error, write_error, read_error; + } td[] = + { + { GENERIC_READ | GENERIC_WRITE, 0, 0, 0 }, + { GENERIC_WRITE, 0, 0, ERROR_ACCESS_DENIED }, + { GENERIC_READ, 0, ERROR_ACCESS_DENIED, 0 }, + { FILE_READ_DATA | FILE_WRITE_DATA, 0, 0, 0 }, + { FILE_WRITE_DATA, 0, 0, ERROR_ACCESS_DENIED }, + { FILE_READ_DATA, 0, ERROR_ACCESS_DENIED, 0 }, + { 0, 0, ERROR_ACCESS_DENIED, ERROR_ACCESS_DENIED }, + }; + char path[MAX_PATH], fname[MAX_PATH]; + unsigned char buf[16]; + HANDLE hfile; + DWORD i, ret, bytes; + + GetTempPath(MAX_PATH, path); + GetTempFileName(path, "foo", 0, fname); + + for (i = 0; i < sizeof(td)/sizeof(td[0]); i++) + { + SetLastError(0xdeadbeef); + hfile = CreateFile(fname, td[i].access, 0, NULL, CREATE_ALWAYS, + FILE_FLAG_DELETE_ON_CLOSE, 0); + if (td[i].create_error) + { + ok(hfile == INVALID_HANDLE_VALUE, "%d: CreateFile should fail\n", i); + ok(td[i].create_error == GetLastError(), "%d: expected %d, got %d\n", i, td[i].create_error, GetLastError()); + continue; + } + else + ok(hfile != INVALID_HANDLE_VALUE, "%d: CreateFile error %d\n", i, GetLastError()); + + SetLastError(0xdeadbeef); + bytes = 0xdeadbeef; + ret = WriteFile(hfile, "\x5e\xa7", 2, &bytes, NULL); + if (td[i].write_error) + { + ok(!ret, "%d: WriteFile should fail\n", i); + ok(td[i].write_error == GetLastError(), "%d: expected %d, got %d\n", i, td[i].write_error, GetLastError()); + ok(bytes == 0, "%d: expected 0, got %u\n", i, bytes); + } + else + { + ok(ret, "%d: WriteFile error %d\n", i, GetLastError()); + ok(bytes == 2, "%d: expected 2, got %u\n", i, bytes); + } + + SetLastError(0xdeadbeef); + ret = SetFilePointer(hfile, 0, NULL, FILE_BEGIN); + ok(ret != INVALID_SET_FILE_POINTER, "SetFilePointer error %d\n", GetLastError()); + + SetLastError(0xdeadbeef); + bytes = 0xdeadbeef; + ret = ReadFile(hfile, buf, sizeof(buf), &bytes, NULL); + if (td[i].read_error) + { + ok(!ret, "%d: ReadFile should fail\n", i); + ok(td[i].read_error == GetLastError(), "%d: expected %d, got %d\n", i, td[i].read_error, GetLastError()); + ok(bytes == 0, "%d: expected 0, got %u\n", i, bytes); + } + else + { + ok(ret, "%d: ReadFile error %d\n", i, GetLastError()); + if (td[i].write_error) + ok(bytes == 0, "%d: expected 0, got %u\n", i, bytes); + else + { + ok(bytes == 2, "%d: expected 2, got %u\n", i, bytes); + ok(buf[0] == 0x5e && buf[1] == 0xa7, "%d: expected 5ea7, got %02x%02x\n", i, buf[0], buf[1]); + } + } + + CloseHandle(hfile); + } +} + START_TEST(file) { InitFunctionPointers(); @@ -3849,4 +3930,5 @@ START_TEST(file) test_GetFileInformationByHandleEx(); test_OpenFileById(); test_SetFileValidData(); + test_file_access(); }