Esempio n. 1
0
            public void WhenManagingManyProcesses_ReturnsAllProcessIds()
            {
                processes = new[]
                {
                    IFTestHelper.ExecuteWithWait("nop"),
                    IFTestHelper.ExecuteWithWait("nop"),
                    IFTestHelper.ExecuteWithWait("nop"),
                    IFTestHelper.ExecuteWithWait("nop"),
                    IFTestHelper.ExecuteWithWait("nop"),
                    IFTestHelper.ExecuteWithWait("nop"),
                };

                foreach (var process in processes)
                {
                    jobObject.AssignProcessToJob(process);
                }

                var processIds = jobObject.GetProcessIds();

                Assert.Collection(processIds,
                                  x => Assert.Equal(processes[0].Id, x),
                                  x => Assert.Equal(processes[1].Id, x),
                                  x => Assert.Equal(processes[2].Id, x),
                                  x => Assert.Equal(processes[3].Id, x),
                                  x => Assert.Equal(processes[4].Id, x),
                                  x => Assert.Equal(processes[5].Id, x)
                                  );
            }
Esempio n. 2
0
            public void WhenManagingOneProcess_ReturnsCpuStatistics()
            {
                IFTestHelper.ExecuteInJob(jobObject, "consume-cpu", "--duration 250");

                var stats = jobObject.GetCpuStatistics();

                Assert.NotEqual(TimeSpan.Zero, stats.TotalKernelTime + stats.TotalUserTime);
            }
Esempio n. 3
0
            public void WhenMemoryIsNotLimited_GetMemoryPeakReturnsZero()
            {
                ulong allocateBytes = DefaultMemoryLimit * 2;

                IFTestHelper.ExecuteInJob(jobObject, "allocate-memory", "--bytes", allocateBytes);

                Assert.Equal(0UL, jobObject.GetPeakJobMemoryUsed());
            }
Esempio n. 4
0
            public void ClipboardIsDisabledForWrites()
            {
                var proc = IFTestHelper.ExecuteInJob(jobObject, "write-clipboard", "Text from JobObject1");

                proc.WaitForExit();
                var output = proc.StandardOutput.ReadToEnd().Trim();

                Assert.Contains("Could not write to clipboard", output);
            }
Esempio n. 5
0
            public void CanLimitMemory()
            {
                ulong limitInBytes  = DefaultMemoryLimit;
                ulong allocateBytes = limitInBytes * 2;

                jobObject.SetJobMemoryLimit(limitInBytes);

                var process = IFTestHelper.ExecuteInJob(jobObject, "allocate-memory", "--bytes", allocateBytes);

                Assert.True(IFTestHelper.Failed(process));
            }
Esempio n. 6
0
            public void Dispose()
            {
                if (processes != null)
                {
                    foreach (var process in processes)
                    {
                        IFTestHelper.ContinueAndWait(process);
                    }
                }

                jobObject.Dispose();
            }
Esempio n. 7
0
            public void WhenManagingOneProcess_ReturnsSingleProcessId()
            {
                processes = new[]
                {
                    IFTestHelper.ExecuteWithWait("nop"),
                };

                jobObject.AssignProcessToJob(processes[0]);

                var processIds = jobObject.GetProcessIds();

                Assert.Collection(processIds,
                                  x => Assert.Equal(processes[0].Id, x)
                                  );
            }
Esempio n. 8
0
            public void GetQueuedCompletionStatus_ForkBomb_DoesHaveLimitViolation()
            {
                using (var jobObject = new JobObject())
                {
                    jobObject.SetActiveProcessLimit(2);

                    var process = IFTestHelper.ExecuteWithWait("fork-bomb");
                    jobObject.AssignProcessToJob(process);
                    IFTestHelper.Continue(process);
                    process.WaitForExit(1000);

                    var msgs = jobObject.GetQueuedCompletionStatus();
                    Assert.Contains(msgs, x => x == JobObject.CompletionMsg.ActiveProcessLimit);
                }
            }
Esempio n. 9
0
            public void ClipboardIsDisabledForReads()
            {
                var clipboardText = "Text From Test";

                IFTestHelper.Execute("write-clipboard", clipboardText).WaitForExit();

                var proc = IFTestHelper.Execute("read-clipboard");

                proc.WaitForExit();
                Assert.Equal(clipboardText, proc.StandardOutput.ReadToEnd().Trim());

                proc = IFTestHelper.ExecuteInJob(jobObject, "read-clipboard");
                proc.WaitForExit();
                Assert.DoesNotContain(clipboardText, proc.StandardOutput.ReadToEnd().Trim());
            }
Esempio n. 10
0
            public void CanGetMemoryPeak()
            {
                jobObject.SetJobMemoryLimit(DefaultMemoryLimit);

                ulong allocateBytes = DefaultMemoryLimit * 2;
                var   process       = IFTestHelper.ExecuteInJob(jobObject, "allocate-memory", "--bytes", allocateBytes);

                if (IFTestHelper.Succeeded(process))
                {
                    Assert.True(DefaultMemoryLimit <= jobObject.GetPeakJobMemoryUsed());
                }
                else
                {
                    Assert.NotEqual(0UL, jobObject.GetPeakJobMemoryUsed());
                }
            }
Esempio n. 11
0
            public void GetQueuedCompletionStatus_CanLimitMemory()
            {
                using (var jobObject = new JobObject())
                {
                    const ulong limitInBytes  = 1024 * 1024 * 25; // 25MB
                    const ulong allocateBytes = limitInBytes * 2;

                    jobObject.SetJobMemoryLimit(limitInBytes);

                    var process = IFTestHelper.ExecuteInJob(jobObject, "allocate-memory", "--bytes", allocateBytes);
                    process.WaitForExit(1000);

                    var msgs = jobObject.GetQueuedCompletionStatus();
                    Assert.Contains(msgs, x => x == JobObject.CompletionMsg.JobMemoryLimit);
                }
            }
Esempio n. 12
0
            public void WhenManagedProcessCreatesChildProcess_ReturnsAllProcessIds()
            {
                // Arrange:
                var process = IFTestHelper.ExecuteWithWait("create-child");

                jobObject.AssignProcessToJob(process);
                process.StandardInput.WriteLine();

                var pidLine = process.StandardOutput.ReadLine();
                int pid     = Int32.Parse(pidLine);

                // Act:
                var managedProcesses = jobObject.GetProcessIds();

                // Assert:
                Assert.Contains(process.Id, managedProcesses);
                Assert.Contains(pid, managedProcesses);

                process.StandardInput.WriteLine();

                process.WaitForExit();
                Assert.True(IFTestHelper.Succeeded(process));
            }
Esempio n. 13
0
        public void SetActiveProcessLimit_StopsForkBomb()
        {
            using (var jobObject = new JobObject())
            {
                jobObject.SetActiveProcessLimit(2);

                var process = IFTestHelper.ExecuteWithWait("fork-bomb");
                jobObject.AssignProcessToJob(process);
                IFTestHelper.Continue(process);
                process.WaitForExit(1000);
                var hasExited = process.HasExited;
                if (!hasExited)
                {
                    process.Kill();
                }
                if (!hasExited)
                {
                    Console.WriteLine(process.StandardOutput.ReadToEnd());
                    Console.Error.WriteLine(process.StandardError.ReadToEnd());
                }
                Assert.True(hasExited, "Active process limit was not enforced");
            }
        }
Esempio n. 14
0
            public void CanLimitCpu()
            {
                jobObject.SetJobCpuLimit(1);
                jobObject2.SetJobCpuLimit(9);

                var thread1 = new Thread(() =>
                {
                    IFTestHelper.ExecuteInJob(jobObject, "consume-cpu", "--duration", "2000").WaitForExit();
                });
                var thread2 = new Thread(() =>
                {
                    IFTestHelper.ExecuteInJob(jobObject2, "consume-cpu", "--duration", "2000").WaitForExit();
                });

                thread1.Start();
                thread2.Start();
                thread1.Join();
                thread2.Join();

                var ratio = (float)jobObject.GetCpuStatistics().TotalUserTime.Ticks / jobObject2.GetCpuStatistics().TotalUserTime.Ticks;

                Assert.InRange(ratio, 0.01, 0.4);
            }
Esempio n. 15
0
            public void CanSetPriority()
            {
                jobObject.SetPriorityClass(ProcessPriorityClass.Idle);
                jobObject2.SetPriorityClass(ProcessPriorityClass.AboveNormal);

                var thread1 = new Thread(() =>
                {
                    IFTestHelper.ExecuteInJob(jobObject, "consume-cpu", "--duration", "4000").WaitForExit();
                });
                var thread2 = new Thread(() =>
                {
                    IFTestHelper.ExecuteInJob(jobObject2, "consume-cpu", "--duration", "4000").WaitForExit();
                });

                thread1.Start();
                thread2.Start();
                thread1.Join();
                thread2.Join();

                var ratio = (float)jobObject.GetCpuStatistics().TotalUserTime.Ticks / jobObject2.GetCpuStatistics().TotalUserTime.Ticks;

                Assert.InRange(ratio, 0.01, 0.5);
            }
Esempio n. 16
0
        public void CanTerminateAndWaitForObjectsUnderJobObject()
        {
            JobObject jobObject = new JobObject();

            Process p = null;

            try
            {
                p = IFTestHelper.ExecuteWithWait("nop");
                jobObject.AssignProcessToJob(p);

                jobObject.TerminateProcessesAndWait(1000);

                IFTestHelper.ContinueAndWait(p, timeout: 1000);
                Assert.True(p.HasExited);
            }
            finally
            {
                if (!p.HasExited)
                {
                    p.Kill();
                }
            }
        }
Esempio n. 17
0
 public void Dispose()
 {
     jobObject.Dispose();
     IFTestHelper.Execute("write-clipboard").WaitForExit();
 }