chore(pkg): refactor: convert tests to testify assert/require part 10

#### Description

refactor: convert tests to testify assert/require in pkg
Signed-off-by: Matthieu MOREL <matthieu.morel35@gmail.com>
pull/32425/head
Matthieu MOREL 2 months ago
parent 3f1f55c4c8
commit 2f5a33fb77

@ -22,6 +22,9 @@ import (
"slices" "slices"
"testing" "testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
chartv3 "helm.sh/helm/v4/internal/chart/v3" chartv3 "helm.sh/helm/v4/internal/chart/v3"
chartutilv3 "helm.sh/helm/v4/internal/chart/v3/util" chartutilv3 "helm.sh/helm/v4/internal/chart/v3/util"
"helm.sh/helm/v4/internal/gates" "helm.sh/helm/v4/internal/gates"
@ -39,38 +42,25 @@ func TestCreateCmd(t *testing.T) {
cname := "testchart" cname := "testchart"
// Run a create // Run a create
if _, _, err := executeActionCommand("create " + cname); err != nil { _, _, err := executeActionCommand("create " + cname)
t.Fatalf("Failed to run create: %s", err) require.NoErrorf(t, err, "Failed to run create")
}
// Test that the chart is there // Test that the chart is there
if fi, err := os.Stat(cname); err != nil { fi, err := os.Stat(cname)
t.Fatalf("no chart directory: %s", err) require.NoErrorf(t, err, "no chart directory")
} else if !fi.IsDir() { require.Truef(t, fi.IsDir(), "chart is not directory")
t.Fatal("chart is not directory")
}
c, err := chartloader.LoadDir(cname) c, err := chartloader.LoadDir(cname)
if err != nil { require.NoError(t, err)
t.Fatal(err)
}
acc, err := chart.NewAccessor(c) acc, err := chart.NewAccessor(c)
if err != nil { require.NoError(t, err)
t.Fatal(err)
}
if acc.Name() != cname { assert.Equal(t, cname, acc.Name(), "Expected %q name, got %q", cname, acc.Name())
t.Errorf("Expected %q name, got %q", cname, acc.Name())
}
metadata := acc.MetadataAsMap() metadata := acc.MetadataAsMap()
apiVersion, ok := metadata["APIVersion"].(string) apiVersion, ok := metadata["APIVersion"].(string)
if !ok { require.True(t, ok, "APIVersion not found in metadata")
t.Fatal("APIVersion not found in metadata") assert.Equal(t, chartv2.APIVersionV2, apiVersion, "Wrong API version: %q", apiVersion)
}
if apiVersion != chartv2.APIVersionV2 {
t.Errorf("Wrong API version: %q", apiVersion)
}
} }
func TestCreateStarterCmd(t *testing.T) { func TestCreateStarterCmd(t *testing.T) {
@ -123,15 +113,11 @@ func TestCreateStarterCmd(t *testing.T) {
} else { } else {
dest, err = chartutil.Create("starterchart", starterchart) dest, err = chartutil.Create("starterchart", starterchart)
} }
if err != nil { require.NoError(t, err, "Could not create chart")
t.Fatalf("Could not create chart: %s", err)
}
t.Logf("Created %s", dest) t.Logf("Created %s", dest)
tplpath := filepath.Join(starterchart, "starterchart", "templates", "foo.tpl") tplpath := filepath.Join(starterchart, "starterchart", "templates", "foo.tpl")
if err := os.WriteFile(tplpath, []byte("test"), 0o644); err != nil { require.NoErrorf(t, os.WriteFile(tplpath, []byte("test"), 0o644), "Could not write template")
t.Fatalf("Could not write template: %s", err)
}
// Build the command // Build the command
starterArg := "starterchart" starterArg := "starterchart"
@ -147,51 +133,36 @@ func TestCreateStarterCmd(t *testing.T) {
cmd += " " + cname cmd += " " + cname
// Run create // Run create
if _, _, err := executeActionCommand(cmd); err != nil { _, _, err = executeActionCommand(cmd)
t.Fatalf("Failed to run create: %s", err) require.NoErrorf(t, err, "Failed to run create")
}
// Test that the chart is there // Test that the chart is there
if fi, err := os.Stat(cname); err != nil { fi, err := os.Stat(cname)
t.Fatalf("no chart directory: %s", err) require.NoErrorf(t, err, "no chart directory")
} else if !fi.IsDir() { require.Truef(t, fi.IsDir(), "chart is not directory")
t.Fatal("chart is not directory")
}
// Load and verify the chart // Load and verify the chart
c, err := chartloader.LoadDir(cname) c, err := chartloader.LoadDir(cname)
if err != nil { require.NoError(t, err)
t.Fatal(err)
}
acc, err := chart.NewAccessor(c) acc, err := chart.NewAccessor(c)
if err != nil { require.NoError(t, err)
t.Fatal(err)
}
chartName := acc.Name() chartName := acc.Name()
metadata := acc.MetadataAsMap() metadata := acc.MetadataAsMap()
apiVersion, ok := metadata["APIVersion"].(string) apiVersion, ok := metadata["APIVersion"].(string)
if !ok { require.True(t, ok, "APIVersion not found in metadata")
t.Fatal("APIVersion not found in metadata")
}
var templates []string var templates []string
for _, tpl := range acc.Templates() { for _, tpl := range acc.Templates() {
templates = append(templates, tpl.Name) templates = append(templates, tpl.Name)
} }
if chartName != cname { assert.Equal(t, cname, chartName, "Expected %q name, got %q", cname, chartName)
t.Errorf("Expected %q name, got %q", cname, chartName) assert.Equal(t, tt.expectedVersion, apiVersion, "Wrong API version: expected %q, got %q", tt.expectedVersion, apiVersion)
}
if apiVersion != tt.expectedVersion {
t.Errorf("Wrong API version: expected %q, got %q", tt.expectedVersion, apiVersion)
}
// Verify custom template exists // Verify custom template exists
found := slices.Contains(templates, "templates/foo.tpl") found := slices.Contains(templates, "templates/foo.tpl")
if !found { assert.True(t, found, "Did not find foo.tpl")
t.Error("Did not find foo.tpl")
}
}) })
} }
} }
@ -207,38 +178,25 @@ func TestCreateCmdChartAPIVersionV2(t *testing.T) {
cname := "testchart" cname := "testchart"
// Run a create with explicit v2 // Run a create with explicit v2
if _, _, err := executeActionCommand("create --chart-api-version=v2 " + cname); err != nil { _, _, err := executeActionCommand("create --chart-api-version=v2 " + cname)
t.Fatalf("Failed to run create: %s", err) require.NoErrorf(t, err, "Failed to run create")
}
// Test that the chart is there // Test that the chart is there
if fi, err := os.Stat(cname); err != nil { fi, err := os.Stat(cname)
t.Fatalf("no chart directory: %s", err) require.NoErrorf(t, err, "no chart directory")
} else if !fi.IsDir() { require.Truef(t, fi.IsDir(), "chart is not directory")
t.Fatal("chart is not directory")
}
c, err := chartloader.LoadDir(cname) c, err := chartloader.LoadDir(cname)
if err != nil { require.NoError(t, err)
t.Fatal(err)
}
acc, err := chart.NewAccessor(c) acc, err := chart.NewAccessor(c)
if err != nil { require.NoError(t, err)
t.Fatal(err)
}
if acc.Name() != cname { assert.Equal(t, cname, acc.Name(), "Expected %q name, got %q", cname, acc.Name())
t.Errorf("Expected %q name, got %q", cname, acc.Name())
}
metadata := acc.MetadataAsMap() metadata := acc.MetadataAsMap()
apiVersion, ok := metadata["APIVersion"].(string) apiVersion, ok := metadata["APIVersion"].(string)
if !ok { require.True(t, ok, "APIVersion not found in metadata")
t.Fatal("APIVersion not found in metadata") assert.Equal(t, chartv2.APIVersionV2, apiVersion, "Wrong API version: expected %q, got %q", chartv2.APIVersionV2, apiVersion)
}
if apiVersion != chartv2.APIVersionV2 {
t.Errorf("Wrong API version: expected %q, got %q", chartv2.APIVersionV2, apiVersion)
}
} }
func TestCreateCmdChartAPIVersionV3(t *testing.T) { func TestCreateCmdChartAPIVersionV3(t *testing.T) {
@ -248,38 +206,25 @@ func TestCreateCmdChartAPIVersionV3(t *testing.T) {
cname := "testchart" cname := "testchart"
// Run a create with v3 // Run a create with v3
if _, _, err := executeActionCommand("create --chart-api-version=v3 " + cname); err != nil { _, _, err := executeActionCommand("create --chart-api-version=v3 " + cname)
t.Fatalf("Failed to run create: %s", err) require.NoErrorf(t, err, "Failed to run create")
}
// Test that the chart is there // Test that the chart is there
if fi, err := os.Stat(cname); err != nil { fi, err := os.Stat(cname)
t.Fatalf("no chart directory: %s", err) require.NoErrorf(t, err, "no chart directory")
} else if !fi.IsDir() { require.Truef(t, fi.IsDir(), "chart is not directory")
t.Fatal("chart is not directory")
}
c, err := chartloader.LoadDir(cname) c, err := chartloader.LoadDir(cname)
if err != nil { require.NoError(t, err)
t.Fatal(err)
}
acc, err := chart.NewAccessor(c) acc, err := chart.NewAccessor(c)
if err != nil { require.NoError(t, err)
t.Fatal(err)
}
if acc.Name() != cname { assert.Equal(t, cname, acc.Name(), "Expected %q name, got %q", cname, acc.Name())
t.Errorf("Expected %q name, got %q", cname, acc.Name())
}
metadata := acc.MetadataAsMap() metadata := acc.MetadataAsMap()
apiVersion, ok := metadata["APIVersion"].(string) apiVersion, ok := metadata["APIVersion"].(string)
if !ok { require.True(t, ok, "APIVersion not found in metadata")
t.Fatal("APIVersion not found in metadata") assert.Equal(t, chartv3.APIVersionV3, apiVersion, "Wrong API version: expected %q, got %q", chartv3.APIVersionV3, apiVersion)
}
if apiVersion != chartv3.APIVersionV3 {
t.Errorf("Wrong API version: expected %q, got %q", chartv3.APIVersionV3, apiVersion)
}
} }
func TestCreateCmdInvalidChartAPIVersion(t *testing.T) { func TestCreateCmdInvalidChartAPIVersion(t *testing.T) {
@ -289,12 +234,8 @@ func TestCreateCmdInvalidChartAPIVersion(t *testing.T) {
// Run a create with invalid version // Run a create with invalid version
_, _, err := executeActionCommand("create --chart-api-version=v1 " + cname) _, _, err := executeActionCommand("create --chart-api-version=v1 " + cname)
if err == nil { require.Error(t, err, "Expected error for invalid API version, got nil")
t.Fatal("Expected error for invalid API version, got nil")
}
expectedErr := "unsupported chart API version: v1 (supported: v2, v3)" expectedErr := "unsupported chart API version: v1 (supported: v2, v3)"
if err.Error() != expectedErr { assert.EqualError(t, err, expectedErr, "Expected error %q, got %q", expectedErr, err.Error())
t.Errorf("Expected error %q, got %q", expectedErr, err.Error())
}
} }

@ -19,11 +19,11 @@ package storage
import ( import (
"context" "context"
"errors" "errors"
"fmt"
"log/slog" "log/slog"
"reflect" "reflect"
"testing" "testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"helm.sh/helm/v4/pkg/release" "helm.sh/helm/v4/pkg/release"
@ -42,16 +42,14 @@ func TestStorageCreate(t *testing.T) {
Version: 1, Version: 1,
}.ToRelease() }.ToRelease()
assertErrNil(t.Fatal, storage.Create(rls), "StoreRelease") require.NoError(t, storage.Create(rls), "StoreRelease")
// fetch the release // fetch the release
res, err := storage.Get(rls.Name, rls.Version) res, err := storage.Get(rls.Name, rls.Version)
assertErrNil(t.Fatal, err, "QueryRelease") require.NoError(t, err, "QueryRelease")
// verify the fetched and created release are the same // verify the fetched and created release are the same
if !reflect.DeepEqual(rls, res) { require.Truef(t, reflect.DeepEqual(rls, res), "Expected %v, got %v", rls, res)
t.Fatalf("Expected %v, got %v", rls, res)
}
} }
func TestStorageUpdate(t *testing.T) { func TestStorageUpdate(t *testing.T) {
@ -65,20 +63,18 @@ func TestStorageUpdate(t *testing.T) {
Status: common.StatusDeployed, Status: common.StatusDeployed,
}.ToRelease() }.ToRelease()
assertErrNil(t.Fatal, storage.Create(rls), "StoreRelease") require.NoError(t, storage.Create(rls), "StoreRelease")
// modify the release // modify the release
rls.Info.Status = common.StatusUninstalled rls.Info.Status = common.StatusUninstalled
assertErrNil(t.Fatal, storage.Update(rls), "UpdateRelease") require.NoError(t, storage.Update(rls), "UpdateRelease")
// retrieve the updated release // retrieve the updated release
res, err := storage.Get(rls.Name, rls.Version) res, err := storage.Get(rls.Name, rls.Version)
assertErrNil(t.Fatal, err, "QueryRelease") require.NoError(t, err, "QueryRelease")
// verify updated and fetched releases are the same. // verify updated and fetched releases are the same.
if !reflect.DeepEqual(rls, res) { require.Truef(t, reflect.DeepEqual(rls, res), "Expected %v, got %v", rls, res)
t.Fatalf("Expected %v, got %v", rls, res)
}
} }
func TestStorageDelete(t *testing.T) { func TestStorageDelete(t *testing.T) {
@ -95,34 +91,26 @@ func TestStorageDelete(t *testing.T) {
Version: 2, Version: 2,
}.ToRelease() }.ToRelease()
assertErrNil(t.Fatal, storage.Create(rls), "StoreRelease") require.NoError(t, storage.Create(rls), "StoreRelease")
assertErrNil(t.Fatal, storage.Create(rls2), "StoreRelease") require.NoError(t, storage.Create(rls2), "StoreRelease")
// delete the release // delete the release
res, err := storage.Delete(rls.Name, rls.Version) res, err := storage.Delete(rls.Name, rls.Version)
assertErrNil(t.Fatal, err, "DeleteRelease") require.NoError(t, err, "DeleteRelease")
// verify updated and fetched releases are the same. // verify updated and fetched releases are the same.
if !reflect.DeepEqual(rls, res) { require.Truef(t, reflect.DeepEqual(rls, res), "Expected %v, got %v", rls, res)
t.Fatalf("Expected %v, got %v", rls, res)
}
hist, err := storage.History(rls.Name) hist, err := storage.History(rls.Name)
if err != nil { require.NoError(t, err)
t.Errorf("unexpected error: %s", err)
}
rhist, err := releaseListToV1List(hist) rhist, err := releaseListToV1List(hist)
require.NoError(t, err) require.NoError(t, err)
// We have now deleted one of the two records. // We have now deleted one of the two records.
if len(rhist) != 1 { assert.Len(t, rhist, 1, "expected 1 record for deleted release version, got %d", len(hist))
t.Errorf("expected 1 record for deleted release version, got %d", len(hist))
}
if rhist[0].Version != 2 { assert.Equal(t, 2, rhist[0].Version, "Expected version to be 2, got %d", rhist[0].Version)
t.Errorf("Expected version to be 2, got %d", rhist[0].Version)
}
} }
func TestStorageList(t *testing.T) { func TestStorageList(t *testing.T) {
@ -141,13 +129,13 @@ func TestStorageList(t *testing.T) {
rls6 := ReleaseTestData{Name: "happy-liger", Status: common.StatusUninstalled}.ToRelease() rls6 := ReleaseTestData{Name: "happy-liger", Status: common.StatusUninstalled}.ToRelease()
// create the release records in the storage // create the release records in the storage
assertErrNil(t.Fatal, storage.Create(rls0), "Storing release 'rls0'") require.NoError(t, storage.Create(rls0), "Storing release 'rls0'")
assertErrNil(t.Fatal, storage.Create(rls1), "Storing release 'rls1'") require.NoError(t, storage.Create(rls1), "Storing release 'rls1'")
assertErrNil(t.Fatal, storage.Create(rls2), "Storing release 'rls2'") require.NoError(t, storage.Create(rls2), "Storing release 'rls2'")
assertErrNil(t.Fatal, storage.Create(rls3), "Storing release 'rls3'") require.NoError(t, storage.Create(rls3), "Storing release 'rls3'")
assertErrNil(t.Fatal, storage.Create(rls4), "Storing release 'rls4'") require.NoError(t, storage.Create(rls4), "Storing release 'rls4'")
assertErrNil(t.Fatal, storage.Create(rls5), "Storing release 'rls5'") require.NoError(t, storage.Create(rls5), "Storing release 'rls5'")
assertErrNil(t.Fatal, storage.Create(rls6), "Storing release 'rls6'") require.NoError(t, storage.Create(rls6), "Storing release 'rls6'")
} }
var listTests = []struct { var listTests = []struct {
@ -164,14 +152,9 @@ func TestStorageList(t *testing.T) {
for _, tt := range listTests { for _, tt := range listTests {
list, err := tt.ListFunc() list, err := tt.ListFunc()
assertErrNil(t.Fatal, err, tt.Description) require.NoError(t, err, tt.Description)
// verify the count of releases returned // verify the count of releases returned
if len(list) != tt.NumExpected { assert.Len(t, list, tt.NumExpected, "ListReleases(%s): expected %d, actual %d", tt.Description, tt.NumExpected, len(list))
t.Errorf("ListReleases(%s): expected %d, actual %d",
tt.Description,
tt.NumExpected,
len(list))
}
} }
} }
@ -190,32 +173,24 @@ func TestStorageDeployed(t *testing.T) {
rls3 := ReleaseTestData{Name: name, Version: 4, Status: common.StatusDeployed}.ToRelease() rls3 := ReleaseTestData{Name: name, Version: 4, Status: common.StatusDeployed}.ToRelease()
// create the release records in the storage // create the release records in the storage
assertErrNil(t.Fatal, storage.Create(rls0), "Storing release 'angry-bird' (v1)") require.NoError(t, storage.Create(rls0), "Storing release 'angry-bird' (v1)")
assertErrNil(t.Fatal, storage.Create(rls1), "Storing release 'angry-bird' (v2)") require.NoError(t, storage.Create(rls1), "Storing release 'angry-bird' (v2)")
assertErrNil(t.Fatal, storage.Create(rls2), "Storing release 'angry-bird' (v3)") require.NoError(t, storage.Create(rls2), "Storing release 'angry-bird' (v3)")
assertErrNil(t.Fatal, storage.Create(rls3), "Storing release 'angry-bird' (v4)") require.NoError(t, storage.Create(rls3), "Storing release 'angry-bird' (v4)")
} }
setup() setup()
rls, err := storage.Last(name) rls, err := storage.Last(name)
if err != nil { require.NoError(t, err, "Failed to query for deployed release")
t.Fatalf("Failed to query for deployed release: %s\n", err)
}
rel, err := releaserToV1Release(rls) rel, err := releaserToV1Release(rls)
require.NoError(t, err) require.NoError(t, err)
switch { require.NotNil(t, rls, "Release is nil")
case rls == nil: require.Equal(t, name, rel.Name, "Expected release name %q, actual %q\n", name, rel.Name)
t.Fatal("Release is nil") require.Equal(t, vers, rel.Version, "Expected release version %d, actual %d\n", vers, rel.Version)
case rel.Name != name: require.Equal(t, common.StatusDeployed, rel.Info.Status, "Expected release status 'DEPLOYED', actual %s\n", rel.Info.Status.String())
t.Fatalf("Expected release name %q, actual %q\n", name, rel.Name)
case rel.Version != vers:
t.Fatalf("Expected release version %d, actual %d\n", vers, rel.Version)
case rel.Info.Status != common.StatusDeployed:
t.Fatalf("Expected release status 'DEPLOYED', actual %s\n", rel.Info.Status.String())
}
} }
func TestStorageDeployedWithCorruption(t *testing.T) { func TestStorageDeployedWithCorruption(t *testing.T) {
@ -233,32 +208,24 @@ func TestStorageDeployedWithCorruption(t *testing.T) {
rls3 := ReleaseTestData{Name: name, Version: 2, Status: common.StatusDeployed}.ToRelease() rls3 := ReleaseTestData{Name: name, Version: 2, Status: common.StatusDeployed}.ToRelease()
// create the release records in the storage // create the release records in the storage
assertErrNil(t.Fatal, storage.Create(rls0), "Storing release 'angry-bird' (v1)") require.NoError(t, storage.Create(rls0), "Storing release 'angry-bird' (v1)")
assertErrNil(t.Fatal, storage.Create(rls1), "Storing release 'angry-bird' (v2)") require.NoError(t, storage.Create(rls1), "Storing release 'angry-bird' (v2)")
assertErrNil(t.Fatal, storage.Create(rls2), "Storing release 'angry-bird' (v3)") require.NoError(t, storage.Create(rls2), "Storing release 'angry-bird' (v3)")
assertErrNil(t.Fatal, storage.Create(rls3), "Storing release 'angry-bird' (v4)") require.NoError(t, storage.Create(rls3), "Storing release 'angry-bird' (v4)")
} }
setup() setup()
rls, err := storage.Deployed(name) rls, err := storage.Deployed(name)
if err != nil { require.NoError(t, err, "Failed to query for deployed release")
t.Fatalf("Failed to query for deployed release: %s\n", err)
}
rel, err := releaserToV1Release(rls) rel, err := releaserToV1Release(rls)
require.NoError(t, err) require.NoError(t, err)
switch { require.NotNil(t, rls, "Release is nil")
case rls == nil: require.Equal(t, name, rel.Name, "Expected release name %q, actual %q\n", name, rel.Name)
t.Fatal("Release is nil") require.Equal(t, vers, rel.Version, "Expected release version %d, actual %d\n", vers, rel.Version)
case rel.Name != name: require.Equal(t, common.StatusDeployed, rel.Info.Status, "Expected release status 'DEPLOYED', actual %s\n", rel.Info.Status.String())
t.Fatalf("Expected release name %q, actual %q\n", name, rel.Name)
case rel.Version != vers:
t.Fatalf("Expected release version %d, actual %d\n", vers, rel.Version)
case rel.Info.Status != common.StatusDeployed:
t.Fatalf("Expected release status 'DEPLOYED', actual %s\n", rel.Info.Status.String())
}
} }
func TestStorageHistory(t *testing.T) { func TestStorageHistory(t *testing.T) {
@ -275,21 +242,17 @@ func TestStorageHistory(t *testing.T) {
rls3 := ReleaseTestData{Name: name, Version: 4, Status: common.StatusDeployed}.ToRelease() rls3 := ReleaseTestData{Name: name, Version: 4, Status: common.StatusDeployed}.ToRelease()
// create the release records in the storage // create the release records in the storage
assertErrNil(t.Fatal, storage.Create(rls0), "Storing release 'angry-bird' (v1)") require.NoError(t, storage.Create(rls0), "Storing release 'angry-bird' (v1)")
assertErrNil(t.Fatal, storage.Create(rls1), "Storing release 'angry-bird' (v2)") require.NoError(t, storage.Create(rls1), "Storing release 'angry-bird' (v2)")
assertErrNil(t.Fatal, storage.Create(rls2), "Storing release 'angry-bird' (v3)") require.NoError(t, storage.Create(rls2), "Storing release 'angry-bird' (v3)")
assertErrNil(t.Fatal, storage.Create(rls3), "Storing release 'angry-bird' (v4)") require.NoError(t, storage.Create(rls3), "Storing release 'angry-bird' (v4)")
} }
setup() setup()
h, err := storage.History(name) h, err := storage.History(name)
if err != nil { require.NoError(t, err, "Failed to query for release history (%q)", name)
t.Fatalf("Failed to query for release history (%q): %s\n", name, err) require.Len(t, h, 4, "Release history (%q) is empty\n", name)
}
if len(h) != 4 {
t.Fatalf("Release history (%q) is empty\n", name)
}
} }
var errMaxHistoryMockDriverSomethingHappened = errors.New("something happened") var errMaxHistoryMockDriverSomethingHappened = errors.New("something happened")
@ -336,16 +299,14 @@ func TestMaxHistoryErrorHandling(t *testing.T) {
rls1 := ReleaseTestData{Name: name, Version: 1, Status: common.StatusSuperseded}.ToRelease() rls1 := ReleaseTestData{Name: name, Version: 1, Status: common.StatusSuperseded}.ToRelease()
// create the release records in the storage // create the release records in the storage
assertErrNil(t.Fatal, storage.Driver.Create(makeKey(rls1.Name, rls1.Version), rls1), "Storing release 'angry-bird' (v1)") require.NoError(t, storage.Driver.Create(makeKey(rls1.Name, rls1.Version), rls1), "Storing release 'angry-bird' (v1)")
} }
setup() setup()
rls2 := ReleaseTestData{Name: name, Version: 2, Status: common.StatusSuperseded}.ToRelease() rls2 := ReleaseTestData{Name: name, Version: 2, Status: common.StatusSuperseded}.ToRelease()
wantErr := errMaxHistoryMockDriverSomethingHappened wantErr := errMaxHistoryMockDriverSomethingHappened
gotErr := storage.Create(rls2) gotErr := storage.Create(rls2)
if !errors.Is(gotErr, wantErr) { require.ErrorIs(t, gotErr, wantErr, "Storing release 'angry-bird' (v2) should return the error %#v, but returned %#v", wantErr, gotErr)
t.Fatalf("Storing release 'angry-bird' (v2) should return the error %#v, but returned %#v", wantErr, gotErr)
}
} }
func TestStorageRemoveLeastRecent(t *testing.T) { func TestStorageRemoveLeastRecent(t *testing.T) {
@ -365,27 +326,25 @@ func TestStorageRemoveLeastRecent(t *testing.T) {
rls3 := ReleaseTestData{Name: name, Version: 4, Status: common.StatusDeployed}.ToRelease() rls3 := ReleaseTestData{Name: name, Version: 4, Status: common.StatusDeployed}.ToRelease()
// create the release records in the storage // create the release records in the storage
assertErrNil(t.Fatal, storage.Create(rls0), "Storing release 'angry-bird' (v1)") require.NoError(t, storage.Create(rls0), "Storing release 'angry-bird' (v1)")
assertErrNil(t.Fatal, storage.Create(rls1), "Storing release 'angry-bird' (v2)") require.NoError(t, storage.Create(rls1), "Storing release 'angry-bird' (v2)")
assertErrNil(t.Fatal, storage.Create(rls2), "Storing release 'angry-bird' (v3)") require.NoError(t, storage.Create(rls2), "Storing release 'angry-bird' (v3)")
assertErrNil(t.Fatal, storage.Create(rls3), "Storing release 'angry-bird' (v4)") require.NoError(t, storage.Create(rls3), "Storing release 'angry-bird' (v4)")
} }
setup() setup()
// Because we have not set a limit, we expect 4. // Because we have not set a limit, we expect 4.
expect := 4 expect := 4
if hist, err := storage.History(name); err != nil { hist, err := storage.History(name)
t.Fatal(err) require.NoError(t, err)
} else if len(hist) != expect { require.Equal(t, len(hist), expect, "expected %d items in history, got %d", expect, len(hist))
t.Fatalf("expected %d items in history, got %d", expect, len(hist))
}
storage.MaxHistory = 3 storage.MaxHistory = 3
rls5 := ReleaseTestData{Name: name, Version: 5, Status: common.StatusDeployed}.ToRelease() rls5 := ReleaseTestData{Name: name, Version: 5, Status: common.StatusDeployed}.ToRelease()
assertErrNil(t.Fatal, storage.Create(rls5), "Storing release 'angry-bird' (v5)") require.NoError(t, storage.Create(rls5), "Storing release 'angry-bird' (v5)")
// On inserting the 5th record, we expect two records to be pruned from history. // On inserting the 5th record, we expect two records to be pruned from history.
hist, err := storage.History(name) hist, err = storage.History(name)
require.NoError(t, err) require.NoError(t, err)
rhist, err := releaseListToV1List(hist) rhist, err := releaseListToV1List(hist)
require.NoError(t, err) require.NoError(t, err)
@ -399,9 +358,8 @@ func TestStorageRemoveLeastRecent(t *testing.T) {
// We expect the existing records to be 3, 4, and 5. // We expect the existing records to be 3, 4, and 5.
for i, item := range rhist { for i, item := range rhist {
v := item.Version v := item.Version
if expect := i + 3; v != expect { expect := i + 3
t.Errorf("Expected release %d, got %d", expect, v) assert.Equalf(t, v, expect, "Expected release %d, got %d", expect, v)
}
} }
} }
@ -420,22 +378,21 @@ func TestStorageDoNotDeleteDeployed(t *testing.T) {
rls3 := ReleaseTestData{Name: name, Version: 4, Status: common.StatusFailed}.ToRelease() rls3 := ReleaseTestData{Name: name, Version: 4, Status: common.StatusFailed}.ToRelease()
// create the release records in the storage // create the release records in the storage
assertErrNil(t.Fatal, storage.Create(rls0), "Storing release 'angry-bird' (v1)") require.NoError(t, storage.Create(rls0), "Storing release 'angry-bird' (v1)")
assertErrNil(t.Fatal, storage.Create(rls1), "Storing release 'angry-bird' (v2)") require.NoError(t, storage.Create(rls1), "Storing release 'angry-bird' (v2)")
assertErrNil(t.Fatal, storage.Create(rls2), "Storing release 'angry-bird' (v3)") require.NoError(t, storage.Create(rls2), "Storing release 'angry-bird' (v3)")
assertErrNil(t.Fatal, storage.Create(rls3), "Storing release 'angry-bird' (v4)") require.NoError(t, storage.Create(rls3), "Storing release 'angry-bird' (v4)")
} }
setup() setup()
rls5 := ReleaseTestData{Name: name, Version: 5, Status: common.StatusFailed}.ToRelease() rls5 := ReleaseTestData{Name: name, Version: 5, Status: common.StatusFailed}.ToRelease()
assertErrNil(t.Fatal, storage.Create(rls5), "Storing release 'angry-bird' (v5)") require.NoError(t, storage.Create(rls5), "Storing release 'angry-bird' (v5)")
// On inserting the 5th record, we expect a total of 3 releases, but we expect version 2 // On inserting the 5th record, we expect a total of 3 releases, but we expect version 2
// (the only deployed release), to still exist // (the only deployed release), to still exist
hist, err := storage.History(name) hist, err := storage.History(name)
if err != nil { require.NoError(t, err)
t.Fatal(err) if len(hist) != storage.MaxHistory {
} else if len(hist) != storage.MaxHistory {
rhist, err := releaseListToV1List(hist) rhist, err := releaseListToV1List(hist)
require.NoError(t, err) require.NoError(t, err)
for _, item := range rhist { for _, item := range rhist {
@ -453,9 +410,7 @@ func TestStorageDoNotDeleteDeployed(t *testing.T) {
rhist, err := releaseListToV1List(hist) rhist, err := releaseListToV1List(hist)
require.NoError(t, err) require.NoError(t, err)
for _, item := range rhist { for _, item := range rhist {
if !expectedVersions[item.Version] { assert.Truef(t, expectedVersions[item.Version], "Release version %d, found when not expected", item.Version)
t.Errorf("Release version %d, found when not expected", item.Version)
}
} }
} }
@ -473,25 +428,21 @@ func TestStorageLast(t *testing.T) {
rls3 := ReleaseTestData{Name: name, Version: 4, Status: common.StatusFailed}.ToRelease() rls3 := ReleaseTestData{Name: name, Version: 4, Status: common.StatusFailed}.ToRelease()
// create the release records in the storage // create the release records in the storage
assertErrNil(t.Fatal, storage.Create(rls0), "Storing release 'angry-bird' (v1)") require.NoError(t, storage.Create(rls0), "Storing release 'angry-bird' (v1)")
assertErrNil(t.Fatal, storage.Create(rls1), "Storing release 'angry-bird' (v2)") require.NoError(t, storage.Create(rls1), "Storing release 'angry-bird' (v2)")
assertErrNil(t.Fatal, storage.Create(rls2), "Storing release 'angry-bird' (v3)") require.NoError(t, storage.Create(rls2), "Storing release 'angry-bird' (v3)")
assertErrNil(t.Fatal, storage.Create(rls3), "Storing release 'angry-bird' (v4)") require.NoError(t, storage.Create(rls3), "Storing release 'angry-bird' (v4)")
} }
setup() setup()
h, err := storage.Last(name) h, err := storage.Last(name)
if err != nil { require.NoError(t, err, "Failed to query for release history (%q)", name)
t.Fatalf("Failed to query for release history (%q): %s\n", name, err)
}
rel, err := releaserToV1Release(h) rel, err := releaserToV1Release(h)
require.NoError(t, err) require.NoError(t, err)
if rel.Version != 4 { assert.Equal(t, 4, rel.Version, "Expected revision 4, got %d", rel.Version)
t.Errorf("Expected revision 4, got %d", rel.Version)
}
} }
// TestUpgradeInitiallyFailedReleaseWithHistoryLimit tests a case when there are no deployed release yet, but history limit has been // TestUpgradeInitiallyFailedReleaseWithHistoryLimit tests a case when there are no deployed release yet, but history limit has been
@ -511,47 +462,34 @@ func TestUpgradeInitiallyFailedReleaseWithHistoryLimit(t *testing.T) {
rls3 := ReleaseTestData{Name: name, Version: 4, Status: common.StatusFailed}.ToRelease() rls3 := ReleaseTestData{Name: name, Version: 4, Status: common.StatusFailed}.ToRelease()
// create the release records in the storage // create the release records in the storage
assertErrNil(t.Fatal, storage.Create(rls0), "Storing release 'angry-bird' (v1)") require.NoError(t, storage.Create(rls0), "Storing release 'angry-bird' (v1)")
assertErrNil(t.Fatal, storage.Create(rls1), "Storing release 'angry-bird' (v2)") require.NoError(t, storage.Create(rls1), "Storing release 'angry-bird' (v2)")
assertErrNil(t.Fatal, storage.Create(rls2), "Storing release 'angry-bird' (v3)") require.NoError(t, storage.Create(rls2), "Storing release 'angry-bird' (v3)")
assertErrNil(t.Fatal, storage.Create(rls3), "Storing release 'angry-bird' (v4)") require.NoError(t, storage.Create(rls3), "Storing release 'angry-bird' (v4)")
hist, err := storage.History(name) hist, err := storage.History(name)
if err != nil { require.NoError(t, err)
t.Fatalf("unexpected error: %s", err)
}
wantHistoryLen := 4 wantHistoryLen := 4
if len(hist) != wantHistoryLen { require.Len(t, hist, wantHistoryLen, "expected history of release %q to contain %d releases, got %d", name, wantHistoryLen, len(hist))
t.Fatalf("expected history of release %q to contain %d releases, got %d", name, wantHistoryLen, len(hist))
}
} }
setup() setup()
rls5 := ReleaseTestData{Name: name, Version: 5, Status: common.StatusFailed}.ToRelease() rls5 := ReleaseTestData{Name: name, Version: 5, Status: common.StatusFailed}.ToRelease()
err := storage.Create(rls5) require.NoError(t, storage.Create(rls5), "Failed to create a new release version")
if err != nil {
t.Fatalf("Failed to create a new release version: %s", err)
}
hist, err := storage.History(name) hist, err := storage.History(name)
if err != nil { require.NoError(t, err)
t.Fatalf("unexpected error: %s", err)
}
rhist, err := releaseListToV1List(hist) rhist, err := releaseListToV1List(hist)
require.NoError(t, err) require.NoError(t, err)
for i, rel := range rhist { for i, rel := range rhist {
wantVersion := i + 2 wantVersion := i + 2
if rel.Version != wantVersion { require.Equal(t, wantVersion, rel.Version, "Expected history release %d version to equal %d, got %d", i+1, wantVersion, rel.Version)
t.Fatalf("Expected history release %d version to equal %d, got %d", i+1, wantVersion, rel.Version)
}
wantStatus := common.StatusFailed wantStatus := common.StatusFailed
if rel.Info.Status != wantStatus { require.Equal(t, wantStatus, rel.Info.Status, "Expected history release %d status to equal %q, got %q", i+1, wantStatus, rel.Info.Status)
t.Fatalf("Expected history release %d status to equal %q, got %q", i+1, wantStatus, rel.Info.Status)
}
} }
} }
@ -573,21 +511,13 @@ func (test ReleaseTestData) ToRelease() *rspb.Release {
} }
} }
func assertErrNil(eh func(args ...any), err error, message string) {
if err != nil {
eh(fmt.Sprintf("%s: %q", message, err))
}
}
func TestStorageGetsLoggerFromDriver(t *testing.T) { func TestStorageGetsLoggerFromDriver(t *testing.T) {
d := driver.NewMemory() d := driver.NewMemory()
l := &mockSLogHandler{} l := &mockSLogHandler{}
d.SetLogger(l) d.SetLogger(l)
s := Init(d) s := Init(d)
_, _ = s.Get("doesnt-matter", 123) _, _ = s.Get("doesnt-matter", 123)
if !l.Called { require.True(t, l.Called, "Expected storage to use driver's logger, but it did not")
t.Fatal("Expected storage to use driver's logger, but it did not")
}
} }
type mockSLogHandler struct { type mockSLogHandler struct {

Loading…
Cancel
Save