From 0ad7c3cdb8e84d6cdb7dec198f698fcaf574b935 Mon Sep 17 00:00:00 2001 From: Erik Kristensen Date: Tue, 30 Jan 2024 21:17:28 -0700 Subject: [PATCH] fix: protect against an invalid resource (#30) --- pkg/nuke/nuke_run_test.go | 10 ++++++++-- pkg/nuke/testsuite_test.go | 18 ++++++++++++++++++ pkg/scan/scan.go | 5 +++++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/pkg/nuke/nuke_run_test.go b/pkg/nuke/nuke_run_test.go index ea0be14..5e73ccd 100644 --- a/pkg/nuke/nuke_run_test.go +++ b/pkg/nuke/nuke_run_test.go @@ -145,13 +145,19 @@ func Test_Nuke_Run_SimpleWithNoDryRun(t *testing.T) { n.SetLogger(logrus.WithField("test", true)) n.SetRunSleep(time.Millisecond * 5) - scannerErr := n.RegisterScanner(testScope, scan.NewScanner("Owner", []string{"TestResource4"}, nil)) + resource.ClearRegistry() + resource.Register(&resource.Registration{ + Name: "TestResourceSuccess", + Lister: &TestResourceSuccessLister{}, + }) + + scannerErr := n.RegisterScanner(testScope, scan.NewScanner("Owner", []string{"TestResourceSuccess"}, nil)) assert.NoError(t, scannerErr) runErr := n.Run(context.TODO()) assert.NoError(t, runErr) - assert.Equal(t, 0, n.Queue.Count(queue.ItemStateFinished)) + assert.Equal(t, 1, n.Queue.Count(queue.ItemStateFinished)) } // Test_Nuke_Run_Failure tests a run with a resource that fails to remove, so it should be in the failed state. diff --git a/pkg/nuke/testsuite_test.go b/pkg/nuke/testsuite_test.go index f4c5ab0..0ac6272 100644 --- a/pkg/nuke/testsuite_test.go +++ b/pkg/nuke/testsuite_test.go @@ -5,6 +5,7 @@ import ( "fmt" "testing" + "github.com/sirupsen/logrus" "github.com/stretchr/testify/assert" "github.com/ekristen/libnuke/pkg/errors" @@ -13,6 +14,23 @@ import ( "github.com/ekristen/libnuke/pkg/types" ) +type TestGlobalHook struct { + t *testing.T + tf func(t *testing.T, e *logrus.Entry) +} + +func (h *TestGlobalHook) Levels() []logrus.Level { + return logrus.AllLevels +} + +func (h *TestGlobalHook) Fire(e *logrus.Entry) error { + if h.tf != nil { + h.tf(h.t, e) + } + + return nil +} + var ( TestResourceType = "testResourceType" TestResourceRegistration = &resource.Registration{ diff --git a/pkg/scan/scan.go b/pkg/scan/scan.go index cd67ac4..8215a3f 100644 --- a/pkg/scan/scan.go +++ b/pkg/scan/scan.go @@ -112,6 +112,11 @@ func (s *Scanner) list(ctx context.Context, owner, resourceType string, opts int lister := resource.GetLister(resourceType) var rs []resource.Resource + if lister == nil { + logrus.Errorf("lister for resource type not found: %s", resourceType) + return + } + rs, err := lister.List(ctx, opts) if err != nil { var errSkipRequest liberrors.ErrSkipRequest