using Stardust.Data.Platform;
using Xunit;
namespace ServerTest.Mcp;
/// <summary>MCP令牌å•元测试。覆盖Token生æˆã€æ’å®šæ—¶é—´æ¯”è¾ƒã€æœ‰æ•ˆæ€§æ ¡éªŒ</summary>
public class McpTokenTests
{
[Fact]
public void GenerateToken_HasSdmcpPrefix()
{
var token = McpToken.GenerateToken();
Assert.StartsWith("sdmcp_", token);
}
[Fact]
public void GenerateToken_HasCorrectLength()
{
// sdmcp_ (6) + 32 chars = 38
var token = McpToken.GenerateToken();
Assert.Equal(38, token.Length);
}
[Fact]
public void GenerateToken_ReturnsDifferentValues()
{
var t1 = McpToken.GenerateToken();
var t2 = McpToken.GenerateToken();
Assert.NotEqual(t1, t2);
}
[Theory]
[InlineData("sdmcp_abc", "sdmcp_abc", true)]
[InlineData("sdmcp_abc", "sdmcp_xyz", false)]
[InlineData("sdmcp_abc", "sdmcp_ab", false)] // ä¸åŒé•¿åº¦
[InlineData("", "", true)] // 空å—符串相ç‰
[InlineData(null, "sdmcp_abc", false)] // null
[InlineData("sdmcp_abc", null, false)] // null
[InlineData(null, null, false)] // åŒnull
public void SafeEquals_VariousInputs(String a, String b, Boolean expected)
{
var result = McpToken.SafeEquals(a, b);
Assert.Equal(expected, result);
}
[Fact]
public void SafeEquals_ConstantTimeForEqualLength()
{
// åŒé•¿åº¦ä¸åŒå†…容应返回 false
var a = "sdmcp_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
var b = "sdmcp_bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb";
Assert.False(McpToken.SafeEquals(a, b));
Assert.True(McpToken.SafeEquals(a, a));
}
[Fact]
public void IsValid_Disabled_ReturnsFalse()
{
var token = new McpToken { Enable = false, ExpireTime = DateTime.MinValue };
Assert.False(token.IsValid());
}
[Fact]
public void IsValid_EnabledNoExpiry_ReturnsTrue()
{
var token = new McpToken { Enable = true, ExpireTime = DateTime.MinValue };
Assert.True(token.IsValid());
}
[Fact]
public void IsValid_EnabledExpired_ReturnsFalse()
{
var token = new McpToken { Enable = true, ExpireTime = DateTime.Now.AddDays(-1) };
Assert.False(token.IsValid());
}
[Fact]
public void IsValid_EnabledFutureExpiry_ReturnsTrue()
{
var token = new McpToken { Enable = true, ExpireTime = DateTime.Now.AddDays(1) };
Assert.True(token.IsValid());
}
[Fact]
public void FindByToken_EmptyOrNull_ReturnsNull()
{
Assert.Null(McpToken.FindByToken(""));
Assert.Null(McpToken.FindByToken(null));
}
[Fact]
public void FindById_Negative_ReturnsNull()
{
Assert.Null(McpToken.FindById(-1));
}
}
|