tst: memfs: stream_create_overwrite_test

This commit is contained in:
Bill Zissimopoulos 2016-12-13 15:17:22 -08:00
parent ff08d63a82
commit 54050c7e1d

View File

@ -354,6 +354,107 @@ static void stream_create_test(void)
stream_create_dotest(MemfsNet, L"\\\\memfs\\share"); stream_create_dotest(MemfsNet, L"\\\\memfs\\share");
} }
static void stream_create_overwrite_dotest(ULONG Flags, PWSTR Prefix)
{
void *memfs = memfs_start(Flags);
HANDLE Handle, Handle2;
WCHAR FilePath[MAX_PATH];
StringCbPrintfW(FilePath, sizeof FilePath, L"%s%s\\file0",
Prefix ? L"" : L"\\\\?\\GLOBALROOT", Prefix ? Prefix : memfs_volumename(memfs));
Handle = CreateFileW(FilePath,
GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0);
ASSERT(INVALID_HANDLE_VALUE != Handle);
CloseHandle(Handle);
StringCbPrintfW(FilePath, sizeof FilePath, L"%s%s\\file0:foo",
Prefix ? L"" : L"\\\\?\\GLOBALROOT", Prefix ? Prefix : memfs_volumename(memfs));
Handle = CreateFileW(FilePath,
GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0);
ASSERT(INVALID_HANDLE_VALUE != Handle);
CloseHandle(Handle);
StringCbPrintfW(FilePath, sizeof FilePath, L"%s%s\\file0:bar",
Prefix ? L"" : L"\\\\?\\GLOBALROOT", Prefix ? Prefix : memfs_volumename(memfs));
Handle = CreateFileW(FilePath,
GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0);
ASSERT(INVALID_HANDLE_VALUE != Handle);
CloseHandle(Handle);
StringCbPrintfW(FilePath, sizeof FilePath, L"%s%s\\file0:bar",
Prefix ? L"" : L"\\\\?\\GLOBALROOT", Prefix ? Prefix : memfs_volumename(memfs));
Handle2 = CreateFileW(FilePath,
FILE_READ_ATTRIBUTES, 0, 0, OPEN_EXISTING, 0, 0);
ASSERT(INVALID_HANDLE_VALUE != Handle2);
StringCbPrintfW(FilePath, sizeof FilePath, L"%s%s\\file0",
Prefix ? L"" : L"\\\\?\\GLOBALROOT", Prefix ? Prefix : memfs_volumename(memfs));
Handle = CreateFileW(FilePath,
GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
ASSERT(INVALID_HANDLE_VALUE != Handle);
CloseHandle(Handle);
StringCbPrintfW(FilePath, sizeof FilePath, L"%s%s\\file0:foo",
Prefix ? L"" : L"\\\\?\\GLOBALROOT", Prefix ? Prefix : memfs_volumename(memfs));
Handle = CreateFileW(FilePath,
FILE_READ_ATTRIBUTES, 0, 0, OPEN_EXISTING, 0, 0);
ASSERT(INVALID_HANDLE_VALUE == Handle);
ASSERT(ERROR_FILE_NOT_FOUND == GetLastError());
StringCbPrintfW(FilePath, sizeof FilePath, L"%s%s\\file0:bar",
Prefix ? L"" : L"\\\\?\\GLOBALROOT", Prefix ? Prefix : memfs_volumename(memfs));
Handle = CreateFileW(FilePath,
FILE_READ_ATTRIBUTES, 0, 0, OPEN_EXISTING, 0, 0);
ASSERT(INVALID_HANDLE_VALUE == Handle);
ASSERT(ERROR_ACCESS_DENIED == GetLastError());
CloseHandle(Handle2);
StringCbPrintfW(FilePath, sizeof FilePath, L"%s%s\\file0:bar",
Prefix ? L"" : L"\\\\?\\GLOBALROOT", Prefix ? Prefix : memfs_volumename(memfs));
Handle = CreateFileW(FilePath,
FILE_READ_ATTRIBUTES, 0, 0, OPEN_EXISTING, 0, 0);
ASSERT(INVALID_HANDLE_VALUE == Handle);
ASSERT(ERROR_FILE_NOT_FOUND == GetLastError());
StringCbPrintfW(FilePath, sizeof FilePath, L"%s%s\\file0",
Prefix ? L"" : L"\\\\?\\GLOBALROOT", Prefix ? Prefix : memfs_volumename(memfs));
Handle = CreateFileW(FilePath,
GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE, 0);
ASSERT(INVALID_HANDLE_VALUE != Handle);
CloseHandle(Handle);
Handle = CreateFileW(FilePath,
FILE_READ_ATTRIBUTES, 0, 0, OPEN_EXISTING, 0, 0);
ASSERT(INVALID_HANDLE_VALUE == Handle);
ASSERT(ERROR_FILE_NOT_FOUND == GetLastError());
memfs_stop(memfs);
}
static void stream_create_overwrite_test(void)
{
if (NtfsTests)
{
WCHAR DirBuf[MAX_PATH];
GetTestDirectory(DirBuf);
stream_create_overwrite_dotest(-1, DirBuf);
}
if (WinFspDiskTests)
stream_create_overwrite_dotest(MemfsDisk, 0);
if (WinFspNetTests)
stream_create_overwrite_dotest(MemfsNet, L"\\\\memfs\\share");
}
static void stream_create_related_dotest(ULONG Flags, PWSTR Prefix) static void stream_create_related_dotest(ULONG Flags, PWSTR Prefix)
{ {
void *memfs = memfs_start(Flags); void *memfs = memfs_start(Flags);
@ -2179,6 +2280,7 @@ void stream_dirnotify_test(void)
void stream_tests(void) void stream_tests(void)
{ {
TEST(stream_create_test); TEST(stream_create_test);
TEST(stream_create_overwrite_test);
TEST(stream_create_related_test); TEST(stream_create_related_test);
TEST(stream_create_sd_test); TEST(stream_create_sd_test);
TEST(stream_create_share_test); TEST(stream_create_share_test);