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

namespace Stardust.Tests;

/// <summary>移动代理核心测试</summary>
public class MobileAgentTests
{
    private class FakePlatform : IMobilePlatform
    {
        public String Name => "Test";
        public String DeviceId => "test-device";
        public String DeviceName => "TestPhone";
        public String OSName => "TestOS";
        public String OSVersion => "1.0";
        public String Architecture => "arm64";

        public String GetDataPath() => Path.Combine(Path.GetTempPath(), "staragent-tests");

        public void FillNodeInfo(NodeInfo info)
        {
            info.UUID = DeviceId;
            info.Memory = 1024;
        }

        public void FillPingInfo(PingInfo info)
        {
            info.Memory = 2048;
            info.CpuRate = 12.5;
            info.Battery = 80;
        }

        public void RestartApp() { }
    }

    [Fact]
    [DisplayName("登录请求填充移动设备信息")]
    public void BuildLoginRequest_UsesPlatformInfo()
    {
        var set = new MobileAgentSetting { Server = "http://127.0.0.1:6600", ProductCode = "StarAgent" };
        var client = new MobileStarClient(set, new FakePlatform());

        var request = Assert.IsType<LoginInfo>(client.BuildLoginRequest());

        Assert.Equal("StarAgent", request.ProductCode);
        Assert.NotNull(request.Node);
        Assert.Equal("test-device", request.Node!.UUID);
        Assert.Equal("TestOS", request.Node.OSName);
        Assert.Equal("TestPhone", request.Node.MachineName);
        Assert.Equal(1024UL, request.Node.Memory);
    }

    [Fact]
    [DisplayName("识别iOS操作系统类型")]
    public void OSKindHelper_iOS()
    {
        Assert.Equal(OSKinds.iOS, OSKindHelper.Parse("iOS", "17.4"));
        Assert.Equal(OSKinds.iOS, OSKindHelper.Parse("iPhone OS", "16.0"));
        Assert.Equal(OSKinds.iOS, OSKindHelper.Parse("iPadOS", "17.0"));
    }

    [Fact]
    [DisplayName("移动平台不使用RID部署")]
    public void GetRID_Mobile_ReturnsAny()
    {
        Assert.Equal([RuntimeIdentifier.Any], OSKindHelper.GetRID(OSKinds.Android, "arm64"));
        Assert.Equal([RuntimeIdentifier.Any], OSKindHelper.GetRID(OSKinds.iOS, "arm64"));
    }

    [Fact]
    [DisplayName("心跳请求填充移动指标")]
    public void BuildPingRequest_UsesPlatformMetrics()
    {
        var client = new MobileStarClient(new MobileAgentSetting(), new FakePlatform());

        var request = Assert.IsType<PingInfo>(client.BuildPingRequest());

        Assert.Equal(2048UL, request.Memory);
        Assert.Equal(12.5, request.CpuRate);
        Assert.Equal(80, request.Battery);
    }
}