节点在线、应用在线、配置在线使用令牌查询
大石头 authored at 2021-12-16 19:49:30
5.05 KiB
Stardust
using System.ComponentModel;
using Stardust.Models;
using Xunit;

namespace Stardust.Tests;

/// <summary>macOS平台采集解析测试</summary>
public class StarClientOSXTests
{
    [Fact]
    [DisplayName("解析top输出的CPU空闲率")]
    public void ParseTopIdle_Normal()
    {
        var output = "Processes: 400 total, 2 running, 398 sleeping, 2000 threads\n" +
                     "Load Avg: 1.23, 2.34, 3.45\n" +
                     "CPU usage: 3.12% user, 6.25% sys, 90.62% idle\n" +
                     "SharedLibs: 200M resident, 30M data, 0B linkedit.";

        Assert.Equal(90.62, StarClient.ParseTopIdle(output), 3);
    }

    [Fact]
    [DisplayName("解析top输出_无CPU行时返回负一")]
    public void ParseTopIdle_Missing()
    {
        Assert.Equal(-1, StarClient.ParseTopIdle("no cpu line"));
        Assert.Equal(-1, StarClient.ParseTopIdle(null));
    }

    [Fact]
    [DisplayName("解析vm_stat输出_计算可用内存与空闲内存")]
    public void ParseVmStat_Normal()
    {
        var output = "Mach Virtual Memory Statistics: (page size of 16384 bytes)\n" +
                     "Pages free:                               1000.\n" +
                     "Pages active:                             2000.\n" +
                     "Pages inactive:                           3000.\n" +
                     "Pages speculative:                         500.\n" +
                     "Pages wired down:                         1500.\n" +
                     "\"Translation faults\":                   123456.\n" +
                     "Pages occupied by compressor:             1200.";

        var (available, free) = StarClient.ParseVmStat(output);

        Assert.Equal((UInt64)(1000 * 16384), free);
        Assert.Equal((UInt64)((1000 + 3000 + 500) * 16384), available);
    }

    [Fact]
    [DisplayName("解析vm_stat输出_空内容返回零")]
    public void ParseVmStat_Empty()
    {
        var (available, free) = StarClient.ParseVmStat("");

        Assert.Equal(0UL, available);
        Assert.Equal(0UL, free);
    }

    [Fact]
    [DisplayName("解析iostat输出_取最后一次采样并汇总tps")]
    public void ParseIostatTps_Normal()
    {
        var output = "              disk0               disk1\n" +
                     "     KB/t  tps  MB/s     KB/t  tps  MB/s\n" +
                     "   13.09    2  0.03     0.00    0  0.00\n" +
                     "    0.00    3  0.00     0.00    4  0.00";

        Assert.Equal(7, StarClient.ParseIostatTps(output));
    }

    [Fact]
    [DisplayName("解析iostat输出_只有表头时返回零")]
    public void ParseIostatTps_HeaderOnly()
    {
        var output = "              disk0\n" +
                     "     KB/t  tps  MB/s";

        Assert.Equal(0, StarClient.ParseIostatTps(output));
    }

    [Fact]
    [DisplayName("解析pmset输出_笔记本电脑电量")]
    public void ParseBatteryPercent_Laptop()
    {
        var output = "Now drawing from 'Battery Power'\n" +
                     " -InternalBattery-0 (id=4653155)\t82%; discharging; 4:12 remaining present: true";

        Assert.Equal(82, StarClient.ParseBatteryPercent(output));
    }

    [Fact]
    [DisplayName("解析pmset输出_台式机无电池返回负一")]
    public void ParseBatteryPercent_Desktop()
    {
        var output = "Now drawing from 'AC Power'";

        Assert.Equal(-1, StarClient.ParseBatteryPercent(output));
    }

    [Fact]
    [DisplayName("解析vm.loadavg输出")]
    public void ParseLoad_Normal()
    {
        Assert.Equal(1.23, StarClient.ParseLoad("{ 1.23 2.34 3.45 }"), 2);
        Assert.Equal(0, StarClient.ParseLoad(null));
    }

    [Fact]
    [DisplayName("解析显卡信息_支持多显卡去重")]
    public void ParseGpuInfo_Multiple()
    {
        var output = "Graphics/Displays:\n" +
                     "\n" +
                     "    Apple M2 Pro:\n" +
                     "\n" +
                     "      Chipset Model: Apple M2 Pro\n" +
                     "      Type: GPU\n" +
                     "      Bus: Built-In\n" +
                     "\n" +
                     "    AMD Radeon Pro 5500M:\n" +
                     "\n" +
                     "      Chipset Model: AMD Radeon Pro 5500M\n" +
                     "      Type: GPU";

        Assert.Equal("Apple M2 Pro,AMD Radeon Pro 5500M", StarClient.ParseGpuInfo(output));
    }

    [Fact]
    [DisplayName("解析WiFi名称与信号强度")]
    public void ParseWifi_Normal()
    {
        Assert.Equal("MyWiFi", StarClient.ParseAirportNetwork("Current Wi-Fi Network: MyWiFi"));

        var output = "Current Network Information:\n" +
                     "  MyWiFi:\n" +
                     "    PHY Mode: 802.11ax\n" +
                     "    Signal / Noise: -55 dBm / -90 dBm";

        Assert.Equal(-55, StarClient.ParseWifiSignal(output));
    }

    [Fact]
    [DisplayName("识别macOS操作系统类型")]
    public void OSKindHelper_MacOS()
    {
        Assert.Equal(OSKinds.MacOSX, OSKindHelper.Parse("macOS", "14.5"));
        Assert.Equal(OSKinds.MacOSX, OSKindHelper.Parse("Mac OS X", "10.15.7"));
    }
}