Smail/backend/services/restart/service_test.go
smail f60d3b0880
Some checks are pending
Security Checks / security (push) Waiting to run
整理前后端与测试构建目录并完善配置和安全引导
统一 frontend、backend、test、test-log 和 out 目录,更新构建、部署及测试入口;纳入配置管理兼容与首次安全引导修复;排除本机配置、密钥和测试产物。
2026-09-05 19:19:52 +08:00

79 lines
2.2 KiB
Go

package restart
import (
"context"
"errors"
"testing"
)
func TestSignalTriggerRequest(t *testing.T) {
channel := make(chan bool, 1)
trigger := NewSignalTrigger(channel)
if err := trigger.Request(context.Background()); err != nil {
t.Fatalf("request failed: %v", err)
}
select {
case value := <-channel:
if !value {
t.Fatal("restart signal was false")
}
default:
t.Fatal("restart signal was not sent")
}
}
func TestSignalTriggerUnavailable(t *testing.T) {
if err := (*SignalTrigger)(nil).Request(context.Background()); !errors.Is(err, ErrUnavailable) {
t.Fatalf("expected unavailable error, got %v", err)
}
if err := NewSignalTrigger(nil).Request(context.Background()); !errors.Is(err, ErrUnavailable) {
t.Fatalf("expected unavailable error for nil channel, got %v", err)
}
}
func TestSignalTriggerCanceled(t *testing.T) {
channel := make(chan bool)
trigger := NewSignalTrigger(channel)
ctx, cancel := context.WithCancel(context.Background())
cancel()
if err := trigger.Request(ctx); !errors.Is(err, ErrCanceled) {
t.Fatalf("expected canceled error, got %v", err)
}
}
func TestCurrentTriggerRegistry(t *testing.T) {
SetCurrent(nil)
if Current() != nil {
t.Fatal("expected empty current trigger")
}
first := NewSignalTrigger(make(chan bool, 1))
second := NewSignalTrigger(make(chan bool, 1))
SetCurrent(first)
if Current() != first {
t.Fatal("first trigger was not registered")
}
SetCurrent(second)
if Current() != second {
t.Fatal("current trigger was not replaced")
}
SetCurrent(nil)
if Current() != nil {
t.Fatal("current trigger was not cleared")
}
}
func TestBuildPreviewUsesFixedRestartTarget(t *testing.T) {
pending := []string{"smtp", "imap"}
preview := BuildPreview(9, pending, false)
if preview.Target != "smail" || preview.Action != "restart" || preview.ActiveGeneration != 9 || preview.ServiceManager != "固定服务管理器" {
t.Fatalf("unexpected restart preview: %+v", preview)
}
if preview.TriggerAvailable || len(preview.PendingServices) != 2 {
t.Fatalf("unexpected restart preview availability: %+v", preview)
}
preview.PendingServices[0] = "changed"
if pending[0] == "changed" {
t.Fatal("preview shares pending service slice")
}
}