Some checks are pending
Security Checks / security (push) Waiting to run
统一 frontend、backend、test、test-log 和 out 目录,更新构建、部署及测试入口;纳入配置管理兼容与首次安全引导修复;排除本机配置、密钥和测试产物。
79 lines
2.2 KiB
Go
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")
|
|
}
|
|
}
|