using System;
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
using NewLife;
using NewLife.Log;
using NewLife.Security;
using Stardust.Data.Nodes;
using Stardust.Server.Services;
using Xunit;
namespace ServerTest.Services;
/// <summary>MySQL 监控æœåŠ¡æµ‹è¯•ã€‚è¦†ç›–å¯åœç”Ÿå‘½å‘¨æœŸä¸Žæœªå¯ç”¨èŠ‚ç‚¹è·³è¿‡ï¼ˆDBM-6)</summary>
public class MySqlMonitorServiceTests
{
/// <summary>è°ƒç”¨ç§æœ‰çš„采集循环,模拟一次定时器触å‘</summary>
private static void RunTrace(MySqlService service) =>
typeof(MySqlService).GetMethod("DoTraceNode", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(service, [null]);
[Fact(DisplayName = "MySQL 监控å¯åœä¸æŠ›å¼‚常")]
public async Task StartStop_NoThrow()
{
var service = new MySqlService(null, Logger.Null) { Period = 60 };
await service.StartAsync(CancellationToken.None);
await service.StopAsync(CancellationToken.None);
}
[Fact(DisplayName = "未å¯ç”¨èŠ‚ç‚¹ä¸å‚与采集,状æ€ä¿æŒä¸å˜")]
public void TraceNode_DisabledNode_Skip()
{
var service = new MySqlService(null, Logger.Null);
var node = new MySqlNode
{
Name = "mysql-" + Rand.NextString(6),
Server = "127.0.0.1",
Port = 1,
Enable = false,
};
node.Insert();
try
{
RunTrace(service);
// 直接查库确认ä»ä¸ºåœç”¨çжæ€ï¼ˆä¸ä¼šå› é‡‡é›†å¤±è´¥è¢«å†æ¬¡å†™å…¥ï¼‰
var dt = MySqlNode.Meta.Session.Query($"select Enable from {MySqlNode.Meta.TableName} where Id={node.Id}");
Assert.True(dt != null && dt.Rows.Count > 0);
Assert.False(dt.Rows[0][0].ToBoolean());
}
finally
{
MySqlNode.FindById(node.Id)?.Delete();
}
}
}
|