add composer

This commit is contained in:
2025-11-17 10:38:06 +08:00
parent 8cff19ecca
commit 760e4a9b03
3 changed files with 197 additions and 13 deletions

View File

@@ -8,6 +8,7 @@ import (
"net/http"
"net/http/httptest"
"net/url"
"strings"
"sync"
"testing"
"time"
@@ -75,6 +76,25 @@ func TestComposerProxyCachesMetadataAndDists(t *testing.T) {
return resp
}
rootResp := doRequest("/packages.json")
if rootResp.StatusCode != fiber.StatusOK {
t.Fatalf("expected 200 for packages.json, got %d", rootResp.StatusCode)
}
rootBody, _ := io.ReadAll(rootResp.Body)
rootResp.Body.Close()
var root map[string]any
if err := json.Unmarshal(rootBody, &root); err != nil {
t.Fatalf("parse packages.json: %v", err)
}
metaURL, _ := root["metadata-url"].(string)
assertProxyURL(t, "metadata-url", metaURL)
if providersURL, _ := root["providers-url"].(string); providersURL != "" {
assertProxyURL(t, "providers-url", providersURL)
}
if notifyURL, _ := root["notify-batch"].(string); notifyURL != "" {
assertProxyURL(t, "notify-batch", notifyURL)
}
metaPath := "/p2/example/package.json"
resp := doRequest(metaPath)
if resp.StatusCode != fiber.StatusOK {
@@ -222,7 +242,17 @@ func (s *composerStub) buildMetadata() []byte {
func (s *composerStub) handlePackages(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
_, _ = w.Write([]byte(`{"packages":{}}`))
payload := map[string]any{
"packages": map[string]any{},
"metadata-url": "p2/%package%.json",
"providers-url": "p/%package%$%hash%.json",
"notify-batch": "/downloads/",
"provider-includes": map[string]any{
"p/provider-latest$%hash%.json": map[string]any{"sha256": "dummy"},
},
}
data, _ := json.Marshal(payload)
_, _ = w.Write(data)
}
func (s *composerStub) handleMetadata(w http.ResponseWriter, r *http.Request) {
@@ -261,6 +291,16 @@ func (s *composerStub) DistContent() string {
return s.distBody
}
func assertProxyURL(t *testing.T, field, val string) {
t.Helper()
if val == "" {
t.Fatalf("%s should not be empty", field)
}
if !strings.HasPrefix(val, "https://composer.hub.local/") {
t.Fatalf("%s should point to proxy host, got %s", field, val)
}
}
func (s *composerStub) Close() {
if s == nil {
return