You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.3 KiB
Go
85 lines
2.3 KiB
Go
package integration
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"net"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/noahlann/nnet/pkg/nnet"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
// TestHealthCheck 测试健康检查
|
|
func TestHealthCheck(t *testing.T) {
|
|
listener, err := net.Listen("tcp", "127.0.0.1:0")
|
|
require.NoError(t, err)
|
|
port := listener.Addr().(*net.TCPAddr).Port
|
|
listener.Close()
|
|
|
|
cfg := &nnet.Config{
|
|
Addr: fmt.Sprintf("tcp://127.0.0.1:%d", port),
|
|
}
|
|
|
|
ts := StartTestServerWithRoutes(t, cfg, func(srv nnet.Server) {
|
|
srv.Router().RegisterString("test", func(ctx nnet.Context) error {
|
|
return ctx.Response().WriteBytes([]byte("ok\n"))
|
|
})
|
|
})
|
|
defer CleanupTestServer(t, ts)
|
|
|
|
// 获取健康检查器
|
|
healthChecker := ts.Server.HealthChecker()
|
|
require.NotNil(t, healthChecker, "Health checker should not be nil")
|
|
|
|
// 获取健康状态
|
|
status, results := healthChecker.Check()
|
|
assert.NotEmpty(t, status, "Status should not be empty")
|
|
assert.NotNil(t, results, "Results should not be nil")
|
|
t.Logf("Health status: %s, results: %+v", status, results)
|
|
}
|
|
|
|
// TestHealthHandler 测试健康检查HTTP处理器
|
|
func TestHealthHandler(t *testing.T) {
|
|
listener, err := net.Listen("tcp", "127.0.0.1:0")
|
|
require.NoError(t, err)
|
|
port := listener.Addr().(*net.TCPAddr).Port
|
|
listener.Close()
|
|
|
|
cfg := &nnet.Config{
|
|
Addr: fmt.Sprintf("tcp://127.0.0.1:%d", port),
|
|
}
|
|
|
|
ts := StartTestServerWithRoutes(t, cfg, func(srv nnet.Server) {
|
|
srv.Router().RegisterString("test", func(ctx nnet.Context) error {
|
|
return ctx.Response().WriteBytes([]byte("ok\n"))
|
|
})
|
|
})
|
|
defer CleanupTestServer(t, ts)
|
|
|
|
// 获取健康检查处理器
|
|
handler := ts.Server.HealthHandler()
|
|
require.NotNil(t, handler, "Health handler should not be nil")
|
|
|
|
// 创建HTTP请求
|
|
req := httptest.NewRequest(http.MethodGet, "/health", nil)
|
|
w := httptest.NewRecorder()
|
|
|
|
// 调用处理器
|
|
handler.ServeHTTP(w, req)
|
|
|
|
// 验证响应
|
|
assert.Equal(t, http.StatusOK, w.Code, "Response status should be OK")
|
|
|
|
var result map[string]interface{}
|
|
err = json.Unmarshal(w.Body.Bytes(), &result)
|
|
assert.NoError(t, err, "Response should be valid JSON")
|
|
assert.Contains(t, result, "status", "Response should contain status")
|
|
assert.Contains(t, result, "results", "Response should contain results")
|
|
t.Logf("Health check response: %s", w.Body.String())
|
|
}
|
|
|