/*++ Copyright (c) 1996 Microsoft Corporation Module Name: tstpoint.c Abstract: Implementation of cluster test points Author: John Vert (jvert) 11/25/1996 Revision History: --*/ #include "initp.h" #ifdef CLUSTER_TESTPOINT PTESTPOINT_ENTRY TestArray=NULL; HANDLE gTestPtFileMapping; extern DWORD CsTestPoint; extern DWORD CsTestTrigger; extern DWORD CsTestAction; TESTPOINT_NAME TestPointNames[TestpointMax]={ L"JoinFailPetition", //0 L"FailNmJoinCluster", //1 L"FailRegisterIntraClusterRpc", //2 L"FailJoinCreateBindings", //3 L"FailJoinPetitionForMembership", //4 L"FailNmJoin", //5 L"FailDmJoin", //6 L"FailApiInitPhase1", //7 L"FailFmJoinPhase1", //8 L"FailDmUpdateJoinCluster", //9 L"FailEvInitialize", //10 L"FailNmJoinComplete", //11 L"FailApiInitPhase2", //12 L"FailFmJoinPhase2", //13 L"FailLogCommitSize", //14 L"FailClusterShutdown", //15 L"FailLocalXsaction", //16 L"FailOnlineResource", //17 L"FailSecurityInit", //18 L"FailOmInit", //19 L"FailEpInit", //20 L"FailDmInit", //21 L"FailNmInit", //22 L"FailGumInit", //23 L"FailFmInit", //24 L"FailLmInit", //25 L"FailCpInit", //26 L"FailNmPauseNode", //27 L"FailNmResumeNode", //28 L"FailNmEvictNodeAbort", //29 L"FailNmEvictNodeHalt", //30 L"FailNmCreateNetwork", //31 L"FailNmSetNetworkPriorityOrder", //32 L"FailNmSetNetworkPriorityOrder2", //33 L"FailNmSetNetworkCommonProperties", //34 L"FailNmSetInterfaceInfoAbort", //35 L"FailNmSetInterfaceInfoHalt", //36 L"FailPreMoveWithNodeDown", //37 L"FailPostMoveWithNodeDown", //38 L"FailFormNewCluster" //39 }; VOID TestpointInit( VOID ) /*++ Routine Description: Initializes the testpoint code. Arguments: None Return Value: None --*/ { DWORD ArraySize; DWORD i; // // Create the array of testpoint entries in named shared memory. // ArraySize = sizeof(TESTPOINT_ENTRY)*TestpointMax; gTestPtFileMapping = CreateFileMapping((HANDLE)-1, NULL, PAGE_READWRITE, 0, ArraySize, L"Cluster_Testpoints"); if (gTestPtFileMapping == NULL) { CL_UNEXPECTED_ERROR( GetLastError() ); return; } TestArray = MapViewOfFile(gTestPtFileMapping, FILE_MAP_READ | FILE_MAP_WRITE, 0,0, ArraySize); if (TestArray == NULL) { CL_UNEXPECTED_ERROR( GetLastError() ); return; } // // Initialize test point array // for (i=0; iHitCount += 1; switch (Entry->Trigger) { case TestTriggerNever: return(FALSE); case TestTriggerAlways: break; case TestTriggerOnce: Entry->Trigger = TestTriggerNever; break; case TestTriggerTargetCount: if (Entry->HitCount == Entry->TargetCount) { Entry->HitCount = 0; break; } else { return(FALSE); } default: CL_UNEXPECTED_ERROR( Entry->Trigger ); } CsDbgPrint(LOG_CRITICAL, "[TP] Testpoint %1!ws! being executed.\n", TestPointNames[Testpoint] ); // // The testpoint has fired, figure out what we are supposed to do. // switch (Entry->Action) { case TestActionTrue: return(TRUE); case TestActionExit: ExitProcess(Testpoint); break; case TestActionDebugBreak: DebugBreak(); break; } return(FALSE); } #endif