CounterDroneBackend/test/unit/CounterDrone.Core.Tests/FrameDataStoreTests.cs

73 lines
2.1 KiB
C#

using System;
using System.IO;
using CounterDrone.Core;
using CounterDrone.Core.Simulation;
using Xunit;
namespace CounterDrone.Core.Tests
{
public class FrameDataStoreTests : IDisposable
{
private readonly string _testDir;
private readonly FrameDataStore _store;
public FrameDataStoreTests()
{
_testDir = Path.Combine(Path.GetTempPath(), $"cd_frames_{Guid.NewGuid():N}");
var paths = new TestPathProvider(_testDir);
_store = new FrameDataStore(paths);
}
public void Dispose()
{
if (Directory.Exists(_testDir)) Directory.Delete(_testDir, true);
}
[Fact]
public void CleanupExpired_DeletesOldFiles()
{
// 设置为 0 天保留,所有文件都是"过期"的
_store.RetentionDays = 0;
// 创建一些假帧数据库
var db1 = _store.CreateOrOpen("task_old_1");
db1.Close();
var db2 = _store.CreateOrOpen("task_old_2");
db2.Close();
var deleted = _store.CleanupExpired();
Assert.Equal(2, deleted);
// 文件应该被删除
Assert.False(File.Exists(Path.Combine(_testDir, "frames", "task_old_1.db")));
Assert.False(File.Exists(Path.Combine(_testDir, "frames", "task_old_2.db")));
}
[Fact]
public void CleanupExpired_KeepsRecentFiles()
{
_store.RetentionDays = 365; // 保留 1 年
var db = _store.CreateOrOpen("task_new");
db.Close();
// 手动修改创建时间为"最近"
var filePath = Path.Combine(_testDir, "frames", "task_new.db");
File.SetCreationTime(filePath, DateTime.Now);
var deleted = _store.CleanupExpired();
Assert.Equal(0, deleted);
// 文件应该保留
Assert.True(File.Exists(filePath));
}
[Fact]
public void CleanupExpired_EmptyDir_ReturnsZero()
{
var deleted = _store.CleanupExpired();
Assert.Equal(0, deleted);
}
}
}