mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-22 08:23:05 -05:00
dll: FspLaunch*: testing
This commit is contained in:
parent
cc58668ce5
commit
f691a7a3c7
@ -26,8 +26,6 @@ FSP_API NTSTATUS FspLaunchCallLauncherPipe(
|
||||
NTSTATUS Result;
|
||||
ULONG ErrorCode;
|
||||
|
||||
if (0 != PSize)
|
||||
*PSize = 0;
|
||||
*PLauncherError = 0;
|
||||
|
||||
PipeBuf = MemAlloc(FSP_LAUNCH_PIPE_BUFFER_SIZE);
|
||||
@ -91,6 +89,9 @@ FSP_API NTSTATUS FspLaunchCallLauncherPipe(
|
||||
*PLauncherError = ErrorCode;
|
||||
|
||||
exit:
|
||||
if (!NT_SUCCESS(Result) && 0 != PSize)
|
||||
*PSize = 0;
|
||||
|
||||
MemFree(PipeBuf);
|
||||
|
||||
return Result;
|
||||
@ -108,7 +109,7 @@ FSP_API NTSTATUS FspLaunchStart(
|
||||
|
||||
Argv[0] = ClassName;
|
||||
Argv[1] = InstanceName;
|
||||
memcpy(Argv + 2, Argv, Argc * sizeof(PWSTR));
|
||||
memcpy(Argv + 2, Argv0, Argc * sizeof(PWSTR));
|
||||
|
||||
return FspLaunchCallLauncherPipe(
|
||||
HasSecret ? FspLaunchCmdStartWithSecret : FspLaunchCmdStart,
|
||||
|
@ -154,6 +154,134 @@ static void launch_reg_test(void)
|
||||
|
||||
static void launch_test(void)
|
||||
{
|
||||
/* this test assumes that memfs32 is registered */
|
||||
|
||||
NTSTATUS Result;
|
||||
ULONG LauncherError;
|
||||
PWSTR Argv[2];
|
||||
FSP_LAUNCH_REG_RECORD *Record;
|
||||
WCHAR Buffer[1024];
|
||||
ULONG Size;
|
||||
ULONG FoundClass, FoundInst1, FoundInst2;
|
||||
|
||||
Result = FspLaunchRegGetRecord(L"memfs32", 0, &Record);
|
||||
if (STATUS_OBJECT_NAME_NOT_FOUND == Result)
|
||||
{
|
||||
FspDebugLog(__FUNCTION__ ": need memfs32 registration\n");
|
||||
return;
|
||||
}
|
||||
ASSERT(NT_SUCCESS(Result));
|
||||
|
||||
Argv[0] = L"";
|
||||
Argv[1] = L"*";
|
||||
|
||||
Result = FspLaunchStart(L"memfs32", L"winfsp-tests-share1", 2, Argv, FALSE, &LauncherError);
|
||||
if (STATUS_OBJECT_NAME_NOT_FOUND == Result)
|
||||
{
|
||||
FspDebugLog(__FUNCTION__ ": need WinFsp.Launcher\n");
|
||||
return;
|
||||
}
|
||||
ASSERT(NT_SUCCESS(Result));
|
||||
ASSERT(0 == LauncherError);
|
||||
|
||||
Result = FspLaunchStart(L"memfs32", L"winfsp-tests-share2", 2, Argv, FALSE, &LauncherError);
|
||||
ASSERT(NT_SUCCESS(Result));
|
||||
ASSERT(0 == LauncherError);
|
||||
|
||||
Result = FspLaunchStart(L"memfs32", L"winfsp-tests-share1", 2, Argv, FALSE, &LauncherError);
|
||||
ASSERT(NT_SUCCESS(Result));
|
||||
ASSERT(ERROR_ALREADY_EXISTS == LauncherError);
|
||||
|
||||
Result = FspLaunchStart(L"memfs32", L"winfsp-tests-share2", 2, Argv, FALSE, &LauncherError);
|
||||
ASSERT(NT_SUCCESS(Result));
|
||||
ASSERT(ERROR_ALREADY_EXISTS == LauncherError);
|
||||
|
||||
Size = sizeof Buffer;
|
||||
Result = FspLaunchGetInfo(L"memfs32", L"winfsp-tests-share1", Buffer, &Size, &LauncherError);
|
||||
ASSERT(NT_SUCCESS(Result));
|
||||
ASSERT(0 == LauncherError);
|
||||
ASSERT((wcslen(L"memfs32") + 1) * sizeof(WCHAR) < Size);
|
||||
ASSERT((wcslen(L"winfsp-tests-share1") + 1) * sizeof(WCHAR) < Size);
|
||||
ASSERT(0 == wcscmp(L"memfs32", Buffer));
|
||||
ASSERT(0 == wcscmp(L"winfsp-tests-share1", Buffer + 8));
|
||||
|
||||
Size = sizeof Buffer;
|
||||
Result = FspLaunchGetInfo(L"memfs32", L"winfsp-tests-share2", Buffer, &Size, &LauncherError);
|
||||
ASSERT(NT_SUCCESS(Result));
|
||||
ASSERT(0 == LauncherError);
|
||||
ASSERT((wcslen(L"memfs32") + 1) * sizeof(WCHAR) < Size);
|
||||
ASSERT((wcslen(L"winfsp-tests-share2") + 1) * sizeof(WCHAR) < Size);
|
||||
ASSERT(0 == wcscmp(L"memfs32", Buffer));
|
||||
ASSERT(0 == wcscmp(L"winfsp-tests-share2", Buffer + 8));
|
||||
|
||||
Size = sizeof Buffer;
|
||||
Result = FspLaunchGetNameList(Buffer, &Size, &LauncherError);
|
||||
ASSERT(NT_SUCCESS(Result));
|
||||
ASSERT(0 == LauncherError);
|
||||
FoundClass = FoundInst1 = FoundInst2 = 0;
|
||||
for (PWSTR P = Buffer, EndP = (PVOID)((PUINT8)P + Size), Part = P; EndP > P; P++)
|
||||
if (L'\0' == *P)
|
||||
{
|
||||
if (0 == wcscmp(L"memfs32", Part))
|
||||
FoundClass++;
|
||||
else if (0 == wcscmp(L"winfsp-tests-share1", Part))
|
||||
FoundInst1++;
|
||||
else if (0 == wcscmp(L"winfsp-tests-share2", Part))
|
||||
FoundInst2++;
|
||||
Part = P + 1;
|
||||
}
|
||||
ASSERT(2 == FoundClass);
|
||||
ASSERT(1 == FoundInst1);
|
||||
ASSERT(1 == FoundInst2);
|
||||
|
||||
Result = FspLaunchStop(L"memfs32", L"winfsp-tests-share1", &LauncherError);
|
||||
ASSERT(NT_SUCCESS(Result));
|
||||
ASSERT(0 == LauncherError);
|
||||
|
||||
Result = FspLaunchStop(L"memfs32", L"winfsp-tests-share2", &LauncherError);
|
||||
ASSERT(NT_SUCCESS(Result));
|
||||
ASSERT(0 == LauncherError);
|
||||
|
||||
/* give the launcher a chance to stop the file systems! */
|
||||
Sleep(3000);
|
||||
|
||||
Size = sizeof Buffer;
|
||||
Result = FspLaunchGetInfo(L"memfs32", L"winfsp-tests-share1", Buffer, &Size, &LauncherError);
|
||||
ASSERT(NT_SUCCESS(Result));
|
||||
ASSERT(ERROR_FILE_NOT_FOUND == LauncherError);
|
||||
|
||||
Size = sizeof Buffer;
|
||||
Result = FspLaunchGetInfo(L"memfs32", L"winfsp-tests-share2", Buffer, &Size, &LauncherError);
|
||||
ASSERT(NT_SUCCESS(Result));
|
||||
ASSERT(ERROR_FILE_NOT_FOUND == LauncherError);
|
||||
|
||||
Result = FspLaunchStop(L"memfs32", L"winfsp-tests-share1", &LauncherError);
|
||||
ASSERT(NT_SUCCESS(Result));
|
||||
ASSERT(ERROR_FILE_NOT_FOUND == LauncherError);
|
||||
|
||||
Result = FspLaunchStop(L"memfs32", L"winfsp-tests-share2", &LauncherError);
|
||||
ASSERT(NT_SUCCESS(Result));
|
||||
ASSERT(ERROR_FILE_NOT_FOUND == LauncherError);
|
||||
|
||||
Size = sizeof Buffer;
|
||||
Result = FspLaunchGetNameList(Buffer, &Size, &LauncherError);
|
||||
ASSERT(NT_SUCCESS(Result));
|
||||
ASSERT(0 == LauncherError);
|
||||
FoundClass = FoundInst1 = FoundInst2 = 0;
|
||||
for (PWSTR P = Buffer, EndP = (PVOID)((PUINT8)P + Size), Part = P; EndP > P; P++)
|
||||
if (L'\0' == *P)
|
||||
{
|
||||
if (0 == wcscmp(L"memfs32", Part))
|
||||
FoundClass++;
|
||||
else if (0 == wcscmp(L"winfsp-tests-share1", Part))
|
||||
FoundInst1++;
|
||||
else if (0 == wcscmp(L"winfsp-tests-share2", Part))
|
||||
FoundInst2++;
|
||||
Part = P + 1;
|
||||
}
|
||||
ASSERT(0 == FoundClass);
|
||||
ASSERT(0 == FoundInst1);
|
||||
ASSERT(0 == FoundInst2);
|
||||
}
|
||||
|
||||
void launch_tests(void)
|
||||
|
Loading…
x
Reference in New Issue
Block a user