public void TestFreeCgroupMemory(double value, string selfCGroup, string sysFsGroup, double?memLimit) { var mountInfo = GetTestFilePath(sysFsGroup); var tempFile = TempFile.CreateWithContents( sysFsGroup.StartsWith("/proc/sys_cgroup2") ? $"30 23 0:26 / {mountInfo} rw,nosuid,nodev,noexec,relatime shared:4 - cgroup2 cgroup rw,seclabel\n" : $"39 30 0:35 / {mountInfo} rw,nosuid,nodev,noexec,relatime shared:10 - cgroup cgroup rw,seclabel,memory\n"); using (tempFile) { var provider = new CgroupMetricsProvider(GetTestFilePath(selfCGroup), tempFile.Path, new NoopLogger(), new List <WildcardMatcher>()); var samples = provider.GetSamples().ToList(); samples.First().Samples.Should().HaveCountGreaterOrEqualTo(2); var inactiveFileBytesSample = samples.First().Samples.SingleOrDefault(s => s.KeyValue.Key == SystemProcessCgroupMemoryStatsInactiveFileBytes); inactiveFileBytesSample.Should().NotBeNull(); var memUsageSample = samples.First().Samples.SingleOrDefault(s => s.KeyValue.Key == SystemProcessCgroupMemoryMemUsageBytes); memUsageSample.Should().NotBeNull(); memUsageSample?.KeyValue.Value.Should().Be(value); if (memLimit.HasValue) { var memLimitSample = samples.First().Samples.SingleOrDefault(s => s.KeyValue.Key == SystemProcessCgroupMemoryMemLimitBytes); memLimitSample.Should().NotBeNull(); memLimitSample?.KeyValue.Value.Should().Be(memLimit); } } }
public void OsTest() { var logger = new InMemoryBlockingLogger(LogLevel.Trace); var cgroupMetricsProvider = new CgroupMetricsProvider(logger, new List <WildcardMatcher>()); var samples = cgroupMetricsProvider.GetSamples(); if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) { samples.Should().NotBeNullOrEmpty(); logger.Lines.Where(line => line.Contains("detected a non Linux OS, therefore Cgroup metrics will not be reported")).Should().BeNullOrEmpty(); } else { samples.Should().BeNullOrEmpty(); logger.Lines.Where(line => line.Contains("detected a non Linux OS, therefore Cgroup metrics will not be reported")).Should().NotBeNullOrEmpty(); } }