public async Task TestResourceManagerCancellationPreferenceMultiple() { ProcessResourceManager resourceManager = new ProcessResourceManager(); // Highest RAM, but oldest pip so it is not cancelled var workItem1 = CreateWorkItem(resourceManager, estimatedRamUsage: 1, reportedRamUsage: 10000); var workItem2 = CreateWorkItem(resourceManager, estimatedRamUsage: 1, reportedRamUsage: 1002); var workItem3 = CreateWorkItem(resourceManager, estimatedRamUsage: 1000, reportedRamUsage: 2000); var workItem4 = CreateWorkItem(resourceManager, estimatedRamUsage: 1, reportedRamUsage: 1); var workItem3Cancelled = workItem3.WaitForCancellation(); var workItem2Cancelled = workItem2.WaitForCancellation(); var workItem4Cancelled = workItem4.WaitForCancellation(); // Attempt to free more RAM than occupied by all work items (oldest pips should be retained even though // it must be freed to attempt to meet resource requirements) resourceManager.TryFreeResources(requiredRamMb: 20000); // Ensure only work item 2 AND 3 were cancelled since that is all that is required to free necessary RAM XAssert.IsTrue(await workItem2Cancelled); XAssert.IsTrue(await workItem3Cancelled); XAssert.IsTrue(await workItem4Cancelled); workItem1.Verify(expectedCancellationCount: 0, expectedExecutionCount: 1, expectedCompleted: false); workItem2.Verify(expectedCancellationCount: 1, expectedExecutionCount: 1, expectedCompleted: false); workItem3.Verify(expectedCancellationCount: 1, expectedExecutionCount: 1, expectedCompleted: false); workItem4.Verify(expectedCancellationCount: 1, expectedExecutionCount: 1, expectedCompleted: false); }
public async Task TestResourceManagerCancellationPreference() { ProcessResourceManager resourceManager = new ProcessResourceManager(); var workItem1 = CreateWorkItem(resourceManager, estimatedRamUsage: 1, reportedRamUsage: 1); // Highest RAM usage over estimate var workItem2 = CreateWorkItem(resourceManager, estimatedRamUsage: 1, reportedRamUsage: 1002); // Higest overall RAM usage, second most recently executed (cancelled second) var workItem3 = CreateWorkItem(resourceManager, estimatedRamUsage: 1000, reportedRamUsage: 2000); // Most recently executed (Cancelled second) var workItem4 = CreateWorkItem(resourceManager, estimatedRamUsage: 1, reportedRamUsage: 1); var workItem4Cancelled = workItem4.WaitForCancellation(); resourceManager.TryFreeResources(requiredRamMb: 1); // Ensure only work item 4 was cancelled since that is all that is required to free necessary RAM XAssert.IsTrue(await workItem4Cancelled); workItem1.Verify(expectedCancellationCount: 0, expectedExecutionCount: 1, expectedCompleted: false); workItem2.Verify(expectedCancellationCount: 0, expectedExecutionCount: 1, expectedCompleted: false); workItem3.Verify(expectedCancellationCount: 0, expectedExecutionCount: 1, expectedCompleted: false); workItem4.Verify(expectedCancellationCount: 1, expectedExecutionCount: 1, expectedCompleted: false); var workItem3Cancelled = workItem3.WaitForCancellation(); resourceManager.TryFreeResources(requiredRamMb: 1000); // Ensure only work item 3 was cancelled since that is all that is required to free necessary RAM XAssert.IsTrue(await workItem3Cancelled); workItem1.Verify(expectedCancellationCount: 0, expectedExecutionCount: 1, expectedCompleted: false); workItem2.Verify(expectedCancellationCount: 0, expectedExecutionCount: 1, expectedCompleted: false); workItem3.Verify(expectedCancellationCount: 1, expectedExecutionCount: 1, expectedCompleted: false); workItem4.Verify(expectedCancellationCount: 1, expectedExecutionCount: 1, expectedCompleted: false); }