mirror of
https://github.com/lukaszraczylo/gohoarder.git
synced 2026-10-12 00:45:16 +00:00
The automated update changed only go.mod, so the build failed on the old v2 imports. This commit moves the code to the v3 API. The commit replaces BodyParser with Bind().Body, Static with the static middleware, and ListenTLS with ListenConfig. It also updates the tests for TestConfig. Fixes #179
163 lines
3.9 KiB
Go
163 lines
3.9 KiB
Go
package app
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/gofiber/fiber/v3"
|
|
"github.com/lukaszraczylo/gohoarder/pkg/prewarming"
|
|
"github.com/stretchr/testify/suite"
|
|
)
|
|
|
|
type PrewarmingHandlersTestSuite struct {
|
|
suite.Suite
|
|
app *fiber.App
|
|
appInst *App
|
|
prewarmWorker *prewarming.Worker
|
|
}
|
|
|
|
func (s *PrewarmingHandlersTestSuite) SetupTest() {
|
|
// Create pre-warming worker (disabled by default)
|
|
s.prewarmWorker = prewarming.NewWorker(prewarming.Config{
|
|
Enabled: false,
|
|
MaxConcurrent: 5,
|
|
})
|
|
|
|
// Create app instance
|
|
s.appInst = &App{
|
|
prewarmWorker: s.prewarmWorker,
|
|
}
|
|
|
|
// Create Fiber app
|
|
s.app = fiber.New()
|
|
|
|
// Register routes
|
|
s.app.Get("/api/admin/prewarming/status", s.appInst.handlePrewarmingStatus)
|
|
s.app.Post("/api/admin/prewarming/trigger", s.appInst.handlePrewarmingTrigger)
|
|
s.app.Post("/api/admin/prewarming/package", s.appInst.handlePrewarmingPackage)
|
|
}
|
|
|
|
func (s *PrewarmingHandlersTestSuite) TearDownTest() {
|
|
if s.prewarmWorker != nil {
|
|
s.prewarmWorker.Stop()
|
|
}
|
|
}
|
|
|
|
func TestPrewarmingHandlersTestSuite(t *testing.T) {
|
|
suite.Run(t, new(PrewarmingHandlersTestSuite))
|
|
}
|
|
|
|
func (s *PrewarmingHandlersTestSuite) TestHandlePrewarmingStatus() {
|
|
req := httptest.NewRequest("GET", "/api/admin/prewarming/status", nil)
|
|
resp, err := s.app.Test(req)
|
|
s.Require().NoError(err)
|
|
s.Equal(200, resp.StatusCode)
|
|
|
|
var result struct {
|
|
Enabled bool `json:"enabled"`
|
|
Running bool `json:"running"`
|
|
QueueSize int `json:"queue_size"`
|
|
ActiveWorkers int `json:"active_workers"`
|
|
}
|
|
err = json.NewDecoder(resp.Body).Decode(&result)
|
|
s.NoError(err)
|
|
s.False(result.Enabled) // Disabled in test setup
|
|
}
|
|
|
|
func (s *PrewarmingHandlersTestSuite) TestHandlePrewarmingTrigger() {
|
|
req := httptest.NewRequest("POST", "/api/admin/prewarming/trigger", nil)
|
|
resp, err := s.app.Test(req)
|
|
s.Require().NoError(err)
|
|
s.Equal(200, resp.StatusCode)
|
|
|
|
var result map[string]interface{}
|
|
err = json.NewDecoder(resp.Body).Decode(&result)
|
|
s.NoError(err)
|
|
s.Contains(result, "message")
|
|
}
|
|
|
|
func (s *PrewarmingHandlersTestSuite) TestHandlePrewarmingPackage() {
|
|
tests := []struct {
|
|
requestBody map[string]string
|
|
name string
|
|
expectedStatus int
|
|
}{
|
|
{
|
|
name: "prewarm npm package",
|
|
requestBody: map[string]string{
|
|
"registry": "npm",
|
|
"name": "lodash",
|
|
"version": "4.17.21",
|
|
},
|
|
expectedStatus: 200,
|
|
},
|
|
{
|
|
name: "prewarm pypi package",
|
|
requestBody: map[string]string{
|
|
"registry": "pypi",
|
|
"name": "requests",
|
|
"version": "2.28.0",
|
|
},
|
|
expectedStatus: 200,
|
|
},
|
|
{
|
|
name: "prewarm go package",
|
|
requestBody: map[string]string{
|
|
"registry": "go",
|
|
"name": "github.com/stretchr/testify",
|
|
"version": "v1.8.0",
|
|
},
|
|
expectedStatus: 200,
|
|
},
|
|
{
|
|
name: "missing registry",
|
|
requestBody: map[string]string{
|
|
"name": "lodash",
|
|
"version": "4.17.21",
|
|
},
|
|
expectedStatus: 400,
|
|
},
|
|
{
|
|
name: "missing name",
|
|
requestBody: map[string]string{
|
|
"registry": "npm",
|
|
"version": "4.17.21",
|
|
},
|
|
expectedStatus: 400,
|
|
},
|
|
{
|
|
name: "missing version",
|
|
requestBody: map[string]string{
|
|
"registry": "npm",
|
|
"name": "lodash",
|
|
},
|
|
expectedStatus: 400,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
s.Run(tt.name, func() {
|
|
bodyBytes, err := json.Marshal(tt.requestBody)
|
|
s.Require().NoError(err)
|
|
|
|
req := httptest.NewRequest("POST", "/api/admin/prewarming/package", bytes.NewReader(bodyBytes))
|
|
req.Header.Set("Content-Type", "application/json")
|
|
|
|
resp, err := s.app.Test(req)
|
|
s.Require().NoError(err)
|
|
s.Equal(tt.expectedStatus, resp.StatusCode)
|
|
})
|
|
}
|
|
}
|
|
|
|
func (s *PrewarmingHandlersTestSuite) TestHandlePrewarmingPackageInvalidJSON() {
|
|
req := httptest.NewRequest("POST", "/api/admin/prewarming/package", bytes.NewReader([]byte("invalid json")))
|
|
req.Header.Set("Content-Type", "application/json")
|
|
|
|
resp, err := s.app.Test(req)
|
|
s.Require().NoError(err)
|
|
s.Equal(400, resp.StatusCode)
|
|
}
|