(t *testing.T)
| 512 | } |
| 513 | |
| 514 | func TestResolveProxy(t *testing.T) { |
| 515 | var ( |
| 516 | ctx = context.Background() |
| 517 | tag = "latest" |
| 518 | r = http.NewServeMux() |
| 519 | name = "testname" |
| 520 | ns = "upstream.example.com" |
| 521 | ) |
| 522 | |
| 523 | m := newManifest( |
| 524 | newContent(ocispec.MediaTypeImageConfig, []byte("1")), |
| 525 | newContent(ocispec.MediaTypeImageLayerGzip, []byte("2")), |
| 526 | ) |
| 527 | mc := newContent(ocispec.MediaTypeImageManifest, m.OCIManifest()) |
| 528 | m.RegisterHandler(r, name) |
| 529 | r.Handle(fmt.Sprintf("/v2/%s/manifests/%s", name, tag), mc) |
| 530 | r.Handle(fmt.Sprintf("/v2/%s/manifests/%s", name, mc.Digest()), mc) |
| 531 | |
| 532 | nr := namespaceRouter{ |
| 533 | "upstream.example.com": r, |
| 534 | } |
| 535 | |
| 536 | base, ro, close := tlsServer(logHandler{t, nr}) |
| 537 | defer close() |
| 538 | |
| 539 | ro.Hosts = func(host string) ([]RegistryHost, error) { |
| 540 | return []RegistryHost{{ |
| 541 | Client: ro.Client, |
| 542 | Host: base, |
| 543 | Scheme: "https", |
| 544 | Path: "/v2", |
| 545 | Capabilities: HostCapabilityPull | HostCapabilityResolve, |
| 546 | }}, nil |
| 547 | } |
| 548 | |
| 549 | resolver := NewResolver(ro) |
| 550 | image := fmt.Sprintf("%s/%s:%s", ns, name, tag) |
| 551 | |
| 552 | _, d, err := resolver.Resolve(ctx, image) |
| 553 | if err != nil { |
| 554 | t.Fatal(err) |
| 555 | } |
| 556 | f, err := resolver.Fetcher(ctx, image) |
| 557 | if err != nil { |
| 558 | t.Fatal(err) |
| 559 | } |
| 560 | |
| 561 | refs, err := testocimanifest(ctx, f, d) |
| 562 | if err != nil { |
| 563 | t.Fatal(err) |
| 564 | } |
| 565 | |
| 566 | if len(refs) != 2 { |
| 567 | t.Fatalf("Unexpected number of references: %d, expected 2", len(refs)) |
| 568 | } |
| 569 | |
| 570 | for _, ref := range refs { |
| 571 | if err := testFetch(ctx, f, ref); err != nil { |
nothing calls this directly
no test coverage detected
searching dependent graphs…