70 lines
1.9 KiB
Go
70 lines
1.9 KiB
Go
package main
|
||
|
||
import (
|
||
"errors"
|
||
"net"
|
||
"net/http"
|
||
"strings"
|
||
"testing"
|
||
"time"
|
||
)
|
||
|
||
func TestListenDesktopPortReturnsReusableListener(t *testing.T) {
|
||
listener, err := listenDesktopPort(0)
|
||
if err != nil {
|
||
t.Fatalf("listener-first 应直接获取配置端口 listener: %v", err)
|
||
}
|
||
defer listener.Close()
|
||
|
||
server := &http.Server{ReadHeaderTimeout: time.Second}
|
||
done := make(chan struct{})
|
||
go func() {
|
||
defer close(done)
|
||
err := server.Serve(listener)
|
||
if err != nil && err != http.ErrServerClosed && !errors.Is(err, net.ErrClosed) {
|
||
t.Errorf("使用同一个 listener 启动 server 失败: %v", err)
|
||
}
|
||
}()
|
||
|
||
if err := server.Close(); err != nil {
|
||
t.Fatalf("关闭测试 server 失败: %v", err)
|
||
}
|
||
<-done
|
||
}
|
||
|
||
func TestGetDesktopConfigPath(t *testing.T) {
|
||
path := getDesktopConfigPath()
|
||
if path == "" {
|
||
t.Fatal("getDesktopConfigPath 应返回非空路径")
|
||
}
|
||
if !strings.Contains(path, "config.yaml") {
|
||
t.Fatalf("路径应包含 config.yaml,实际: %s", path)
|
||
}
|
||
t.Log("getDesktopConfigPath 测试通过")
|
||
}
|
||
|
||
func TestDesktopConfiguredPortHelpers(t *testing.T) {
|
||
port := 19830
|
||
|
||
if got := desktopListenAddr(port); got != ":19830" {
|
||
t.Fatalf("HTTP 监听地址应使用配置端口,实际: %s", got)
|
||
}
|
||
if got := desktopURL(port); got != "http://localhost:19830" {
|
||
t.Fatalf("浏览器 URL 应使用配置端口,实际: %s", got)
|
||
}
|
||
if got := desktopPortMenuTitle(port); got != "端口: 19830" {
|
||
t.Fatalf("托盘端口显示应使用配置端口,实际: %s", got)
|
||
}
|
||
}
|
||
|
||
func TestDesktopConfigErrorMessageContainsPathAndReason(t *testing.T) {
|
||
msg := desktopConfigErrorMessage("/tmp/nex/config.yaml", errors.New("yaml parse failed"))
|
||
|
||
if !strings.Contains(msg, "/tmp/nex/config.yaml") {
|
||
t.Fatalf("配置错误提示应包含配置路径,实际: %s", msg)
|
||
}
|
||
if !strings.Contains(msg, "yaml parse failed") {
|
||
t.Fatalf("配置错误提示应包含失败原因,实际: %s", msg)
|
||
}
|
||
}
|