Scert/backend/service/runtime_test.go

113 lines
3.1 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 service
import (
"net/http"
"os"
"path/filepath"
"testing"
)
func TestOpenCreatesUninitializedRuntime(t *testing.T) {
baseDir := t.TempDir()
runtime, err := Open(filepath.Join(baseDir, "config", "scert.json"), baseDir)
if err != nil {
t.Fatalf("打开桌面核心服务失败:%v", err)
}
defer runtime.Close()
if runtime.core != nil {
t.Fatal("桌面首次初始化不应创建正式应用")
}
if _, err := os.Stat(defaultConfig(baseDir).Database.DSN); !os.IsNotExist(err) {
t.Fatalf("桌面初始化提前创建数据库:%v", err)
}
request, err := http.NewRequest(http.MethodGet, "http://127.0.0.1/api/v1/setup/status", nil)
if err != nil {
t.Fatal(err)
}
request.RemoteAddr = "127.0.0.1:1234"
response := newRecordingResponse()
runtime.Handler().ServeHTTP(response, request)
if response.status != http.StatusOK {
t.Fatalf("初始化状态接口状态码错误:%d,响应:%s", response.status, response.body)
}
}
func TestOpenRejectsInvalidConfiguration(t *testing.T) {
baseDir := t.TempDir()
configPath := filepath.Join(baseDir, "config", "scert.json")
if err := os.MkdirAll(filepath.Dir(configPath), 0o755); err != nil {
t.Fatal(err)
}
if err := os.WriteFile(configPath, []byte("{invalid"), 0o600); err != nil {
t.Fatal(err)
}
if _, err := Open(configPath, baseDir); err == nil {
t.Fatal("无效配置不应打开成功")
}
}
type recordingResponse struct {
header http.Header
status int
body string
}
func newRecordingResponse() *recordingResponse {
return &recordingResponse{header: make(http.Header)}
}
func (r *recordingResponse) Header() http.Header {
return r.header
}
func (r *recordingResponse) WriteHeader(status int) {
r.status = status
}
func (r *recordingResponse) Write(body []byte) (int, error) {
if r.status == 0 {
r.status = http.StatusOK
}
r.body += string(body)
return len(body), nil
}
func TestOpenAppliesEnvironmentOverrides(t *testing.T) {
baseDir := t.TempDir()
configPath := filepath.Join(baseDir, "config", "scert.json")
cfg := defaultConfig(baseDir)
if err := cfg.Save(configPath); err != nil {
t.Fatalf("保存测试配置失败:%v", err)
}
t.Setenv("SCERT_WEB_ENABLED", "false")
runtime, err := Open(configPath, baseDir)
if err != nil {
t.Fatalf("应用环境覆盖后打开桌面核心服务失败:%v", err)
}
defer runtime.Close()
request, err := http.NewRequest(http.MethodGet, "http://127.0.0.1/", nil)
if err != nil {
t.Fatal(err)
}
request.RemoteAddr = "127.0.0.1:1234"
response := newRecordingResponse()
runtime.Handler().ServeHTTP(response, request)
if response.status != http.StatusNotFound {
t.Fatalf("SCERT_WEB_ENABLED=false 未关闭 Web 页面,状态码:%d", response.status)
}
}
func TestOpenRejectsInvalidEnvironmentOverride(t *testing.T) {
baseDir := t.TempDir()
configPath := filepath.Join(baseDir, "config", "scert.json")
if err := defaultConfig(baseDir).Save(configPath); err != nil {
t.Fatalf("保存测试配置失败:%v", err)
}
t.Setenv("SCERT_WEB_ENABLED", "无效")
if _, err := Open(configPath, baseDir); err == nil {
t.Fatal("无效环境覆盖不应打开桌面核心服务")
}
}