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();
            }
        }