Watch
1
0
Fork
You've already forked pkg-proxy
1
mirror of https://github.com/git-pkgs/proxy.git synced 2026-11-09 07:39:19 -05:00
pkg-proxy/internal/mirror/brew_test.go
Simon Chrzanowski db8a60e175
Drop the Homebrew sibling formulae filter
git-pkgs/registries#120 stops listing versioned formulae as versions.
2026-10-28 15:18:28 +00:00

95 lines
3 KiB
Go

package mirror
import (
"context"
"errors"
"strings"
"sync"
"testing"
"github.com/git-pkgs/proxy/internal/handler"
)
// fakeBottles resolves every formula version to homebrew/core/<name> tagged
// <version>-1, like a formula whose bottles were rebuilt once.
type fakeBottles struct {
err error
}
func (f fakeBottles) BottleImage(_ context.Context, formula, version string) (handler.ImageRef, error) {
if f.err != nil {
return handler.ImageRef{}, f.err
}
return handler.ImageRef{Name: "homebrew/core/" + formula, References: []string{version + "-1"}}, nil
}
// platformImages records the images mirrored and the platforms asked for.
type platformImages struct {
mu sync.Mutex
refs []handler.ImageRef
platforms [][]handler.Platform
}
func (p *platformImages) MirrorImage(_ context.Context, ref handler.ImageRef, platforms []handler.Platform) (handler.ImageResult, error) {
p.mu.Lock()
defer p.mu.Unlock()
p.refs = append(p.refs, ref)
p.platforms = append(p.platforms, platforms)
return handler.ImageResult{Fetched: 2, Bytes: 10}, nil
}
type stubVersions map[string][]string
func (s stubVersions) ListVersions(_ context.Context, ecosystem, name string) ([]string, error) {
return s[ecosystem+"/"+name], nil
}
func TestMirrorBrewMirrorsBottleImage(t *testing.T) {
m := setupTestMirror(t, 1)
images := &platformImages{}
m.Images, m.Bottles = images, fakeBottles{}
source := &PURLSource{
PURLs: []string{"pkg:brew/hello@2.12.3", "pkg:brew/jq"},
Platforms: []string{"linux/arm64"},
Versions: stubVersions{"brew/jq": {"1.8.1"}},
}
progress, err := m.Run(context.Background(), source)
if err != nil {
t.Fatal(err)
}
if progress.Completed != 2 || progress.Failed != 0 {
t.Fatalf("progress = %+v, errors %v", progress, progress.Errors)
}
got := map[string]string{}
for i, ref := range images.refs {
if len(images.platforms[i]) != 1 || images.platforms[i][0].OS != "linux" || images.platforms[i][0].Architecture != "arm64" {
t.Errorf("%s: platforms = %+v, want linux/arm64", ref.Name, images.platforms[i])
}
got[ref.Name] = strings.Join(ref.References, ",")
}
if got["homebrew/core/hello"] != "2.12.3-1" || got["homebrew/core/jq"] != "1.8.1-1" {
t.Errorf("images = %v", got)
}
}
func TestMirrorBrewFailures(t *testing.T) {
m := setupTestMirror(t, 1)
progress, err := m.Run(context.Background(), &PURLSource{PURLs: []string{"pkg:brew/hello@2.12.3"}})
if err != nil {
t.Fatal(err)
}
if progress.Failed != 1 || len(progress.Errors) != 1 || !strings.Contains(progress.Errors[0].Error, "isn't available") {
t.Errorf("without a bottle resolver: %+v", progress)
}
images := &platformImages{}
m.Images, m.Bottles = images, fakeBottles{err: errors.New(`homebrew/core has no formula "nope"`)}
progress, err = m.Run(context.Background(), &PURLSource{PURLs: []string{"pkg:brew/nope@1.0"}})
if err != nil {
t.Fatal(err)
}
if progress.Failed != 1 || len(images.refs) != 0 {
t.Errorf("unknown formula: %+v, mirrored %v", progress, images.refs)
}
}