using Rainbow.Entity;
using Rainbow.Services;
using Xunit;
namespace XUnitTest.Rainbow.Services;
public class FirewallManagerTests
{
[Fact(DisplayName = "FirewallManager_构造_无参数创建成功")]
public void Constructor_NoParams_Success()
{
var manager = new FirewallManager();
Assert.NotNull(manager);
Assert.NotNull(manager.Log);
}
[Fact(DisplayName = "FirewallManager_构造_传入Shell和Backup")]
public void Constructor_WithShellAndBackup()
{
var shell = new ShellExecutor();
var backup = new ConfigBackup();
var manager = new FirewallManager(shell, backup);
Assert.Same(shell, manager.Shell);
Assert.Same(backup, manager.Backup);
}
[Fact(DisplayName = "FirewallManager_SetSchedule_设置后GetSchedules可见")]
public void SetSchedule_ThenGetSchedules_Visible()
{
var manager = new FirewallManager();
manager.SetSchedule(1, "08:00", "18:00", 127);
var schedules = manager.GetSchedules();
Assert.True(schedules.ContainsKey(1));
Assert.Equal("08:00", schedules[1].StartTime);
Assert.Equal("18:00", schedules[1].EndTime);
Assert.Equal(127, schedules[1].WeekDays);
}
[Fact(DisplayName = "FirewallManager_SetSchedule_空时间移除调度")]
public void SetSchedule_EmptyTime_Removed()
{
var manager = new FirewallManager();
manager.SetSchedule(1, "08:00", "18:00");
manager.SetSchedule(1, "", "");
var schedules = manager.GetSchedules();
Assert.False(schedules.ContainsKey(1));
}
[Fact(DisplayName = "FirewallManager_RemoveSchedule_移除存在项")]
public void RemoveSchedule_Existing_Removed()
{
var manager = new FirewallManager();
manager.SetSchedule(1, "08:00", "18:00");
manager.RemoveSchedule(1);
Assert.False(manager.GetSchedules().ContainsKey(1));
}
[Fact(DisplayName = "FirewallManager_RemoveSchedule_不存在的项不抛异常")]
public void RemoveSchedule_NonExisting_NoThrow()
{
var manager = new FirewallManager();
var ex = Record.Exception(() => manager.RemoveSchedule(999));
Assert.Null(ex);
}
[Fact(DisplayName = "FirewallManager_SaveRules_返回待实现")]
public async Task SaveRules_ReturnsNotImplemented()
{
var manager = new FirewallManager();
var result = await manager.SaveRulesAsync();
Assert.NotNull(result);
Assert.False(result.Success);
Assert.Equal(-1, result.ExitCode);
}
}
|