| 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("", "")) |
| } |
|
|