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

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

@ -21,6 +21,7 @@ import (
"time" "time"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"helm.sh/helm/v4/pkg/chart/common" "helm.sh/helm/v4/pkg/chart/common"
) )
@ -76,15 +77,12 @@ func TestSaveChartNoRawData(t *testing.T) {
} }
is := assert.New(t) is := assert.New(t)
req := require.New(t)
data, err := json.Marshal(chrt) data, err := json.Marshal(chrt)
if err != nil { req.NoError(err)
t.Fatal(err)
}
res := &Chart{} res := &Chart{}
if err := json.Unmarshal(data, res); err != nil { req.NoError(json.Unmarshal(data, res))
t.Fatal(err)
}
is.Equal([]*common.File(nil), res.Raw) is.Equal([]*common.File(nil), res.Raw)
} }

@ -272,8 +272,7 @@ func getRuntimeObjFromManifests(t *testing.T, manifests []string) []runtime.Obje
objects := []runtime.Object{} objects := []runtime.Object{}
for _, manifest := range manifests { for _, manifest := range manifests {
m := make(map[string]any) m := make(map[string]any)
err := yaml.Unmarshal([]byte(manifest), &m) require.NoError(t, yaml.Unmarshal([]byte(manifest), &m))
require.NoError(t, err)
resource := &unstructured.Unstructured{Object: m} resource := &unstructured.Unstructured{Object: m}
objects = append(objects, resource) objects = append(objects, resource)
} }
@ -332,8 +331,7 @@ func TestStatusWaitForDelete(t *testing.T) {
for _, objToCreate := range objsToCreate { for _, objToCreate := range objsToCreate {
u := objToCreate.(*unstructured.Unstructured) u := objToCreate.(*unstructured.Unstructured)
gvr := getGVR(t, fakeMapper, u) gvr := getGVR(t, fakeMapper, u)
err := fakeClient.Tracker().Create(gvr, u, u.GetNamespace()) require.NoError(t, fakeClient.Tracker().Create(gvr, u, u.GetNamespace()))
require.NoError(t, err)
} }
objsToDelete := getRuntimeObjFromManifests(t, tt.manifestsToDelete) objsToDelete := getRuntimeObjFromManifests(t, tt.manifestsToDelete)
for _, objToDelete := range objsToDelete { for _, objToDelete := range objsToDelete {
@ -341,8 +339,7 @@ func TestStatusWaitForDelete(t *testing.T) {
gvr := getGVR(t, fakeMapper, u) gvr := getGVR(t, fakeMapper, u)
go func(gvr schema.GroupVersionResource, u *unstructured.Unstructured) { go func(gvr schema.GroupVersionResource, u *unstructured.Unstructured) {
time.Sleep(timeUntilPodDelete) time.Sleep(timeUntilPodDelete)
err := fakeClient.Tracker().Delete(gvr, u.GetNamespace(), u.GetName()) assert.NoError(t, fakeClient.Tracker().Delete(gvr, u.GetNamespace(), u.GetName()))
assert.NoError(t, err)
}(gvr, u) }(gvr, u)
} }
resourceList := getResourceListFromRuntimeObjs(t, c, objsToCreate) resourceList := getResourceListFromRuntimeObjs(t, c, objsToCreate)
@ -352,9 +349,9 @@ func TestStatusWaitForDelete(t *testing.T) {
for _, expectedErrStr := range tt.expectErrs { for _, expectedErrStr := range tt.expectErrs {
require.ErrorContains(t, err, expectedErrStr) require.ErrorContains(t, err, expectedErrStr)
} }
return } else {
assert.NoError(t, err)
} }
assert.NoError(t, err)
}) })
} }
} }
@ -375,8 +372,7 @@ func TestStatusWaitForDeleteNonExistentObject(t *testing.T) {
// Don't create the object to test that the wait for delete works when the object doesn't exist // Don't create the object to test that the wait for delete works when the object doesn't exist
objManifest := getRuntimeObjFromManifests(t, []string{podCurrentManifest}) objManifest := getRuntimeObjFromManifests(t, []string{podCurrentManifest})
resourceList := getResourceListFromRuntimeObjs(t, c, objManifest) resourceList := getResourceListFromRuntimeObjs(t, c, objManifest)
err := statusWaiter.WaitForDelete(resourceList, timeout) assert.NoError(t, statusWaiter.WaitForDelete(resourceList, timeout))
assert.NoError(t, err)
} }
func TestStatusWait(t *testing.T) { func TestStatusWait(t *testing.T) {
@ -433,8 +429,7 @@ func TestStatusWait(t *testing.T) {
for _, obj := range objs { for _, obj := range objs {
u := obj.(*unstructured.Unstructured) u := obj.(*unstructured.Unstructured)
gvr := getGVR(t, fakeMapper, u) gvr := getGVR(t, fakeMapper, u)
err := fakeClient.Tracker().Create(gvr, u, u.GetNamespace()) require.NoError(t, fakeClient.Tracker().Create(gvr, u, u.GetNamespace()))
require.NoError(t, err)
} }
resourceList := getResourceListFromRuntimeObjs(t, c, objs) resourceList := getResourceListFromRuntimeObjs(t, c, objs)
err := statusWaiter.Wait(resourceList, time.Second*3) err := statusWaiter.Wait(resourceList, time.Second*3)
@ -443,9 +438,9 @@ func TestStatusWait(t *testing.T) {
for _, expectedErrStr := range tt.expectErrStrs { for _, expectedErrStr := range tt.expectErrStrs {
require.ErrorContains(t, err, expectedErrStr) require.ErrorContains(t, err, expectedErrStr)
} }
return } else {
assert.NoError(t, err)
} }
assert.NoError(t, err)
}) })
} }
} }
@ -490,8 +485,7 @@ func TestWaitForJobComplete(t *testing.T) {
for _, obj := range objs { for _, obj := range objs {
u := obj.(*unstructured.Unstructured) u := obj.(*unstructured.Unstructured)
gvr := getGVR(t, fakeMapper, u) gvr := getGVR(t, fakeMapper, u)
err := fakeClient.Tracker().Create(gvr, u, u.GetNamespace()) require.NoError(t, fakeClient.Tracker().Create(gvr, u, u.GetNamespace()))
require.NoError(t, err)
} }
resourceList := getResourceListFromRuntimeObjs(t, c, objs) resourceList := getResourceListFromRuntimeObjs(t, c, objs)
err := statusWaiter.WaitWithJobs(resourceList, time.Second*3) err := statusWaiter.WaitWithJobs(resourceList, time.Second*3)
@ -500,9 +494,9 @@ func TestWaitForJobComplete(t *testing.T) {
for _, expectedErrStr := range tt.expectErrStrs { for _, expectedErrStr := range tt.expectErrStrs {
require.ErrorContains(t, err, expectedErrStr) require.ErrorContains(t, err, expectedErrStr)
} }
return } else {
assert.NoError(t, err)
} }
assert.NoError(t, err)
}) })
} }
} }
@ -553,8 +547,7 @@ func TestWatchForReady(t *testing.T) {
for _, obj := range objs { for _, obj := range objs {
u := obj.(*unstructured.Unstructured) u := obj.(*unstructured.Unstructured)
gvr := getGVR(t, fakeMapper, u) gvr := getGVR(t, fakeMapper, u)
err := fakeClient.Tracker().Create(gvr, u, u.GetNamespace()) require.NoError(t, fakeClient.Tracker().Create(gvr, u, u.GetNamespace()))
require.NoError(t, err)
} }
resourceList := getResourceListFromRuntimeObjs(t, c, objs) resourceList := getResourceListFromRuntimeObjs(t, c, objs)
err := statusWaiter.WatchUntilReady(resourceList, time.Second*3) err := statusWaiter.WatchUntilReady(resourceList, time.Second*3)
@ -563,9 +556,9 @@ func TestWatchForReady(t *testing.T) {
for _, expectedErrStr := range tt.expectErrStrs { for _, expectedErrStr := range tt.expectErrStrs {
require.ErrorContains(t, err, expectedErrStr) require.ErrorContains(t, err, expectedErrStr)
} }
return } else {
assert.NoError(t, err)
} }
assert.NoError(t, err)
}) })
} }
} }
@ -657,8 +650,7 @@ func TestStatusWaitMultipleNamespaces(t *testing.T) {
for _, obj := range objs { for _, obj := range objs {
u := obj.(*unstructured.Unstructured) u := obj.(*unstructured.Unstructured)
gvr := getGVR(t, fakeMapper, u) gvr := getGVR(t, fakeMapper, u)
err := fakeClient.Tracker().Create(gvr, u, u.GetNamespace()) require.NoError(t, fakeClient.Tracker().Create(gvr, u, u.GetNamespace()))
require.NoError(t, err)
} }
if strings.Contains(tt.name, "delete") { if strings.Contains(tt.name, "delete") {
@ -668,8 +660,7 @@ func TestStatusWaitMultipleNamespaces(t *testing.T) {
gvr := getGVR(t, fakeMapper, u) gvr := getGVR(t, fakeMapper, u)
go func(gvr schema.GroupVersionResource, u *unstructured.Unstructured) { go func(gvr schema.GroupVersionResource, u *unstructured.Unstructured) {
time.Sleep(timeUntilDelete) time.Sleep(timeUntilDelete)
err := fakeClient.Tracker().Delete(gvr, u.GetNamespace(), u.GetName()) assert.NoError(t, fakeClient.Tracker().Delete(gvr, u.GetNamespace(), u.GetName()))
assert.NoError(t, err)
}(gvr, u) }(gvr, u)
} }
} }
@ -681,9 +672,9 @@ func TestStatusWaitMultipleNamespaces(t *testing.T) {
for _, expectedErrStr := range tt.expectErrStrs { for _, expectedErrStr := range tt.expectErrStrs {
require.ErrorContains(t, err, expectedErrStr) require.ErrorContains(t, err, expectedErrStr)
} }
return } else {
assert.NoError(t, err)
} }
assert.NoError(t, err)
}) })
} }
} }
@ -839,8 +830,7 @@ func TestStatusWaitRestrictedRBAC(t *testing.T) {
for _, obj := range objs { for _, obj := range objs {
u := obj.(*unstructured.Unstructured) u := obj.(*unstructured.Unstructured)
gvr := getGVR(t, fakeMapper, u) gvr := getGVR(t, fakeMapper, u)
err := baseFakeClient.Tracker().Create(gvr, u, u.GetNamespace()) require.NoError(t, baseFakeClient.Tracker().Create(gvr, u, u.GetNamespace()))
require.NoError(t, err)
} }
if strings.Contains(tt.name, "delet") { if strings.Contains(tt.name, "delet") {
@ -850,8 +840,7 @@ func TestStatusWaitRestrictedRBAC(t *testing.T) {
gvr := getGVR(t, fakeMapper, u) gvr := getGVR(t, fakeMapper, u)
go func(gvr schema.GroupVersionResource, u *unstructured.Unstructured) { go func(gvr schema.GroupVersionResource, u *unstructured.Unstructured) {
time.Sleep(timeUntilDelete) time.Sleep(timeUntilDelete)
err := baseFakeClient.Tracker().Delete(gvr, u.GetNamespace(), u.GetName()) assert.NoError(t, baseFakeClient.Tracker().Delete(gvr, u.GetNamespace(), u.GetName()))
assert.NoError(t, err)
}(gvr, u) }(gvr, u)
} }
} }
@ -863,10 +852,10 @@ func TestStatusWaitRestrictedRBAC(t *testing.T) {
for _, expectedErr := range tt.expectErrs { for _, expectedErr := range tt.expectErrs {
require.ErrorContains(t, err, expectedErr.Error()) require.ErrorContains(t, err, expectedErr.Error())
} }
return } else {
require.NoError(t, err)
assert.False(t, restrictedConfig.clusterScopedListAttempted)
} }
require.NoError(t, err)
assert.False(t, restrictedConfig.clusterScopedListAttempted)
}) })
} }
} }
@ -947,8 +936,7 @@ func TestStatusWaitMixedResources(t *testing.T) {
for _, obj := range objs { for _, obj := range objs {
u := obj.(*unstructured.Unstructured) u := obj.(*unstructured.Unstructured)
gvr := getGVR(t, fakeMapper, u) gvr := getGVR(t, fakeMapper, u)
err := baseFakeClient.Tracker().Create(gvr, u, u.GetNamespace()) require.NoError(t, baseFakeClient.Tracker().Create(gvr, u, u.GetNamespace()))
require.NoError(t, err)
} }
if strings.Contains(tt.name, "delet") { if strings.Contains(tt.name, "delet") {
@ -958,8 +946,7 @@ func TestStatusWaitMixedResources(t *testing.T) {
gvr := getGVR(t, fakeMapper, u) gvr := getGVR(t, fakeMapper, u)
go func(gvr schema.GroupVersionResource, u *unstructured.Unstructured) { go func(gvr schema.GroupVersionResource, u *unstructured.Unstructured) {
time.Sleep(timeUntilDelete) time.Sleep(timeUntilDelete)
err := baseFakeClient.Tracker().Delete(gvr, u.GetNamespace(), u.GetName()) assert.NoError(t, baseFakeClient.Tracker().Delete(gvr, u.GetNamespace(), u.GetName()))
assert.NoError(t, err)
}(gvr, u) }(gvr, u)
} }
} }
@ -971,10 +958,10 @@ func TestStatusWaitMixedResources(t *testing.T) {
for _, expectedErr := range tt.expectErrs { for _, expectedErr := range tt.expectErrs {
require.ErrorContains(t, err, expectedErr.Error()) require.ErrorContains(t, err, expectedErr.Error())
} }
return } else {
require.NoError(t, err)
assert.False(t, restrictedConfig.clusterScopedListAttempted)
} }
require.NoError(t, err)
assert.False(t, restrictedConfig.clusterScopedListAttempted)
}) })
} }
} }
@ -1067,8 +1054,7 @@ func TestStatusWaitWithCustomReaders(t *testing.T) {
for _, obj := range objs { for _, obj := range objs {
u := obj.(*unstructured.Unstructured) u := obj.(*unstructured.Unstructured)
gvr := getGVR(t, fakeMapper, u) gvr := getGVR(t, fakeMapper, u)
err := fakeClient.Tracker().Create(gvr, u, u.GetNamespace()) require.NoError(t, fakeClient.Tracker().Create(gvr, u, u.GetNamespace()))
require.NoError(t, err)
} }
resourceList := getResourceListFromRuntimeObjs(t, c, objs) resourceList := getResourceListFromRuntimeObjs(t, c, objs)
err := statusWaiter.Wait(resourceList, time.Second*3) err := statusWaiter.Wait(resourceList, time.Second*3)
@ -1077,9 +1063,9 @@ func TestStatusWaitWithCustomReaders(t *testing.T) {
for _, expectedErrStr := range tt.expectErrStrs { for _, expectedErrStr := range tt.expectErrStrs {
require.ErrorContains(t, err, expectedErrStr) require.ErrorContains(t, err, expectedErrStr)
} }
return } else {
assert.NoError(t, err)
} }
assert.NoError(t, err)
}) })
} }
} }
@ -1139,16 +1125,15 @@ func TestStatusWaitWithJobsAndCustomReaders(t *testing.T) {
for _, obj := range objs { for _, obj := range objs {
u := obj.(*unstructured.Unstructured) u := obj.(*unstructured.Unstructured)
gvr := getGVR(t, fakeMapper, u) gvr := getGVR(t, fakeMapper, u)
err := fakeClient.Tracker().Create(gvr, u, u.GetNamespace()) require.NoError(t, fakeClient.Tracker().Create(gvr, u, u.GetNamespace()))
require.NoError(t, err)
} }
resourceList := getResourceListFromRuntimeObjs(t, c, objs) resourceList := getResourceListFromRuntimeObjs(t, c, objs)
err := statusWaiter.WaitWithJobs(resourceList, time.Second*3) err := statusWaiter.WaitWithJobs(resourceList, time.Second*3)
if tt.expectErrs != nil { if tt.expectErrs != nil {
assert.EqualError(t, err, errors.Join(tt.expectErrs...).Error()) assert.EqualError(t, err, errors.Join(tt.expectErrs...).Error())
return } else {
assert.NoError(t, err)
} }
assert.NoError(t, err)
}) })
} }
} }
@ -1238,8 +1223,7 @@ func TestStatusWaitWithFailedResources(t *testing.T) {
for _, obj := range objs { for _, obj := range objs {
u := obj.(*unstructured.Unstructured) u := obj.(*unstructured.Unstructured)
gvr := getGVR(t, fakeMapper, u) gvr := getGVR(t, fakeMapper, u)
err := fakeClient.Tracker().Create(gvr, u, u.GetNamespace()) require.NoError(t, fakeClient.Tracker().Create(gvr, u, u.GetNamespace()))
require.NoError(t, err)
} }
resourceList := getResourceListFromRuntimeObjs(t, c, objs) resourceList := getResourceListFromRuntimeObjs(t, c, objs)
err := tt.testFunc(&sw, resourceList, time.Second*3) err := tt.testFunc(&sw, resourceList, time.Second*3)
@ -1248,9 +1232,9 @@ func TestStatusWaitWithFailedResources(t *testing.T) {
for _, expectedErrStr := range tt.expectErrStrs { for _, expectedErrStr := range tt.expectErrStrs {
require.ErrorContains(t, err, expectedErrStr) require.ErrorContains(t, err, expectedErrStr)
} }
return } else {
assert.NoError(t, err)
} }
assert.NoError(t, err)
}) })
} }
} }
@ -1343,14 +1327,12 @@ func TestMethodSpecificContextCancellation(t *testing.T) {
for _, obj := range objs { for _, obj := range objs {
u := obj.(*unstructured.Unstructured) u := obj.(*unstructured.Unstructured)
gvr := getGVR(t, fakeMapper, u) gvr := getGVR(t, fakeMapper, u)
err := fakeClient.Tracker().Create(gvr, u, u.GetNamespace()) require.NoError(t, fakeClient.Tracker().Create(gvr, u, u.GetNamespace()))
require.NoError(t, err)
} }
resourceList := getResourceListFromRuntimeObjs(t, c, objs) resourceList := getResourceListFromRuntimeObjs(t, c, objs)
err := sw.WatchUntilReady(resourceList, time.Second*3)
// Should fail due to cancelled method context // Should fail due to cancelled method context
assert.ErrorContains(t, err, "context canceled") assert.ErrorContains(t, sw.WatchUntilReady(resourceList, time.Second*3), "context canceled")
}) })
t.Run("Wait uses method-specific context", func(t *testing.T) { t.Run("Wait uses method-specific context", func(t *testing.T) {
@ -1376,14 +1358,12 @@ func TestMethodSpecificContextCancellation(t *testing.T) {
for _, obj := range objs { for _, obj := range objs {
u := obj.(*unstructured.Unstructured) u := obj.(*unstructured.Unstructured)
gvr := getGVR(t, fakeMapper, u) gvr := getGVR(t, fakeMapper, u)
err := fakeClient.Tracker().Create(gvr, u, u.GetNamespace()) require.NoError(t, fakeClient.Tracker().Create(gvr, u, u.GetNamespace()))
require.NoError(t, err)
} }
resourceList := getResourceListFromRuntimeObjs(t, c, objs) resourceList := getResourceListFromRuntimeObjs(t, c, objs)
err := sw.Wait(resourceList, time.Second*3)
// Should fail due to cancelled method context // Should fail due to cancelled method context
assert.ErrorContains(t, err, "context canceled") assert.ErrorContains(t, sw.Wait(resourceList, time.Second*3), "context canceled")
}) })
t.Run("WaitWithJobs uses method-specific context", func(t *testing.T) { t.Run("WaitWithJobs uses method-specific context", func(t *testing.T) {
@ -1409,14 +1389,12 @@ func TestMethodSpecificContextCancellation(t *testing.T) {
for _, obj := range objs { for _, obj := range objs {
u := obj.(*unstructured.Unstructured) u := obj.(*unstructured.Unstructured)
gvr := getGVR(t, fakeMapper, u) gvr := getGVR(t, fakeMapper, u)
err := fakeClient.Tracker().Create(gvr, u, u.GetNamespace()) require.NoError(t, fakeClient.Tracker().Create(gvr, u, u.GetNamespace()))
require.NoError(t, err)
} }
resourceList := getResourceListFromRuntimeObjs(t, c, objs) resourceList := getResourceListFromRuntimeObjs(t, c, objs)
err := sw.WaitWithJobs(resourceList, time.Second*3)
// Should fail due to cancelled method context // Should fail due to cancelled method context
assert.ErrorContains(t, err, "context canceled") assert.ErrorContains(t, sw.WaitWithJobs(resourceList, time.Second*3), "context canceled")
}) })
t.Run("WaitForDelete uses method-specific context", func(t *testing.T) { t.Run("WaitForDelete uses method-specific context", func(t *testing.T) {
@ -1442,14 +1420,12 @@ func TestMethodSpecificContextCancellation(t *testing.T) {
for _, obj := range objs { for _, obj := range objs {
u := obj.(*unstructured.Unstructured) u := obj.(*unstructured.Unstructured)
gvr := getGVR(t, fakeMapper, u) gvr := getGVR(t, fakeMapper, u)
err := fakeClient.Tracker().Create(gvr, u, u.GetNamespace()) require.NoError(t, fakeClient.Tracker().Create(gvr, u, u.GetNamespace()))
require.NoError(t, err)
} }
resourceList := getResourceListFromRuntimeObjs(t, c, objs) resourceList := getResourceListFromRuntimeObjs(t, c, objs)
err := sw.WaitForDelete(resourceList, time.Second*3)
// Should fail due to cancelled method context // Should fail due to cancelled method context
assert.ErrorContains(t, err, "context canceled") assert.ErrorContains(t, sw.WaitForDelete(resourceList, time.Second*3), "context canceled")
}) })
} }
@ -1479,14 +1455,12 @@ func TestMethodContextFallbackToGeneralContext(t *testing.T) {
for _, obj := range objs { for _, obj := range objs {
u := obj.(*unstructured.Unstructured) u := obj.(*unstructured.Unstructured)
gvr := getGVR(t, fakeMapper, u) gvr := getGVR(t, fakeMapper, u)
err := fakeClient.Tracker().Create(gvr, u, u.GetNamespace()) require.NoError(t, fakeClient.Tracker().Create(gvr, u, u.GetNamespace()))
require.NoError(t, err)
} }
resourceList := getResourceListFromRuntimeObjs(t, c, objs) resourceList := getResourceListFromRuntimeObjs(t, c, objs)
err := sw.WatchUntilReady(resourceList, time.Second*3)
// Should fail due to cancelled general context // Should fail due to cancelled general context
assert.ErrorContains(t, err, "context canceled") assert.ErrorContains(t, sw.WatchUntilReady(resourceList, time.Second*3), "context canceled")
}) })
t.Run("Wait falls back to general context when method context is nil", func(t *testing.T) { t.Run("Wait falls back to general context when method context is nil", func(t *testing.T) {
@ -1512,14 +1486,12 @@ func TestMethodContextFallbackToGeneralContext(t *testing.T) {
for _, obj := range objs { for _, obj := range objs {
u := obj.(*unstructured.Unstructured) u := obj.(*unstructured.Unstructured)
gvr := getGVR(t, fakeMapper, u) gvr := getGVR(t, fakeMapper, u)
err := fakeClient.Tracker().Create(gvr, u, u.GetNamespace()) require.NoError(t, fakeClient.Tracker().Create(gvr, u, u.GetNamespace()))
require.NoError(t, err)
} }
resourceList := getResourceListFromRuntimeObjs(t, c, objs) resourceList := getResourceListFromRuntimeObjs(t, c, objs)
err := sw.Wait(resourceList, time.Second*3)
// Should fail due to cancelled general context // Should fail due to cancelled general context
assert.ErrorContains(t, err, "context canceled") assert.ErrorContains(t, sw.Wait(resourceList, time.Second*3), "context canceled")
}) })
t.Run("WaitWithJobs falls back to general context when method context is nil", func(t *testing.T) { t.Run("WaitWithJobs falls back to general context when method context is nil", func(t *testing.T) {
@ -1545,14 +1517,12 @@ func TestMethodContextFallbackToGeneralContext(t *testing.T) {
for _, obj := range objs { for _, obj := range objs {
u := obj.(*unstructured.Unstructured) u := obj.(*unstructured.Unstructured)
gvr := getGVR(t, fakeMapper, u) gvr := getGVR(t, fakeMapper, u)
err := fakeClient.Tracker().Create(gvr, u, u.GetNamespace()) require.NoError(t, fakeClient.Tracker().Create(gvr, u, u.GetNamespace()))
require.NoError(t, err)
} }
resourceList := getResourceListFromRuntimeObjs(t, c, objs) resourceList := getResourceListFromRuntimeObjs(t, c, objs)
err := sw.WaitWithJobs(resourceList, time.Second*3)
// Should fail due to cancelled general context // Should fail due to cancelled general context
assert.ErrorContains(t, err, "context canceled") assert.ErrorContains(t, sw.WaitWithJobs(resourceList, time.Second*3), "context canceled")
}) })
t.Run("WaitForDelete falls back to general context when method context is nil", func(t *testing.T) { t.Run("WaitForDelete falls back to general context when method context is nil", func(t *testing.T) {
@ -1578,14 +1548,12 @@ func TestMethodContextFallbackToGeneralContext(t *testing.T) {
for _, obj := range objs { for _, obj := range objs {
u := obj.(*unstructured.Unstructured) u := obj.(*unstructured.Unstructured)
gvr := getGVR(t, fakeMapper, u) gvr := getGVR(t, fakeMapper, u)
err := fakeClient.Tracker().Create(gvr, u, u.GetNamespace()) require.NoError(t, fakeClient.Tracker().Create(gvr, u, u.GetNamespace()))
require.NoError(t, err)
} }
resourceList := getResourceListFromRuntimeObjs(t, c, objs) resourceList := getResourceListFromRuntimeObjs(t, c, objs)
err := sw.WaitForDelete(resourceList, time.Second*3)
// Should fail due to cancelled general context // Should fail due to cancelled general context
assert.ErrorContains(t, err, "context canceled") assert.ErrorContains(t, sw.WaitForDelete(resourceList, time.Second*3), "context canceled")
}) })
} }
@ -1615,14 +1583,12 @@ func TestMethodContextOverridesGeneralContext(t *testing.T) {
for _, obj := range objs { for _, obj := range objs {
u := obj.(*unstructured.Unstructured) u := obj.(*unstructured.Unstructured)
gvr := getGVR(t, fakeMapper, u) gvr := getGVR(t, fakeMapper, u)
err := fakeClient.Tracker().Create(gvr, u, u.GetNamespace()) require.NoError(t, fakeClient.Tracker().Create(gvr, u, u.GetNamespace()))
require.NoError(t, err)
} }
resourceList := getResourceListFromRuntimeObjs(t, c, objs) resourceList := getResourceListFromRuntimeObjs(t, c, objs)
err := sw.WatchUntilReady(resourceList, time.Second*3)
// Should succeed because method context is used and it's not cancelled // Should succeed because method context is used and it's not cancelled
assert.NoError(t, err) assert.NoError(t, sw.WatchUntilReady(resourceList, time.Second*3))
}) })
t.Run("method-specific context overrides general context for Wait", func(t *testing.T) { t.Run("method-specific context overrides general context for Wait", func(t *testing.T) {
@ -1648,14 +1614,12 @@ func TestMethodContextOverridesGeneralContext(t *testing.T) {
for _, obj := range objs { for _, obj := range objs {
u := obj.(*unstructured.Unstructured) u := obj.(*unstructured.Unstructured)
gvr := getGVR(t, fakeMapper, u) gvr := getGVR(t, fakeMapper, u)
err := fakeClient.Tracker().Create(gvr, u, u.GetNamespace()) require.NoError(t, fakeClient.Tracker().Create(gvr, u, u.GetNamespace()))
require.NoError(t, err)
} }
resourceList := getResourceListFromRuntimeObjs(t, c, objs) resourceList := getResourceListFromRuntimeObjs(t, c, objs)
err := sw.Wait(resourceList, time.Second*3)
// Should succeed because method context is used and it's not cancelled // Should succeed because method context is used and it's not cancelled
assert.NoError(t, err) assert.NoError(t, sw.Wait(resourceList, time.Second*3))
}) })
t.Run("method-specific context overrides general context for WaitWithJobs", func(t *testing.T) { t.Run("method-specific context overrides general context for WaitWithJobs", func(t *testing.T) {
@ -1681,14 +1645,12 @@ func TestMethodContextOverridesGeneralContext(t *testing.T) {
for _, obj := range objs { for _, obj := range objs {
u := obj.(*unstructured.Unstructured) u := obj.(*unstructured.Unstructured)
gvr := getGVR(t, fakeMapper, u) gvr := getGVR(t, fakeMapper, u)
err := fakeClient.Tracker().Create(gvr, u, u.GetNamespace()) require.NoError(t, fakeClient.Tracker().Create(gvr, u, u.GetNamespace()))
require.NoError(t, err)
} }
resourceList := getResourceListFromRuntimeObjs(t, c, objs) resourceList := getResourceListFromRuntimeObjs(t, c, objs)
err := sw.WaitWithJobs(resourceList, time.Second*3)
// Should succeed because method context is used and it's not cancelled // Should succeed because method context is used and it's not cancelled
assert.NoError(t, err) assert.NoError(t, sw.WaitWithJobs(resourceList, time.Second*3))
}) })
t.Run("method-specific context overrides general context for WaitForDelete", func(t *testing.T) { t.Run("method-specific context overrides general context for WaitForDelete", func(t *testing.T) {
@ -1717,9 +1679,8 @@ func TestMethodContextOverridesGeneralContext(t *testing.T) {
// immediately cancelled and the call would return a context error. // immediately cancelled and the call would return a context error.
objs := getRuntimeObjFromManifests(t, []string{podCurrentManifest}) objs := getRuntimeObjFromManifests(t, []string{podCurrentManifest})
resourceList := getResourceListFromRuntimeObjs(t, c, objs) resourceList := getResourceListFromRuntimeObjs(t, c, objs)
err := sw.WaitForDelete(resourceList, time.Second)
// Should succeed because method context is used and it's not cancelled // Should succeed because method context is used and it's not cancelled
assert.NoError(t, err) assert.NoError(t, sw.WaitForDelete(resourceList, time.Second))
}) })
} }
@ -1801,8 +1762,7 @@ func TestWatchUntilReadyWithCustomReaders(t *testing.T) {
for _, obj := range objs { for _, obj := range objs {
u := obj.(*unstructured.Unstructured) u := obj.(*unstructured.Unstructured)
gvr := getGVR(t, fakeMapper, u) gvr := getGVR(t, fakeMapper, u)
err := fakeClient.Tracker().Create(gvr, u, u.GetNamespace()) require.NoError(t, fakeClient.Tracker().Create(gvr, u, u.GetNamespace()))
require.NoError(t, err)
} }
resourceList := getResourceListFromRuntimeObjs(t, c, objs) resourceList := getResourceListFromRuntimeObjs(t, c, objs)
err := statusWaiter.WatchUntilReady(resourceList, time.Second*3) err := statusWaiter.WatchUntilReady(resourceList, time.Second*3)
@ -1811,9 +1771,9 @@ func TestWatchUntilReadyWithCustomReaders(t *testing.T) {
for _, expectedErrStr := range tt.expectErrStrs { for _, expectedErrStr := range tt.expectErrStrs {
require.ErrorContains(t, err, expectedErrStr) require.ErrorContains(t, err, expectedErrStr)
} }
return } else {
assert.NoError(t, err)
} }
assert.NoError(t, err)
}) })
} }
} }

@ -16,10 +16,11 @@ package driver
import ( import (
"encoding/base64" "encoding/base64"
"encoding/json" "encoding/json"
"errors"
"reflect" "reflect"
"testing" "testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
v1 "k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
"helm.sh/helm/v4/pkg/release" "helm.sh/helm/v4/pkg/release"
@ -29,9 +30,7 @@ import (
func TestConfigMapName(t *testing.T) { func TestConfigMapName(t *testing.T) {
c := newTestFixtureCfgMaps(t) c := newTestFixtureCfgMaps(t)
if c.Name() != ConfigMapsDriverName { assert.Equal(t, ConfigMapsDriverName, c.Name(), "Expected name to be %q, got %q", ConfigMapsDriverName, c.Name())
t.Errorf("Expected name to be %q, got %q", ConfigMapsDriverName, c.Name())
}
} }
func TestConfigMapGet(t *testing.T) { func TestConfigMapGet(t *testing.T) {
@ -45,13 +44,9 @@ func TestConfigMapGet(t *testing.T) {
// get release with key // get release with key
got, err := cfgmaps.Get(key) got, err := cfgmaps.Get(key)
if err != nil { require.NoError(t, err, "Failed to get release")
t.Fatalf("Failed to get release: %s", err)
}
// compare fetched release with original // compare fetched release with original
if !reflect.DeepEqual(rel, got) { assert.Truef(t, reflect.DeepEqual(rel, got), "Expected {%v}, got {%v}", rel, got)
t.Errorf("Expected {%v}, got {%v}", rel, got)
}
} }
func TestUncompressedConfigMapGet(t *testing.T) { func TestUncompressedConfigMapGet(t *testing.T) {
@ -63,13 +58,9 @@ func TestUncompressedConfigMapGet(t *testing.T) {
// Create a test fixture which contains an uncompressed release // Create a test fixture which contains an uncompressed release
cfgmap, err := newConfigMapsObject(key, rel, nil) cfgmap, err := newConfigMapsObject(key, rel, nil)
if err != nil { require.NoError(t, err, "Failed to create configmap")
t.Fatalf("Failed to create configmap: %s", err)
}
b, err := json.Marshal(rel) b, err := json.Marshal(rel)
if err != nil { require.NoError(t, err, "Failed to marshal release")
t.Fatalf("Failed to marshal release: %s", err)
}
cfgmap.Data["release"] = base64.StdEncoding.EncodeToString(b) cfgmap.Data["release"] = base64.StdEncoding.EncodeToString(b)
var mock MockConfigMapsInterface var mock MockConfigMapsInterface
mock.objects = map[string]*v1.ConfigMap{key: cfgmap} mock.objects = map[string]*v1.ConfigMap{key: cfgmap}
@ -77,13 +68,9 @@ func TestUncompressedConfigMapGet(t *testing.T) {
// get release with key // get release with key
got, err := cfgmaps.Get(key) got, err := cfgmaps.Get(key)
if err != nil { require.NoError(t, err, "Failed to get release")
t.Fatalf("Failed to get release: %s", err)
}
// compare fetched release with original // compare fetched release with original
if !reflect.DeepEqual(rel, got) { assert.Truef(t, reflect.DeepEqual(rel, got), "Expected {%v}, got {%v}", rel, got)
t.Errorf("Expected {%v}, got {%v}", rel, got)
}
} }
func convertReleaserToV1(t *testing.T, rel release.Releaser) *rspb.Release { func convertReleaserToV1(t *testing.T, rel release.Releaser) *rspb.Release {
@ -117,12 +104,8 @@ func TestConfigMapList(t *testing.T) {
return rls.Info.Status == common.StatusUninstalled return rls.Info.Status == common.StatusUninstalled
}) })
// check // check
if err != nil { require.NoError(t, err, "Failed to list deleted")
t.Errorf("Failed to list deleted: %s", err) assert.Len(t, del, 2, "Expected 2 deleted, got %d:\n%v\n", len(del), del)
}
if len(del) != 2 {
t.Errorf("Expected 2 deleted, got %d:\n%v\n", len(del), del)
}
// list all deployed releases // list all deployed releases
dpl, err := cfgmaps.List(func(rel release.Releaser) bool { dpl, err := cfgmaps.List(func(rel release.Releaser) bool {
@ -130,12 +113,8 @@ func TestConfigMapList(t *testing.T) {
return rls.Info.Status == common.StatusDeployed return rls.Info.Status == common.StatusDeployed
}) })
// check // check
if err != nil { require.NoError(t, err, "Failed to list deployed")
t.Errorf("Failed to list deployed: %s", err) assert.Len(t, dpl, 2, "Expected 2 deployed, got %d", len(dpl))
}
if len(dpl) != 2 {
t.Errorf("Expected 2 deployed, got %d", len(dpl))
}
// list all superseded releases // list all superseded releases
ssd, err := cfgmaps.List(func(rel release.Releaser) bool { ssd, err := cfgmaps.List(func(rel release.Releaser) bool {
@ -143,22 +122,14 @@ func TestConfigMapList(t *testing.T) {
return rls.Info.Status == common.StatusSuperseded return rls.Info.Status == common.StatusSuperseded
}) })
// check // check
if err != nil { require.NoError(t, err, "Failed to list superseded")
t.Errorf("Failed to list superseded: %s", err) assert.Len(t, ssd, 2, "Expected 2 superseded, got %d", len(ssd))
}
if len(ssd) != 2 {
t.Errorf("Expected 2 superseded, got %d", len(ssd))
}
// Check if release having both system and custom labels, this is needed to ensure that selector filtering would work. // Check if release having both system and custom labels, this is needed to ensure that selector filtering would work.
rls := convertReleaserToV1(t, ssd[0]) rls := convertReleaserToV1(t, ssd[0])
_, ok := rls.Labels["name"] _, ok := rls.Labels["name"]
if !ok { require.True(t, ok, "Expected 'name' label in results, actual %v", rls.Labels)
t.Fatalf("Expected 'name' label in results, actual %v", rls.Labels)
}
_, ok = rls.Labels["key1"] _, ok = rls.Labels["key1"]
if !ok { require.True(t, ok, "Expected 'key1' label in results, actual %v", rls.Labels)
t.Fatalf("Expected 'key1' label in results, actual %v", rls.Labels)
}
} }
func TestConfigMapQuery(t *testing.T) { func TestConfigMapQuery(t *testing.T) {
@ -172,17 +143,11 @@ func TestConfigMapQuery(t *testing.T) {
}...) }...)
rls, err := cfgmaps.Query(map[string]string{"status": "deployed"}) rls, err := cfgmaps.Query(map[string]string{"status": "deployed"})
if err != nil { require.NoError(t, err, "Failed to query")
t.Errorf("Failed to query: %s", err) assert.Len(t, rls, 2, "Expected 2 results, got %d", len(rls))
}
if len(rls) != 2 {
t.Errorf("Expected 2 results, got %d", len(rls))
}
_, err = cfgmaps.Query(map[string]string{"name": "notExist"}) _, err = cfgmaps.Query(map[string]string{"name": "notExist"})
if !errors.Is(err, ErrReleaseNotFound) { assert.ErrorIs(t, err, ErrReleaseNotFound)
t.Errorf("Expected {%v}, got {%v}", ErrReleaseNotFound, err)
}
} }
func TestConfigMapCreate(t *testing.T) { func TestConfigMapCreate(t *testing.T) {
@ -195,20 +160,14 @@ func TestConfigMapCreate(t *testing.T) {
rel := releaseStub(name, vers, namespace, common.StatusDeployed) rel := releaseStub(name, vers, namespace, common.StatusDeployed)
// store the release in a configmap // store the release in a configmap
if err := cfgmaps.Create(key, rel); err != nil { require.NoErrorf(t, cfgmaps.Create(key, rel), "Failed to create release with key %q", key)
t.Fatalf("Failed to create release with key %q: %s", key, err)
}
// get the release back // get the release back
got, err := cfgmaps.Get(key) got, err := cfgmaps.Get(key)
if err != nil { require.NoError(t, err, "Failed to get release with key %q", key)
t.Fatalf("Failed to get release with key %q: %s", key, err)
}
// compare created release with original // compare created release with original
if !reflect.DeepEqual(rel, got) { assert.Truef(t, reflect.DeepEqual(rel, got), "Expected {%v}, got {%v}", rel, got)
t.Errorf("Expected {%v}, got {%v}", rel, got)
}
} }
func TestConfigMapUpdate(t *testing.T) { func TestConfigMapUpdate(t *testing.T) {
@ -224,21 +183,15 @@ func TestConfigMapUpdate(t *testing.T) {
rel.Info.Status = common.StatusSuperseded rel.Info.Status = common.StatusSuperseded
// perform the update // perform the update
if err := cfgmaps.Update(key, rel); err != nil { require.NoErrorf(t, cfgmaps.Update(key, rel), "Failed to update release")
t.Fatalf("Failed to update release: %s", err)
}
// fetch the updated release // fetch the updated release
goti, err := cfgmaps.Get(key) goti, err := cfgmaps.Get(key)
if err != nil { require.NoError(t, err, "Failed to get release with key %q", key)
t.Fatalf("Failed to get release with key %q: %s", key, err)
}
got := convertReleaserToV1(t, goti) got := convertReleaserToV1(t, goti)
// check release has actually been updated by comparing modified fields // check release has actually been updated by comparing modified fields
if rel.Info.Status != got.Info.Status { assert.Equal(t, got.Info.Status, rel.Info.Status, "Expected status %s, got status %s", rel.Info.Status.String(), got.Info.Status.String())
t.Errorf("Expected status %s, got status %s", rel.Info.Status.String(), got.Info.Status.String())
}
} }
func TestConfigMapDelete(t *testing.T) { func TestConfigMapDelete(t *testing.T) {
@ -252,20 +205,12 @@ func TestConfigMapDelete(t *testing.T) {
// perform the delete on a non-existent release // perform the delete on a non-existent release
_, err := cfgmaps.Delete("nonexistent") _, err := cfgmaps.Delete("nonexistent")
if !errors.Is(err, ErrReleaseNotFound) { require.ErrorIs(t, err, ErrReleaseNotFound)
t.Fatalf("Expected ErrReleaseNotFound: got {%v}", err)
}
// perform the delete // perform the delete
rls, err := cfgmaps.Delete(key) rls, err := cfgmaps.Delete(key)
if err != nil { require.NoError(t, err, "Failed to delete release with key %q", key)
t.Fatalf("Failed to delete release with key %q: %s", key, err) assert.Truef(t, reflect.DeepEqual(rel, rls), "Expected {%v}, got {%v}", rel, rls)
}
if !reflect.DeepEqual(rel, rls) {
t.Errorf("Expected {%v}, got {%v}", rel, rls)
}
_, err = cfgmaps.Get(key) _, err = cfgmaps.Get(key)
if !errors.Is(err, ErrReleaseNotFound) { assert.ErrorIs(t, err, ErrReleaseNotFound)
t.Errorf("Expected {%v}, got {%v}", ErrReleaseNotFound, err)
}
} }

Loading…
Cancel
Save