云库增加 AI识图,缓存,我的云库收藏增加安全标志

调用外部API 扣费
This commit is contained in:
chfei committed 2026-11-06 19:25:36 +08:00
1 parent 7c29e57623
commit 150e8644b7
49 files changed
+1069 -28

No files matched your search

@@ -145,6 +145,35 @@ public sealed class PersistentSessionTests
Assert.NotNull(await service.ValidateTokenAsync(replacement.Token));
}
[Fact]
public async Task Cleanup_RemovesRevokedAndExpiredTokens_AndPreservesActiveTokens()
{
using var db = Open(":memory:");
using var cache = new MemoryCache(new MemoryCacheOptions());
var clock = new Clock();
var service = new TokenService(db, Options.Create(new TokenAuthOptions()), cache, clock);
var active = Issue(service);
Assert.NotNull(await service.ValidateTokenAsync(active.Token));
var now = DateTime.SpecifyKind(clock.Now.UtcDateTime, DateTimeKind.Unspecified);
// 覆盖撤销、闲置到期、绝对到期的等值边界,以及尚差一秒到期的有效记录。
db.Insert(new[]
{
new UserToken { UserName = "same", TokenHash = "revoked", CreatedAt = now, ExpiresAt = now.AddDays(7), Revoked = true },
new UserToken { UserName = "same", TokenHash = "idle", CreatedAt = now.AddDays(-7), ExpiresAt = now },
new UserToken { UserName = "same", TokenHash = "absolute", CreatedAt = now.AddDays(-30), ExpiresAt = now.AddDays(1) },
new UserToken { UserName = "same", TokenHash = "near-expiry", CreatedAt = now.AddDays(-30).AddSeconds(1), ExpiresAt = now.AddSeconds(1) }
}).ExecuteAffrows();
Assert.Equal(3, service.CleanupExpiredTokens());
Assert.Equal(2, db.Select<UserToken>().Count());
Assert.True(db.Select<UserToken>().Any(t => t.TokenHash == "near-expiry"));
Assert.Equal(0, service.CleanupExpiredTokens());
Assert.NotNull(await service.ValidateTokenAsync(active.Token));
clock.Now = clock.Now.AddSeconds(1);
Assert.Equal(1, service.CleanupExpiredTokens());
Assert.Single(db.Select<UserToken>().ToList());
}
[Fact]
public async Task CacheDisabled_ObservesExternalRevocation_AndRejectsIdleExpiry()
{