package updater import ( "context" "errors" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestResolver(t *testing.T) { const d = "sha256:d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1" auth := &RegistryAuth{byHost: map[string]string{"gitea.shcizo.se": "enc-gitea"}} t.Run("resolves tag with registry auth", func(t *testing.T) { dist := &fakeDist{digest: d} got, err := NewResolver(dist, auth).Resolve(context.Background(), "gitea.shcizo.se/shcizo/slusk:1.4") require.NoError(t, err) assert.Equal(t, "gitea.shcizo.se/shcizo/slusk:1.4@"+d, got) assert.Equal(t, []string{"gitea.shcizo.se/shcizo/slusk:1.4"}, dist.refs) assert.Equal(t, []string{"enc-gitea"}, dist.auths) }) t.Run("a ref with a digest passes through without asking the daemon", func(t *testing.T) { for _, ref := range []string{"repo@sha256:x", "repo:1@sha256:x", "localhost:5000/repo:1@sha256:x"} { dist := &fakeDist{digest: d} got, err := NewResolver(dist, nil).Resolve(context.Background(), ref) require.NoError(t, err, ref) assert.Equal(t, ref, got) assert.Empty(t, dist.refs) } }) t.Run("a bare ref is refused without asking the daemon", func(t *testing.T) { dist := &fakeDist{digest: d} _, err := NewResolver(dist, nil).Resolve(context.Background(), "repo") assert.ErrorContains(t, err, "has no tag to resolve") assert.Empty(t, dist.refs) }) t.Run("daemon error is wrapped", func(t *testing.T) { cause := errors.New("unauthorized") _, err := NewResolver(&fakeDist{err: cause}, nil).Resolve(context.Background(), "repo:1") assert.ErrorIs(t, err, cause) assert.ErrorContains(t, err, "repo:1") }) }