test(core): add sensor and systemd collector tests
This commit is contained in:
1 parent
242d1169e8
commit
c85751150a
2 files changed
+128
No files matched your search
@@ -0,0 +1,65 @@
|
||||
using Vantage.Core.Collectors.Sensors;
|
||||
using Vantage.Core.Models;
|
||||
using Vantage.Core.Tests.Fakes;
|
||||
using Vantage.Core.Tests.Fixtures;
|
||||
using Xunit;
|
||||
|
||||
namespace Vantage.Core.Tests.Collectors;
|
||||
|
||||
public class SensorsTests
|
||||
{
|
||||
[Fact]
|
||||
public void ThermalParser_ConvertsMilliDegreesToCelsius()
|
||||
{
|
||||
var readings = ThermalZoneParser.Parse(CollectorFixtures.ThermalZones);
|
||||
|
||||
Assert.Equal(4, readings.Count);
|
||||
Assert.Equal(52.0, readings.Single(r => r.Label == "x86_pkg_temp").Celsius, 3);
|
||||
Assert.Equal(48.0, readings.Single(r => r.Label == "coretemp Core 0").Celsius, 3);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NvidiaSmiParser_ParsesGpuRow()
|
||||
{
|
||||
var gpus = NvidiaSmiParser.Parse(CollectorFixtures.NvidiaSmiCsv);
|
||||
|
||||
var gpu = Assert.Single(gpus);
|
||||
Assert.Equal("NVIDIA GeForce RTX 3060", gpu.Name);
|
||||
Assert.Equal(52, gpu.TemperatureCelsius, 3);
|
||||
Assert.Equal(34, gpu.UtilizationPercent, 3);
|
||||
Assert.Equal(3200L * 1024 * 1024, gpu.MemoryUsedBytes);
|
||||
Assert.Equal(12288L * 1024 * 1024, gpu.MemoryTotalBytes);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseBundle_SplitsThermalFromGpu()
|
||||
{
|
||||
var snapshot = SshSensorProvider.ParseBundle(CollectorFixtures.SensorBundle());
|
||||
|
||||
Assert.Equal(4, snapshot.Temperatures.Count);
|
||||
Assert.Single(snapshot.Gpus);
|
||||
Assert.Equal(52.0, snapshot.HottestCelsius);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseBundle_WithoutGpu_ReturnsEmptyGpuList()
|
||||
{
|
||||
var snapshot = SshSensorProvider.ParseBundle(CollectorFixtures.ThermalZones + "@@vantage:gpu\n");
|
||||
|
||||
Assert.Empty(snapshot.Gpus);
|
||||
Assert.Equal(4, snapshot.Temperatures.Count);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task SshSensorProvider_BuildsThermalAndGpuCommand()
|
||||
{
|
||||
var runner = new FakeSshCommandRunner(CollectorFixtures.SensorBundle());
|
||||
var provider = new SshSensorProvider(runner);
|
||||
|
||||
var snapshot = await provider.GetSnapshotAsync(new HostConfig(), CancellationToken.None);
|
||||
|
||||
Assert.Contains("thermal_zone", runner.Commands.Single());
|
||||
Assert.Contains("nvidia-smi", runner.Commands.Single());
|
||||
Assert.Single(snapshot.Gpus);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
using Vantage.Core.Collectors.Systemd;
|
||||
using Vantage.Core.Models;
|
||||
using Vantage.Core.Tests.Fakes;
|
||||
using Vantage.Core.Tests.Fixtures;
|
||||
using Xunit;
|
||||
|
||||
namespace Vantage.Core.Tests.Collectors;
|
||||
|
||||
public class SystemdTests
|
||||
{
|
||||
[Fact]
|
||||
public void Parser_ReadsUnitColumns()
|
||||
{
|
||||
var units = SystemdUnitParser.Parse(CollectorFixtures.SystemctlOutput);
|
||||
|
||||
var docker = units.Single(u => u.Unit == "docker.service");
|
||||
Assert.Equal("loaded", docker.Load);
|
||||
Assert.Equal("active", docker.Active);
|
||||
Assert.Equal("running", docker.Sub);
|
||||
Assert.Equal("Docker Application Container Engine", docker.Description);
|
||||
Assert.True(docker.IsRunning);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Parser_StripsLeadingStatusMarker()
|
||||
{
|
||||
var units = SystemdUnitParser.Parse(CollectorFixtures.SystemctlOutput);
|
||||
|
||||
var backup = units.Single(u => u.Unit == "backup.service");
|
||||
Assert.Equal("failed", backup.Active);
|
||||
Assert.True(backup.IsFailed);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Parser_KeepsOnlyServiceUnits()
|
||||
{
|
||||
var units = SystemdUnitParser.Parse(CollectorFixtures.SystemctlOutput);
|
||||
Assert.DoesNotContain(units, u => u.Unit.EndsWith(".timer"));
|
||||
Assert.Equal(4, units.Count);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task SshSystemdProvider_UsesListUnitsCommand()
|
||||
{
|
||||
var runner = new FakeSshCommandRunner(CollectorFixtures.SystemctlOutput);
|
||||
var provider = new SshSystemdProvider(runner);
|
||||
|
||||
var units = await provider.GetServicesAsync(new HostConfig(), CancellationToken.None);
|
||||
|
||||
Assert.Contains("list-units", runner.Commands.Single());
|
||||
Assert.Contains(units, u => u.Unit == "nginx.service");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task MockSystemdProvider_IncludesFailedUnit()
|
||||
{
|
||||
var provider = new MockSystemdProvider();
|
||||
var units = await provider.GetServicesAsync(new HostConfig(), CancellationToken.None);
|
||||
|
||||
Assert.Contains(units, u => u.IsFailed);
|
||||
Assert.Contains(units, u => u.IsRunning);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user