79 lines
2.4 KiB
Go
79 lines
2.4 KiB
Go
package admin
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"path/filepath"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/Wei-Shaw/sub2api/internal/service"
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
type apiEnvelope struct {
|
|
Code int `json:"code"`
|
|
Message string `json:"message"`
|
|
Reason string `json:"reason"`
|
|
Data json.RawMessage `json:"data"`
|
|
}
|
|
|
|
func TestDataManagementHandler_AgentHealthAlways200(t *testing.T) {
|
|
gin.SetMode(gin.TestMode)
|
|
|
|
svc := service.NewDataManagementServiceWithOptions(filepath.Join(t.TempDir(), "missing.sock"), 50*time.Millisecond)
|
|
h := NewDataManagementHandler(svc)
|
|
|
|
r := gin.New()
|
|
r.GET("/api/v1/admin/data-management/agent/health", h.GetAgentHealth)
|
|
|
|
rec := httptest.NewRecorder()
|
|
req := httptest.NewRequest(http.MethodGet, "/api/v1/admin/data-management/agent/health", nil)
|
|
r.ServeHTTP(rec, req)
|
|
|
|
require.Equal(t, http.StatusOK, rec.Code)
|
|
|
|
var envelope apiEnvelope
|
|
require.NoError(t, json.Unmarshal(rec.Body.Bytes(), &envelope))
|
|
require.Equal(t, 0, envelope.Code)
|
|
|
|
var data struct {
|
|
Enabled bool `json:"enabled"`
|
|
Reason string `json:"reason"`
|
|
SocketPath string `json:"socket_path"`
|
|
}
|
|
require.NoError(t, json.Unmarshal(envelope.Data, &data))
|
|
require.False(t, data.Enabled)
|
|
require.Equal(t, service.DataManagementDeprecatedReason, data.Reason)
|
|
require.Equal(t, svc.SocketPath(), data.SocketPath)
|
|
}
|
|
|
|
func TestDataManagementHandler_NonHealthRouteReturns503WhenDisabled(t *testing.T) {
|
|
gin.SetMode(gin.TestMode)
|
|
|
|
svc := service.NewDataManagementServiceWithOptions(filepath.Join(t.TempDir(), "missing.sock"), 50*time.Millisecond)
|
|
h := NewDataManagementHandler(svc)
|
|
|
|
r := gin.New()
|
|
r.GET("/api/v1/admin/data-management/config", h.GetConfig)
|
|
|
|
rec := httptest.NewRecorder()
|
|
req := httptest.NewRequest(http.MethodGet, "/api/v1/admin/data-management/config", nil)
|
|
r.ServeHTTP(rec, req)
|
|
|
|
require.Equal(t, http.StatusServiceUnavailable, rec.Code)
|
|
|
|
var envelope apiEnvelope
|
|
require.NoError(t, json.Unmarshal(rec.Body.Bytes(), &envelope))
|
|
require.Equal(t, http.StatusServiceUnavailable, envelope.Code)
|
|
require.Equal(t, service.DataManagementDeprecatedReason, envelope.Reason)
|
|
}
|
|
|
|
func TestNormalizeBackupIdempotencyKey(t *testing.T) {
|
|
require.Equal(t, "from-header", normalizeBackupIdempotencyKey("from-header", "from-body"))
|
|
require.Equal(t, "from-body", normalizeBackupIdempotencyKey(" ", " from-body "))
|
|
require.Equal(t, "", normalizeBackupIdempotencyKey("", ""))
|
|
}
|