Scert/backend/internal/serviceready/notify_linux_test.go
xuans 0b74886c45 修复Linux启动就绪通知并隔离命令行测试目录
通过本机Unix套接字报告HTTPS监听状态,同步服务配置与安装模板,保持初始化业务就绪隔离。补充生命周期回归并修复旧CLI测试误用正式目录的问题。更新Linux原生测试证据,明确新候选尚未部署、生产验收未放行。
2026-10-02 12:20:47 +08:00

76 lines
2.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package serviceready
import (
"net"
"path/filepath"
"testing"
"time"
)
func TestReadySocket(t *testing.T) {
for _, mode := range []string{"path", "abstract"} {
t.Run(mode, func(t *testing.T) {
path := filepath.Join(t.TempDir(), "notify")
if mode == "abstract" {
path = "@" + path
}
socket, err := net.ListenUnixgram("unixgram", &net.UnixAddr{Name: path, Net: "unixgram"})
if err != nil {
t.Fatal(err)
}
defer socket.Close()
t.Setenv("NOTIFY_SOCKET", path)
status := "HTTPS 已监听,业务状态独立检查"
if err := Ready(status); err != nil {
t.Fatal(err)
}
if err := socket.SetReadDeadline(time.Now().Add(time.Second)); err != nil {
t.Fatal(err)
}
buffer := make([]byte, 1024)
n, _, err := socket.ReadFromUnix(buffer)
if err != nil || string(buffer[:n]) != "READY=1\nSTATUS="+status {
t.Fatalf("收到的通知不正确:%q,%v", buffer[:n], err)
}
})
}
}
func TestReadyWithoutManager(t *testing.T) {
t.Setenv("NOTIFY_SOCKET", "")
if err := Ready("已监听"); err != nil {
t.Fatal(err)
}
}
func TestReadyRejectsInvalidSocket(t *testing.T) {
for _, address := range []string{"127.0.0.1:8443", "relative", "/", "@", "/tmp/notify\nREADY=1"} {
t.Setenv("NOTIFY_SOCKET", address)
if err := Ready("已监听"); err == nil {
t.Fatal("接受了非本机或非法通知地址")
}
}
}
func TestReadyRejectsStatusInjection(t *testing.T) {
path := filepath.Join(t.TempDir(), "notify")
socket, err := net.ListenUnixgram("unixgram", &net.UnixAddr{Name: path, Net: "unixgram"})
if err != nil {
t.Fatal(err)
}
defer socket.Close()
t.Setenv("NOTIFY_SOCKET", path)
for _, status := range []string{"状态\nREADY=1", "状态\rSTOPPING=1", "状态\x00"} {
if err := Ready(status); err == nil {
t.Fatal("接受了状态字段注入")
}
}
}
func TestReadyMissingSocketFails(t *testing.T) {
t.Setenv("NOTIFY_SOCKET", filepath.Join(t.TempDir(), "missing"))
if err := Ready("已监听"); err == nil {
t.Fatal("不存在的通知套接字被当作成功")
}
}