Ctrl K
ComunidadGuías…

internal/charts/charts_fuzz_test.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package charts

import (
	"bytes"
	"net/url"
	"testing"
)

func FuzzChartIndex(f *testing.F) {
	f.Add([]byte(indexBody))
	f.Add([]byte("entries: {}\n"))
	f.Add([]byte("entries:\n  app:\n    - version: not-semver\n"))
	f.Add([]byte("not: [valid"))
	f.Add([]byte("{{}: ,<<: {}}"))

	f.Fuzz(func(t *testing.T, raw []byte) {
		found, err := parseIndex(bytes.NewReader(raw))
		if err != nil {
			return
		}
		for at, chart := range found.charts {
			versions := found.versions[chart.Name]
			if len(versions) == 0 {
				t.Fatalf("chart %q has no versions", chart.Name)
			}
			if chart.Version != versions[0] {
				t.Fatalf("chart %q advertises %q, want %q", chart.Name, chart.Version, versions[0])
			}
			if at > 0 && found.charts[at-1].Name >= chart.Name {
				t.Fatalf("charts are not strictly sorted: %q then %q", found.charts[at-1].Name, chart.Name)
			}
			for _, version := range versions {
				if !ValidVersion(version) {
					t.Fatalf("chart %q kept invalid version %q", chart.Name, version)
				}
			}
		}
	})
}

func FuzzFetchableRepositoryURL(f *testing.F) {
	for _, seed := range []string{
		"https://charts.example.com/stable",
		"http://127.0.0.1/index.yaml",
		"oci://registry.example.com/team/chart",
		"file:///tmp/index.yaml",
		"https://[email protected]",
	} {
		f.Add(seed)
	}

	f.Fuzz(func(t *testing.T, raw string) {
		if CheckFetchable(raw) != nil {
			return
		}
		parsed, err := url.Parse(raw)
		if err != nil {
			t.Fatalf("accepted URL does not parse: %v", err)
		}
		if !fetchableScheme(parsed.Scheme) {
			t.Fatalf("accepted scheme %q", parsed.Scheme)
		}
		if parsed.Host == "" {
			t.Fatal("accepted URL without a host")
		}
		if parsed.User != nil {
			t.Fatal("accepted URL with user information")
		}
	})
}