Fix failing test

Signed-off-by: Evans Mungai <mbuevans@gmail.com>
pull/31601/head
Evans Mungai 8 months ago
parent 2a23d1b4b5
commit 88fdb7e7ea
No known key found for this signature in database
GPG Key ID: BBEB812143DD14E1

@ -83,7 +83,7 @@ func ValidateAgainstSchema(ch chart.Charter, values map[string]interface{}) erro
slog.Debug("chart name", "chart-name", chrt.Name()) slog.Debug("chart name", "chart-name", chrt.Name())
err := ValidateAgainstSingleSchema(values, chrt.Schema()) err := ValidateAgainstSingleSchema(values, chrt.Schema())
if err != nil { if err != nil {
sb.WriteString(fmt.Sprintf("%s:\n", chrt.Name())) fmt.Fprintf(&sb, "%s:\n", chrt.Name())
sb.WriteString(err.Error()) sb.WriteString(err.Error())
} }
} }
@ -103,10 +103,8 @@ func ValidateAgainstSchema(ch chart.Charter, values map[string]interface{}) erro
subchartValues, ok := raw.(map[string]any) subchartValues, ok := raw.(map[string]any)
if !ok { if !ok {
sb.WriteString(fmt.Sprintf( fmt.Fprintf(&sb, "%s:\ninvalid type for values: expected object (map), got %T\n",
"%s:\ninvalid type for values: expected object (map), got %T\n", sub.Name(), raw)
sub.Name(), raw,
))
continue continue
} }

@ -22,6 +22,7 @@ import (
"net/http/httptest" "net/http/httptest"
"os" "os"
"path/filepath" "path/filepath"
"strings"
"testing" "testing"
"helm.sh/helm/v4/pkg/repo/v1/repotest" "helm.sh/helm/v4/pkg/repo/v1/repotest"
@ -520,7 +521,7 @@ func TestPullOCIWithTagAndDigest(t *testing.T) {
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
result := ociSrv.Run(t) result := ociSrv.RunWithReturn(t)
contentCache := t.TempDir() contentCache := t.TempDir()
outdir := t.TempDir() outdir := t.TempDir()
@ -543,12 +544,15 @@ func TestPullOCIWithTagAndDigest(t *testing.T) {
} }
// Verify the file was downloaded // Verify the file was downloaded
// When digest is present, the filename uses the digest format // When digest is present, the filename uses the digest format (e.g. chart@sha256-hex.tgz)
expectedFile := filepath.Join(outdir, "oci-dependent-chart-0.1.0.tgz") expectedFile := filepath.Join(outdir, "oci-dependent-chart-0.1.0.tgz")
if _, err := os.Stat(expectedFile); err != nil { if _, err := os.Stat(expectedFile); err != nil {
// Try the digest-based filename // Try the digest-based filename; parse algorithm:hex to avoid fixed-offset assumptions
digestPart := result.PushedChart.Manifest.Digest[7:] // strip "sha256:" algorithm, digestPart, ok := strings.Cut(result.PushedChart.Manifest.Digest, ":")
expectedFile = filepath.Join(outdir, fmt.Sprintf("oci-dependent-chart@sha256-%s.tgz", digestPart)) if !ok {
t.Fatalf("digest must be in algorithm:hex format, got %q", result.PushedChart.Manifest.Digest)
}
expectedFile = filepath.Join(outdir, fmt.Sprintf("oci-dependent-chart@%s-%s.tgz", algorithm, digestPart))
if _, err := os.Stat(expectedFile); err != nil { if _, err := os.Stat(expectedFile); err != nil {
t.Errorf("expected chart file not found: %v", err) t.Errorf("expected chart file not found: %v", err)
} }

@ -130,6 +130,10 @@ func (c *ChartDownloader) DownloadTo(ref, version, dest string) (string, *proven
if err != nil { if err != nil {
return "", nil, err return "", nil, err
} }
if len(digest) != 32 {
return "", nil, fmt.Errorf("invalid digest length: %d", len(digest))
}
copy(digest32[:], digest) copy(digest32[:], digest)
if pth, err := c.Cache.Get(digest32, CacheChart); err == nil { if pth, err := c.Cache.Get(digest32, CacheChart); err == nil {
fdata, err := os.ReadFile(pth) fdata, err := os.ReadFile(pth)
@ -237,6 +241,9 @@ func (c *ChartDownloader) DownloadToCache(ref, version string) (string, *provena
if err != nil { if err != nil {
return "", nil, fmt.Errorf("unable to decode digest: %w", err) return "", nil, fmt.Errorf("unable to decode digest: %w", err)
} }
if digestString != "" && len(digest) != 32 {
return "", nil, fmt.Errorf("invalid digest length: %d", len(digest))
}
var digest32 [32]byte var digest32 [32]byte
copy(digest32[:], digest) copy(digest32[:], digest)

@ -213,7 +213,12 @@ func NewOCIServer(t *testing.T, dir string) (*OCIServer, error) {
}, nil }, nil
} }
func (srv *OCIServer) Run(t *testing.T, opts ...OCIServerOpt) *OCIServerRunResult { func (srv *OCIServer) Run(t *testing.T, opts ...OCIServerOpt) {
t.Helper()
_ = srv.RunWithReturn(t, opts...)
}
func (srv *OCIServer) RunWithReturn(t *testing.T, opts ...OCIServerOpt) *OCIServerRunResult {
t.Helper() t.Helper()
cfg := &OCIServerRunConfig{} cfg := &OCIServerRunConfig{}
for _, fn := range opts { for _, fn := range opts {

Loading…
Cancel
Save