test: provider-not-found and missing-blob download error branches

This commit is contained in:
2026-07-03 13:45:19 +10:00
parent 03a29f2c0a
commit 053fbd70e2
+50
View File
@@ -558,6 +558,52 @@ func TestServerProxyErrors(t *testing.T) {
}
}
func TestServerLocalMissingBlob(t *testing.T) {
requireStack(t)
req(t, "POST", "/api/v2/remotes", `{"name":"srv-ghost","package_type":"generic","repo_type":"local"}`)
defer req(t, "DELETE", "/api/v2/remotes/srv-ghost", "")
ctx := context.Background()
// A local file whose blob object is absent from the store.
testSrv.db.UpsertBlob(ctx, "sha256:ghost", "blobs/sha256/ghost-missing", 5, "text/plain")
if err := testSrv.db.CreateLocalFile(ctx, "srv-ghost", "ghost.bin", "sha256:ghost"); err != nil {
t.Fatalf("create local file: %v", err)
}
if resp, _ := req(t, "GET", "/api/v1/local/srv-ghost/ghost.bin", ""); resp.StatusCode != 500 {
t.Errorf("v1 download missing blob = %d, want 500", resp.StatusCode)
}
if resp, _ := req(t, "GET", "/api/v2/remotes/srv-ghost/files/ghost.bin", ""); resp.StatusCode != 500 {
t.Errorf("v2 download missing blob = %d, want 500", resp.StatusCode)
}
}
func TestServerBogusProviderType(t *testing.T) {
requireStack(t)
// Insert a remote with an unregistered package type directly, bypassing
// validation, to exercise the provider-not-found branches.
_, err := testSrv.db.Pool.Exec(context.Background(),
`INSERT INTO remotes (name, package_type, repo_type, base_url) VALUES ($1,'bogus','remote','https://x')`, "srv-bogus")
if err != nil {
t.Fatalf("insert bogus remote: %v", err)
}
defer testSrv.db.Pool.Exec(context.Background(), `DELETE FROM remotes WHERE name='srv-bogus'`)
if resp, _ := req(t, "GET", "/api/v1/remote/srv-bogus/x", ""); resp.StatusCode != 500 {
t.Errorf("bogus provider GET = %d, want 500", resp.StatusCode)
}
rq, _ := http.NewRequest("HEAD", testTS.URL+"/v2/srv-bogus/x", nil)
if resp, err := http.DefaultClient.Do(rq); err == nil {
resp.Body.Close()
if resp.StatusCode != 500 {
t.Errorf("bogus provider HEAD = %d, want 500", resp.StatusCode)
}
}
if resp, b := req(t, "POST", "/api/v2/probe", `{"remote":"srv-bogus","path":"x"}`); resp.StatusCode != 200 || !strings.Contains(string(b), `"status":500`) {
t.Errorf("bogus provider probe: %d %s", resp.StatusCode, b)
}
}
func TestServerNotFound(t *testing.T) {
requireStack(t)
if resp, _ := req(t, "GET", "/api/v2/remotes/does-not-exist", ""); resp.StatusCode != 404 {
@@ -566,4 +612,8 @@ func TestServerNotFound(t *testing.T) {
if resp, _ := req(t, "GET", "/api/v1/remote/nope/x", ""); resp.StatusCode != 404 {
t.Errorf("expected 404 for unknown remote, got %d", resp.StatusCode)
}
// Unknown local repo -> 404 in handleLocal.
if resp, _ := req(t, "GET", "/api/v1/local/nope/x", ""); resp.StatusCode != 404 {
t.Errorf("expected 404 for unknown local repo, got %d", resp.StatusCode)
}
}