using System;
using System.Linq;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Hosting.Server.Features;
using Stardust.Server;
using Xunit;
namespace ServerTest.Communication;
/// <summary>真实 Kestrel æœåŠ¡ç«¯æµ‹è¯•å¤¹å…·ã€‚åœ¨éšæœºç«¯å£å¯åŠ¨å®Œæ•´ StarServer,供客户端端到端通讯测试使用</summary>
/// <remarks>
/// 与既有 TestServer(进程内管é“)ä¸åŒï¼Œè¿™é‡Œç›‘å¬çœŸå®ž TCP 端å£ï¼Œ
/// 让 StarClient/AppClient 走完整网络链路(套接å—ã€HTTP 头令牌ã€JSON 报文ã€WebSocket 长连接)。
/// </remarks>
public sealed class StarServerFixture : IDisposable
{
private readonly IWebHost _host;
/// <summary>æœåŠ¡ç«¯æ ¹åœ°å€ï¼Œä¾‹å¦‚ http://127.0.0.1:54321</summary>
public String ServerUrl { get; }
/// <summary>æœåŠ¡ç«¯å®¿ä¸»ï¼Œå¯ç”¨äºŽè§£æžæœåС容噍ä¸çš„å•例æœåŠ¡</summary>
public IWebHost Host => _host;
public StarServerFixture()
{
// å…³é— SQL 与调试日志,并åœç”¨ .NET è¿è¡Œæ—¶ä¿¡æ¯åŒæ¥ï¼Œé¿å…æµ‹è¯•æœŸé—´å†™å¤§é‡æ—¥å¿—与访问外网
StarTestServer.DisableDebugLog();
XCode.XCodeSetting.Current.ShowSQL = false;
XCode.XCodeSetting.Current.Debug = false;
#pragma warning disable CS0618, ASPDEPR008
_host = WebHost.CreateDefaultBuilder()
.UseStartup<Startup>()
.UseUrls("http://127.0.0.1:0")
.Build();
#pragma warning restore CS0618, ASPDEPR008
if (_host.Services.GetService(typeof(StarServerSetting)) is StarServerSetting set)
{
set.DotNetSyncPeriod = 0;
set.DotNetSyncUrl = "";
}
_host.Start();
var address = _host.ServerFeatures.Get<IServerAddressesFeature>()?.Addresses?.FirstOrDefault();
ServerUrl = address?.TrimEnd('/') ?? throw new InvalidOperationException("æ— æ³•èŽ·å– StarServer æœåŠ¡ç«¯ç›‘å¬åœ°å€");
}
/// <summary>é”€æ¯æœåŠ¡ç«¯</summary>
public void Dispose() => _host.Dispose();
}
/// <summary>共享真实 StarServer 的测试集åˆ</summary>
[CollectionDefinition("StarServer")]
public class StarServerCollection : ICollectionFixture<StarServerFixture>
{
}
|