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