dll: FspLaunch*: testing

This commit is contained in:
Bill Zissimopoulos 2018-01-09 23:12:05 -08:00
parent cc58668ce5
commit f691a7a3c7
No known key found for this signature in database
GPG Key ID: 3D4F95D52C7B3EA3
2 changed files with 132 additions and 3 deletions

View File

@ -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,

View File

@ -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)