github.com/grafana/synthetic-monitoring-agent@v0.64.2/internal/k6runner/version/repository_test.go (about) 1 package version_test 2 3 import ( 4 "errors" 5 "slices" 6 "testing" 7 8 "github.com/grafana/synthetic-monitoring-agent/internal/k6runner/version" 9 ) 10 11 func TestOverride(t *testing.T) { 12 t.Parallel() 13 14 repo, err := version.NewRepository("./testdata/", "./testdata/override/sm-k6-custom") 15 if err != nil { 16 t.Fatalf("could not create repository: %v", err) 17 } 18 19 versions, err := repo.Entries() 20 if err != nil { 21 t.Fatalf("retrieving entries: %v", err) 22 } 23 24 if len(versions) != 1 { 25 t.Fatalf("Expected just the overridden version, got %d", len(versions)) 26 } 27 28 if v := versions[0].Version; v.String() != "9.9.9" { 29 t.Fatalf("Unexpected version %q", v) 30 } 31 } 32 33 func TestVersions(t *testing.T) { 34 t.Parallel() 35 36 repo, err := version.NewRepository("./testdata/", "") 37 if err != nil { 38 t.Fatalf("could not create repository: %v", err) 39 } 40 41 versions, err := repo.Entries() 42 if err != nil { 43 t.Fatalf("retrieving entries: %v", err) 44 } 45 46 expected := []string{ 47 "1.2.3", 48 "2.0.0", 49 } 50 51 if len(versions) != len(expected) { 52 t.Fatalf("Expected to find 2 versions, got %d", len(versions)) 53 } 54 55 for _, ev := range expected { 56 if !slices.ContainsFunc(versions, func(v version.Entry) bool { return ev == v.Version.String() }) { 57 t.Fatalf("Expected version %q not found in %v", ev, versions) 58 } 59 } 60 } 61 62 func TestBinaryFor(t *testing.T) { 63 t.Parallel() 64 65 repo, err := version.NewRepository("./testdata/", "") 66 if err != nil { 67 t.Fatalf("could not create repository: %v", err) 68 } 69 70 // Testdata folder contains k6 mocks matching v1.2.3 and v2.0.0 71 72 for _, tc := range []struct { 73 name string 74 constraint string 75 expected string 76 expectError error 77 }{ 78 { 79 name: "Matches anything to most recent", 80 constraint: "*", 81 expected: "testdata/sm-k6-v2", 82 }, 83 { 84 name: "Matches caret v1 to v1", 85 constraint: "^v1.0.0", 86 expected: "testdata/sm-k6-v1", 87 }, 88 { 89 name: "Matches caret 1 without v to v1", 90 constraint: "^1.0.0", 91 expected: "testdata/sm-k6-v1", 92 }, 93 { 94 name: "Matches caret v2 to v2", 95 constraint: "^v2.0.0", 96 expected: "testdata/sm-k6-v2", 97 }, 98 { 99 name: "Matches tilde v1 to minor", 100 constraint: "~v1.2.0", 101 expected: "testdata/sm-k6-v1", 102 }, 103 { 104 name: "Matches exact version", 105 constraint: "v1.2.3", 106 expected: "testdata/sm-k6-v1", 107 }, 108 { 109 name: "Errors for unsatisfiable version", 110 constraint: "^v9.0.0", 111 expectError: version.ErrUnsatisfiable, 112 }, 113 { 114 name: "Errors for invalid manifest", 115 constraint: "nya!", 116 expectError: version.ErrInvalidConstraint, 117 }, 118 } { 119 t.Run(tc.name, func(t *testing.T) { 120 t.Parallel() 121 122 actual, err := repo.Resolve(tc.constraint) 123 if !errors.Is(err, tc.expectError) { 124 t.Fatalf("expected error to be %q, got: %q", tc.expectError, err) 125 } 126 127 if tc.expected != "" && actual.Path != tc.expected { 128 t.Fatalf("expected binary to be %q, got %q", tc.expected, actual) 129 } 130 }) 131 } 132 }