using System;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
using NewLife.Remoting.Models;
using Stardust.Data;
using Stardust.Server.Services;
using Xunit;
namespace ServerTest.Services;
/// <summary>注册æœåŠ¡å•元测试</summary>
public class RegistryServiceTests
{
/// <summary>呿²¡æœ‰ä»»ä½•在线实例的应用下å‘å‘½ä»¤æ—¶ï¼Œåº”è¿”å›žç©ºè€ŒéžæŠ›ç©ºå¼•ç”¨å¼‚å¸¸ã€‚
/// 回归:SendCommand 在 ts 为空时执行 await null,抛 NullReferenceException,
/// 导致 App/RegisterService 在通知消费者(NotifyConsumers)时报500。</summary>
[Fact]
[Trait("Category", "Registry")]
public async Task SendCommand_NoOnlineInstance_ReturnNull()
{
var name = "test-sendcmd-" + Guid.NewGuid().ToString("n")[..8];
var app = new App
{
Name = name,
Secret = "test-secret",
Enable = true,
};
app.Insert();
try
{
// è·³è¿‡æž„é€ å‡½æ•°ï¼ˆä¾èµ–è¿‡å¤šï¼‰ï¼Œä»…éªŒè¯æ— 在线实例的分支
var svc = (RegistryService)RuntimeHelpers.GetUninitializedObject(typeof(RegistryService));
var model = new CommandInModel
{
Command = "test/echo",
Argument = "hello",
};
var rs = await svc.SendCommand(app, null, model, "tester");
// 没有在线实例时ä¸èƒ½æŠ›å¼‚常,应返回空
Assert.Null(rs);
}
finally
{
// æ¸…ç† SendCommand 内部æ’入的命令与应用
AppCommand.Delete(AppCommand._.AppId == app.Id);
app.Delete();
}
}
}
|