using System;
using System.Threading;
using NewLife;
using NewLife.Caching;
using Stardust.Server.Services;
using Xunit;
namespace ServerTest.Services;
/// <summary>é™„ä»¶ä¸‹è½½çŸæ—¶ä»¤ç‰ŒæœåŠ¡å•元测试(安全V-11)</summary>
public class DownloadTokenServiceTests
{
private readonly DownloadTokenService _service = new(new CacheProvider());
[Fact(DisplayName = "ç¾å‘令牌åŽå¯æ ¡éªŒé€šè¿‡")]
public void Issue_Valid()
{
var id = DateTime.Now.Ticks % 1000000 + 1;
var token = _service.Issue(id);
Assert.False(token.IsNullOrEmpty());
Assert.True(_service.Valid(id, token));
}
[Fact(DisplayName = "é”™è¯¯æˆ–ç©ºä»¤ç‰Œæ ¡éªŒå¤±è´¥")]
public void Valid_WrongToken_Fail()
{
var id = DateTime.Now.Ticks % 1000000 + 2;
_service.Issue(id);
Assert.False(_service.Valid(id, "bad-token"));
Assert.False(_service.Valid(id, ""));
Assert.False(_service.Valid(id, null));
}
[Fact(DisplayName = "令牌ä¸èƒ½è·¨é™„件使用")]
public void Token_BoundToAttachment()
{
var id1 = DateTime.Now.Ticks % 1000000 + 3;
var id2 = DateTime.Now.Ticks % 1000000 + 4;
var token = _service.Issue(id1);
Assert.False(_service.Valid(id2, token));
}
[Fact(DisplayName = "令牌过期åŽå¤±æ•ˆ")]
public void Valid_Expired_Fail()
{
var id = DateTime.Now.Ticks % 1000000 + 5;
_service.Issue(id, 1);
Thread.Sleep(1100);
Assert.False(_service.Valid(id, "any-token"));
}
[Fact(DisplayName = "下载URLé™„åŠ ä»¤ç‰Œä¸”éžé™„ä»¶é“¾æŽ¥åŽŸæ ·è¿”å›ž")]
public void AppendToken_Url()
{
// 附件链接:附带令牌
var url = _service.AppendToken("/cube/file?id=12345.zip", 600);
Assert.Contains("token=", url);
var id = DownloadTokenService.GetAttachmentId(url);
Assert.Equal(12345, id);
// éžé™„ä»¶é“¾æŽ¥ï¼šåŽŸæ ·è¿”å›ž
var other = _service.AppendToken("http://x.newlifex.com/star/xx.zip", 600);
Assert.Equal("http://x.newlifex.com/star/xx.zip", other);
Assert.Equal(0, DownloadTokenService.GetAttachmentId(other));
}
[Fact(DisplayName = "ç»å¯¹åœ°å€åŒæ ·å¯è§£æžå¹¶é™„带令牌")]
public void AppendToken_AbsoluteUrl()
{
var url = _service.AppendToken("http://star.example.com/cube/file?id=987&token=old", 600);
Assert.Contains("token=", url);
Assert.Equal(987, DownloadTokenService.GetAttachmentId(url));
}
}
|