RPC远程过程调用,二进制封装,提供高吞吐低延迟的高性能RPC框架
大石头 authored at 2022-08-10 13:26:19
10.18 KiB
NewLife.Remoting
using System;
using System.ComponentModel;
using NewLife.Remoting.Models;
using Xunit;

namespace XUnitTest.Models;

/// <summary>更多模型类单元测试</summary>
public class MoreModelTests
{
    #region LoginRequest
    [Fact]
    [DisplayName("LoginRequest默认值")]
    public void LoginRequest_DefaultValues()
    {
        var req = new LoginRequest();

        Assert.Null(req.Code);
        Assert.Null(req.Secret);
        Assert.Null(req.ClientId);
        Assert.Null(req.Version);
        Assert.Equal(0L, req.Compile);
        Assert.Null(req.IP);
        Assert.Null(req.Macs);
        Assert.Null(req.UUID);
        Assert.Equal(0L, req.Time);
    }

    [Fact]
    [DisplayName("LoginRequest属性读写")]
    public void LoginRequest_Properties()
    {
        var req = new LoginRequest
        {
            Code = "device001",
            Secret = "secret123",
            ClientId = "192.168.1.1@1234",
            Version = "1.0.0",
            Compile = 1750000000000,
            IP = "192.168.1.1",
            Macs = "AA-BB-CC-DD-EE-FF",
            UUID = "unique-id-001",
            Time = 1750000000000
        };

        Assert.Equal("device001", req.Code);
        Assert.Equal("secret123", req.Secret);
        Assert.Equal("192.168.1.1@1234", req.ClientId);
        Assert.Equal("1.0.0", req.Version);
        Assert.Equal(1750000000000, req.Compile);
        Assert.Equal("192.168.1.1", req.IP);
        Assert.Equal("AA-BB-CC-DD-EE-FF", req.Macs);
        Assert.Equal("unique-id-001", req.UUID);
        Assert.Equal(1750000000000, req.Time);
    }

    [Fact]
    [DisplayName("LoginRequest实现ILoginRequest接口")]
    public void LoginRequest_ImplementsInterface()
    {
        ILoginRequest req = new LoginRequest();
        Assert.NotNull(req);

        ILoginRequest2 req2 = new LoginRequest();
        Assert.NotNull(req2);
    }
    #endregion

    #region LoginResponse
    [Fact]
    [DisplayName("LoginResponse默认值")]
    public void LoginResponse_DefaultValues()
    {
        var res = new LoginResponse();

        Assert.Null(res.Code);
        Assert.Null(res.Secret);
        Assert.Null(res.Name);
        Assert.Null(res.Token);
        Assert.Equal(0, res.Expire);
        Assert.Equal(0L, res.Time);
        Assert.Equal(0L, res.ServerTime);
    }

    [Fact]
    [DisplayName("LoginResponse属性读写")]
    public void LoginResponse_Properties()
    {
        var res = new LoginResponse
        {
            Code = "device001",
            Secret = "newSecret",
            Name = "测试设备",
            Token = "jwt.token.here",
            Expire = 7200,
            Time = 1750000000000,
            ServerTime = 1750000001000
        };

        Assert.Equal("device001", res.Code);
        Assert.Equal("newSecret", res.Secret);
        Assert.Equal("测试设备", res.Name);
        Assert.Equal("jwt.token.here", res.Token);
        Assert.Equal(7200, res.Expire);
        Assert.Equal(1750000000000, res.Time);
        Assert.Equal(1750000001000, res.ServerTime);
    }

    [Fact]
    [DisplayName("LoginResponse_ToString有Name")]
    public void LoginResponse_ToString_WithName()
    {
        var res = new LoginResponse { Name = "设备A", Code = "dev001" };
        Assert.Equal("设备A", res.ToString());
    }

    [Fact]
    [DisplayName("LoginResponse_ToString无Name用Code")]
    public void LoginResponse_ToString_WithoutName()
    {
        var res = new LoginResponse { Code = "dev001" };
        Assert.Equal("dev001", res.ToString());
    }

    [Fact]
    [DisplayName("LoginResponse实现ILoginResponse接口")]
    public void LoginResponse_ImplementsInterface()
    {
        ILoginResponse res = new LoginResponse();
        Assert.NotNull(res);
    }
    #endregion

    #region PingRequest
    [Fact]
    [DisplayName("PingRequest默认值")]
    public void PingRequest_DefaultValues()
    {
        var req = new PingRequest();

        Assert.Equal(0UL, req.Memory);
        Assert.Equal(0UL, req.AvailableMemory);
        Assert.Equal(0UL, req.FreeMemory);
        Assert.Equal(0UL, req.TotalSize);
        Assert.Equal(0UL, req.AvailableFreeSpace);
        Assert.Equal(0.0, req.CpuRate);
        Assert.Equal(0.0, req.Temperature);
        Assert.Equal(0.0, req.Battery);
        Assert.Equal(0, req.Signal);
        Assert.Null(req.IP);
        Assert.Equal(0, req.Uptime);
        Assert.Equal(0L, req.Time);
        Assert.Equal(0, req.Delay);
    }

    [Fact]
    [DisplayName("PingRequest属性读写")]
    public void PingRequest_Properties()
    {
        var req = new PingRequest
        {
            Memory = 16_000_000_000,
            AvailableMemory = 8_000_000_000,
            FreeMemory = 6_000_000_000,
            TotalSize = 500_000_000_000,
            AvailableFreeSpace = 200_000_000_000,
            CpuRate = 0.35,
            Temperature = 65.5,
            Battery = 85.0,
            Signal = -60,
            UplinkSpeed = 1_000_000,
            DownlinkSpeed = 5_000_000,
            IP = "192.168.1.100",
            Uptime = 86400,
            Time = 1750000000000,
            Delay = 15
        };

        Assert.Equal(16_000_000_000UL, req.Memory);
        Assert.Equal(8_000_000_000UL, req.AvailableMemory);
        Assert.Equal(6_000_000_000UL, req.FreeMemory);
        Assert.Equal(500_000_000_000UL, req.TotalSize);
        Assert.Equal(200_000_000_000UL, req.AvailableFreeSpace);
        Assert.Equal(0.35, req.CpuRate);
        Assert.Equal(65.5, req.Temperature);
        Assert.Equal(85.0, req.Battery);
        Assert.Equal(-60, req.Signal);
        Assert.Equal(1_000_000UL, req.UplinkSpeed);
        Assert.Equal(5_000_000UL, req.DownlinkSpeed);
        Assert.Equal("192.168.1.100", req.IP);
        Assert.Equal(86400, req.Uptime);
        Assert.Equal(1750000000000, req.Time);
        Assert.Equal(15, req.Delay);
    }

    [Fact]
    [DisplayName("PingRequest实现接口")]
    public void PingRequest_ImplementsInterface()
    {
        IPingRequest req = new PingRequest();
        Assert.NotNull(req);

        IPingRequest2 req2 = new PingRequest();
        Assert.NotNull(req2);
    }
    #endregion

    #region PingResponse
    [Fact]
    [DisplayName("PingResponse默认值")]
    public void PingResponse_DefaultValues()
    {
        var res = new PingResponse();

        Assert.Equal(0L, res.Time);
        Assert.Equal(0L, res.ServerTime);
        Assert.Equal(0, res.Period);
        Assert.Null(res.Token);
        Assert.Null(res.NewServer);
        Assert.Null(res.Commands);
    }

    [Fact]
    [DisplayName("PingResponse属性读写")]
    public void PingResponse_Properties()
    {
        var cmds = new[] { new CommandModel { Id = 1, Command = "restart" } };
        var res = new PingResponse
        {
            Time = 1750000000000,
            ServerTime = 1750000001000,
            Period = 60,
            Token = "new_token",
            NewServer = "http://new-server:8080",
            Commands = cmds
        };

        Assert.Equal(1750000000000, res.Time);
        Assert.Equal(1750000001000, res.ServerTime);
        Assert.Equal(60, res.Period);
        Assert.Equal("new_token", res.Token);
        Assert.Equal("http://new-server:8080", res.NewServer);
        Assert.Single(res.Commands!);
        Assert.Equal("restart", res.Commands![0].Command);
    }

    [Fact]
    [DisplayName("PingResponse实现接口")]
    public void PingResponse_ImplementsInterface()
    {
        IPingResponse res = new PingResponse();
        Assert.NotNull(res);

        IPingResponse2 res2 = new PingResponse();
        Assert.NotNull(res2);
    }
    #endregion

    #region CommandModel
    [Fact]
    [DisplayName("CommandModel默认值")]
    public void CommandModel_DefaultValues()
    {
        var cmd = new CommandModel();

        Assert.Equal(0, cmd.Id);
        Assert.Null(cmd.Command);
        Assert.Null(cmd.Argument);
        Assert.Equal(DateTime.MinValue, cmd.StartTime);
        Assert.Equal(DateTime.MinValue, cmd.Expire);
        Assert.Null(cmd.TraceId);
    }

    [Fact]
    [DisplayName("CommandModel属性读写")]
    public void CommandModel_Properties()
    {
        var now = DateTime.UtcNow;
        var cmd = new CommandModel
        {
            Id = 12345,
            Command = "restart",
            Argument = "{\"force\":true}",
            StartTime = now,
            Expire = now.AddHours(1),
            TraceId = "trace-001"
        };

        Assert.Equal(12345, cmd.Id);
        Assert.Equal("restart", cmd.Command);
        Assert.Equal("{\"force\":true}", cmd.Argument);
        Assert.Equal(now, cmd.StartTime);
        Assert.Equal(now.AddHours(1), cmd.Expire);
        Assert.Equal("trace-001", cmd.TraceId);
    }
    #endregion

    #region CommandReplyModel
    [Fact]
    [DisplayName("CommandReplyModel默认值")]
    public void CommandReplyModel_DefaultValues()
    {
        var reply = new CommandReplyModel();

        Assert.Equal(0, reply.Id);
        Assert.Equal(CommandStatus.就绪, reply.Status);
        Assert.Null(reply.Data);
    }

    [Fact]
    [DisplayName("CommandReplyModel属性读写")]
    public void CommandReplyModel_Properties()
    {
        var reply = new CommandReplyModel
        {
            Id = 100,
            Status = CommandStatus.已完成,
            Data = "operation successful"
        };

        Assert.Equal(100, reply.Id);
        Assert.Equal(CommandStatus.已完成, reply.Status);
        Assert.Equal("operation successful", reply.Data);
    }
    #endregion

    #region DeviceContext
    [Fact]
    [DisplayName("DeviceContext默认值")]
    public void DeviceContext_DefaultValues()
    {
        var ctx = new DeviceContext();

        Assert.Null(ctx.Code);
        Assert.Null(ctx.ClientId);
        Assert.Null(ctx.UserHost);
        Assert.Null(ctx.Token);
    }

    [Fact]
    [DisplayName("DeviceContext属性读写")]
    public void DeviceContext_Properties()
    {
        var ctx = new DeviceContext
        {
            Code = "dev001",
            ClientId = "192.168.1.1@5678",
            UserHost = "192.168.1.1",
            Token = "mytoken"
        };

        Assert.Equal("dev001", ctx.Code);
        Assert.Equal("192.168.1.1@5678", ctx.ClientId);
        Assert.Equal("192.168.1.1", ctx.UserHost);
        Assert.Equal("mytoken", ctx.Token);
    }
    #endregion
}