Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }