public void WhenManagingMultipleProcesses() { const long oneProcessPrivateMemory = 1024; TimeSpan expectedTotalKernelTime = TimeSpan.FromSeconds(2); TimeSpan expectedTotalUserTime = TimeSpan.FromSeconds(2); var expectedCpuStats = new CpuStatistics { TotalKernelTime = expectedTotalKernelTime, TotalUserTime = expectedTotalUserTime, }; var firstProcess = Substitute.For <IProcess>(); firstProcess.Id.Returns(1); firstProcess.PrivateMemoryBytes.Returns(oneProcessPrivateMemory); var secondProcess = Substitute.For <IProcess>(); secondProcess.Id.Returns(2); secondProcess.PrivateMemoryBytes.Returns(oneProcessPrivateMemory); JobObject.GetCpuStatistics().Returns(expectedCpuStats); JobObject.GetProcessIds().Returns(new int[] { 1, 2 }); ProcessHelper.GetProcesses(null).ReturnsForAnyArgs(new[] { firstProcess, secondProcess }); var metrics = Container.GetMetrics(); Assert.Equal(expectedTotalKernelTime + expectedTotalUserTime, metrics.CpuStat.TotalProcessorTime); Assert.Equal((ulong)firstProcess.PrivateMemoryBytes + (ulong)secondProcess.PrivateMemoryBytes, metrics.MemoryStat.PrivateBytes); }
private ContainerCpuStat GetCpuStat() { var cpuStatistics = jobObject.GetCpuStatistics(); return(new ContainerCpuStat { TotalProcessorTime = cpuStatistics.TotalKernelTime + cpuStatistics.TotalUserTime, }); }
public ContainerTests() { ConstrainedProcessRunner = Substitute.For <IProcessRunner>(); ContainerEnvironment = new Dictionary <string, string>() { { "Handle", "handle" } }; Directory = Substitute.For <IContainerDirectory>(); JobObject = Substitute.For <JobObject>(); JobObject.GetCpuStatistics().Returns(new CpuStatistics { TotalKernelTime = TimeSpan.Zero, TotalUserTime = TimeSpan.Zero, }); JobObject.GetProcessIds().Returns(new int[0]); ProcessHelper = Substitute.For <ProcessHelper>(); ProcessRunner = Substitute.For <IProcessRunner>(); ContainerPropertiesService = Substitute.For <IContainerPropertyService>(); TcpPortManager = Substitute.For <ILocalTcpPortManager>(); User = Substitute.For <IContainerUser>(); _containerUsername = string.Concat("container-username-", Guid.NewGuid().ToString()); User.UserName.Returns(_containerUsername); ContainerDiskQuota = Substitute.For <IContainerDiskQuota>(); DependencyHelper = Substitute.For <ContainerHostDependencyHelper>(); bindMounts = new[] { new BindMount() }; Container = new Container( string.Concat("id-", Guid.NewGuid()), string.Concat("handle-", Guid.NewGuid()), User, Directory, ContainerPropertiesService, TcpPortManager, JobObject, ContainerDiskQuota, ProcessRunner, ConstrainedProcessRunner, ProcessHelper, ContainerEnvironment, DependencyHelper, bindMounts ); }
public void WhenContainerStopped_Runs() { JobObject.GetCpuStatistics().Returns(new CpuStatistics { TotalKernelTime = TimeSpan.Zero, TotalUserTime = TimeSpan.Zero, }); JobObject.GetProcessIds().Returns(new int[0]); Container.Stop(false); var info = Container.GetInfo(); Assert.NotNull(info); }
public void WhenManagingNoProcess() { JobObject.GetCpuStatistics().Returns(new CpuStatistics { TotalKernelTime = TimeSpan.Zero, TotalUserTime = TimeSpan.Zero, }); JobObject.GetProcessIds().Returns(new int[0]); var metrics = Container.GetMetrics(); Assert.Equal(TimeSpan.Zero, metrics.CpuStat.TotalProcessorTime); Assert.Equal(0ul, metrics.MemoryStat.PrivateBytes); }