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  }