文件同步需要快速失败,超时时间定为3秒
智能大石头 authored at 2026-01-07 09:31:42
2.08 KiB
Stardust
using System;
using System.Threading;
using System.Threading.Tasks;
using NewLife;
using NewLife.Data;
using NewLife.Messaging;
using Stardust;
using Xunit;

namespace ClientTest;

public class AppClientTests
{
    private sealed class TestStringHandler : IEventHandler<String>
    {
        public String Received { get; private set; }

        public Task HandleAsync(String @event, IEventContext context = null, CancellationToken cancellationToken = default)
        {
            Received = @event;
            return Task.CompletedTask;
        }
    }

    [Fact]
    public async Task ProcessMessageAsync_DispatchesToEventBus_WhenTopicMatchesAndClientDiffers()
    {
        var client = new AppClient { ClientId = "clientA" };
        var bus = client.GetEventBus<String>("topic1");
        var handler = new TestStringHandler();
        bus.Subscribe(handler, clientId: "h1");

        var message = "event#topic1#clientB#\"hello\""; // JSON string payload
        await client.HandleAsync((ArrayPacket)message.GetBytes());

        Assert.Equal("\"hello\"", handler.Received);
    }

    [Fact]
    public async Task ProcessMessageAsync_DoesNotDispatch_WhenClientIdMatches()
    {
        var client = new AppClient { ClientId = "clientA" };
        var bus = client.GetEventBus<String>("topic1");
        var handler = new TestStringHandler();
        bus.Subscribe(handler, clientId: "h1");

        var message = "event#topic1#clientA#\"hello\""; // same clientId as AppClient
        await client.HandleAsync((ArrayPacket)message.GetBytes());

        Assert.Null(handler.Received);
    }

    [Fact]
    public async Task ProcessMessageAsync_DoesNotDispatch_WhenTopicUnknown()
    {
        var client = new AppClient { ClientId = "clientA" };
        var bus = client.GetEventBus<String>("topic1");
        var handler = new TestStringHandler();
        bus.Subscribe(handler, clientId: "h1");

        var message = "event#otherTopic#clientB#\"hello\""; // no bus registered for otherTopic
        await client.HandleAsync((ArrayPacket)message.GetBytes());

        Assert.Null(handler.Received);
    }
}