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

namespace ServerTest.Monitors;

/// <summary>跟踪项分类测试</summary>
public class TraceItemKindTests
{
    [Fact]
    [DisplayName("WebSocket 长连接端点单独归类,不与普通接口混算耗时")]
    public void GetKind_ClassifiesWebSocket()
    {
        Assert.Equal("ws", TraceItem.GetKind("/app/notify"));
        Assert.Equal("ws", TraceItem.GetKind("/node/notify"));
        Assert.Equal("ws", TraceItem.GetKind("ws:command"));
        Assert.Equal("api", TraceItem.GetKind("/api/order"));
        Assert.Equal("http", TraceItem.GetKind("https://newlifex.com"));
        Assert.Equal("mq", TraceItem.GetKind("redismq:topic"));
        Assert.Equal("rpc", TraceItem.GetKind("rpc:Info"));
        Assert.Equal("other", TraceItem.GetKind("AppStart"));
    }

    [Fact]
    [DisplayName("长连接判定不受大小写影响")]
    public void IsWebSocket_IgnoresCase()
    {
        Assert.True(TraceItem.IsWebSocket("/App/Notify"));
        Assert.True(TraceItem.IsWebSocket("WS:command"));
        Assert.False(TraceItem.IsWebSocket("AppStart"));
        Assert.False(TraceItem.IsWebSocket(null));
    }

    [Fact]
    [DisplayName("阻塞类命令单独归类,等待时长不混入依赖与应用耗时")]
    public void GetKind_ClassifiesBlockingCommand()
    {
        Assert.Equal("block", TraceItem.GetKind("NewLife.Redis:XREADGROUP-GROUP"));
        Assert.Equal("block", TraceItem.GetKind("NewLife.Redis:XREAD"));
        Assert.Equal("block", TraceItem.GetKind("NewLife.Redis:BLPOP"));
        Assert.Equal("block", TraceItem.GetKind("NewLife.Redis:BZPOPMIN"));

        // 普通命令与非阻塞命名不受影响
        Assert.Equal("NewLife.Redis", TraceItem.GetKind("NewLife.Redis:GET"));
        Assert.Equal("rpc", TraceItem.GetKind("rpc:Broadcast"));
        Assert.Equal("other", TraceItem.GetKind("BLPOP"));
    }

    [Fact]
    [DisplayName("阻塞类命令判定识别参数后缀且不受大小写影响")]
    public void IsBlocking_HandlesSuffixAndCase()
    {
        Assert.True(TraceItem.IsBlocking("NewLife.Redis:xreadgroup-group"));
        Assert.True(TraceItem.IsBlocking("NewLife.Redis:BRPOPLPUSH"));
        Assert.False(TraceItem.IsBlocking("NewLife.Redis:GET"));
        Assert.False(TraceItem.IsBlocking("rpc:Broadcast"));
        Assert.False(TraceItem.IsBlocking(null));
        Assert.False(TraceItem.IsBlocking(""));
    }
}