mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-22 16:33:02 -05:00
dll: FspLaunch*: testing
This commit is contained in:
parent
cc58668ce5
commit
f691a7a3c7
@ -26,8 +26,6 @@ FSP_API NTSTATUS FspLaunchCallLauncherPipe(
|
|||||||
NTSTATUS Result;
|
NTSTATUS Result;
|
||||||
ULONG ErrorCode;
|
ULONG ErrorCode;
|
||||||
|
|
||||||
if (0 != PSize)
|
|
||||||
*PSize = 0;
|
|
||||||
*PLauncherError = 0;
|
*PLauncherError = 0;
|
||||||
|
|
||||||
PipeBuf = MemAlloc(FSP_LAUNCH_PIPE_BUFFER_SIZE);
|
PipeBuf = MemAlloc(FSP_LAUNCH_PIPE_BUFFER_SIZE);
|
||||||
@ -91,6 +89,9 @@ FSP_API NTSTATUS FspLaunchCallLauncherPipe(
|
|||||||
*PLauncherError = ErrorCode;
|
*PLauncherError = ErrorCode;
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
|
if (!NT_SUCCESS(Result) && 0 != PSize)
|
||||||
|
*PSize = 0;
|
||||||
|
|
||||||
MemFree(PipeBuf);
|
MemFree(PipeBuf);
|
||||||
|
|
||||||
return Result;
|
return Result;
|
||||||
@ -108,7 +109,7 @@ FSP_API NTSTATUS FspLaunchStart(
|
|||||||
|
|
||||||
Argv[0] = ClassName;
|
Argv[0] = ClassName;
|
||||||
Argv[1] = InstanceName;
|
Argv[1] = InstanceName;
|
||||||
memcpy(Argv + 2, Argv, Argc * sizeof(PWSTR));
|
memcpy(Argv + 2, Argv0, Argc * sizeof(PWSTR));
|
||||||
|
|
||||||
return FspLaunchCallLauncherPipe(
|
return FspLaunchCallLauncherPipe(
|
||||||
HasSecret ? FspLaunchCmdStartWithSecret : FspLaunchCmdStart,
|
HasSecret ? FspLaunchCmdStartWithSecret : FspLaunchCmdStart,
|
||||||
|
@ -154,6 +154,134 @@ static void launch_reg_test(void)
|
|||||||
|
|
||||||
static void launch_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)
|
void launch_tests(void)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user