introduce test for status wait

Signed-off-by: Austin Abro <AustinAbro321@gmail.com>
pull/13604/head
Austin Abro 8 months ago
parent 71434c0b38
commit e9d9854364
No known key found for this signature in database
GPG Key ID: 92EB5159E403F9D6

@ -75,7 +75,7 @@ func (w *statusWaiter) waitForDelete(ctx context.Context, resourceList ResourceL
}
eventCh := w.sw.Watch(cancelCtx, resources, watcher.Options{})
statusCollector := collector.NewResourceStatusCollector(resources)
go logResource(ctx, resources, statusCollector, status.NotFoundStatus, w.log)
go logResourceStatus(ctx, resources, statusCollector, status.NotFoundStatus, w.log)
done := statusCollector.ListenWithObserver(eventCh, statusObserver(cancel, status.NotFoundStatus))
<-done
@ -128,7 +128,7 @@ func (w *statusWaiter) wait(ctx context.Context, resourceList ResourceList, wait
}
eventCh := w.sw.Watch(cancelCtx, resources, watcher.Options{})
statusCollector := collector.NewResourceStatusCollector(resources)
go logResource(cancelCtx, resources, statusCollector, status.CurrentStatus, w.log)
go logResourceStatus(cancelCtx, resources, statusCollector, status.CurrentStatus, w.log)
done := statusCollector.ListenWithObserver(eventCh, statusObserver(cancel, status.CurrentStatus))
<-done
@ -168,7 +168,7 @@ func statusObserver(cancel context.CancelFunc, desired status.Status) collector.
}
}
func logResource(ctx context.Context, resources []object.ObjMetadata, sc *collector.ResourceStatusCollector, desiredStatus status.Status, log func(string, ...interface{})) {
func logResourceStatus(ctx context.Context, resources []object.ObjMetadata, sc *collector.ResourceStatusCollector, desiredStatus status.Status, log func(string, ...interface{})) {
ticker := time.NewTicker(1 * time.Second)
defer ticker.Stop()
for {
@ -179,7 +179,7 @@ func logResource(ctx context.Context, resources []object.ObjMetadata, sc *collec
for _, id := range resources {
rs := sc.ResourceStatuses[id]
if rs.Status != desiredStatus {
log("waiting for resource, name: %s, kind: %s, desired status: %s, actual status: %s\n", rs.Identifier.Name, rs.Identifier.GroupKind.Kind, desiredStatus, rs.Status)
log("waiting for resource, name: %s, kind: %s, desired status: %s, actual status: %s", rs.Identifier.Name, rs.Identifier.GroupKind.Kind, desiredStatus, rs.Status)
// only log one resource to not overwhelm the logs
break
}

@ -35,7 +35,11 @@ import (
"k8s.io/apimachinery/pkg/util/yaml"
dynamicfake "k8s.io/client-go/dynamic/fake"
"k8s.io/kubectl/pkg/scheme"
"sigs.k8s.io/cli-utils/pkg/kstatus/polling/collector"
"sigs.k8s.io/cli-utils/pkg/kstatus/polling/event"
"sigs.k8s.io/cli-utils/pkg/kstatus/status"
"sigs.k8s.io/cli-utils/pkg/kstatus/watcher"
"sigs.k8s.io/cli-utils/pkg/object"
"sigs.k8s.io/cli-utils/pkg/testutil"
)
@ -115,8 +119,29 @@ func getGVR(t *testing.T, mapper meta.RESTMapper, obj *unstructured.Unstructured
require.NoError(t, err)
return mapping.Resource
}
func testLogger(message string, args ...interface{}) {
fmt.Printf(message, args...)
func TestStatusLogger(t *testing.T) {
ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond*1500)
defer cancel()
readyPod := object.ObjMetadata{
Name: "readyPod",
GroupKind: schema.GroupKind{Kind: "Pod"},
}
notReadyPod := object.ObjMetadata{
Name: "notReadyPod",
GroupKind: schema.GroupKind{Kind: "Pod"},
}
objs := []object.ObjMetadata{readyPod, notReadyPod}
resourceStatusCollector := collector.NewResourceStatusCollector(objs)
resourceStatusCollector.ResourceStatuses[readyPod] = &event.ResourceStatus{
Identifier: readyPod,
Status: status.CurrentStatus,
}
expectedMessage := "waiting for resource, name: notReadyPod, kind: Pod, desired status: Current, actual status: Unknown"
testLogger := func(message string, args ...interface{}) {
assert.Equal(t, expectedMessage, fmt.Sprintf(message, args...))
}
logResourceStatus(ctx, objs, resourceStatusCollector, status.CurrentStatus, testLogger)
}
func TestStatusWaitForDelete(t *testing.T) {
@ -155,7 +180,7 @@ func TestStatusWaitForDelete(t *testing.T) {
statusWatcher := watcher.NewDefaultStatusWatcher(fakeClient, fakeMapper)
statusWaiter := statusWaiter{
sw: statusWatcher,
log: testLogger,
log: t.Logf,
}
createdObjs := []runtime.Object{}
for _, objYaml := range tt.objToCreate {
@ -252,7 +277,7 @@ func TestStatusWait(t *testing.T) {
statusWatcher := watcher.NewDefaultStatusWatcher(fakeClient, fakeMapper)
statusWaiter := statusWaiter{
sw: statusWatcher,
log: testLogger,
log: t.Logf,
}
objs := []runtime.Object{}

Loading…
Cancel
Save