通过本机Unix套接字报告HTTPS监听状态,同步服务配置与安装模板,保持初始化业务就绪隔离。补充生命周期回归并修复旧CLI测试误用正式目录的问题。更新Linux原生测试证据,明确新候选尚未部署、生产验收未放行。
76 lines
2.0 KiB
Go
76 lines
2.0 KiB
Go
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("不存在的通知套接字被当作成功")
|
||
}
|
||
}
|