diff --git a/features/300-awsredisinstance.feature b/features/300-awsredisinstance.feature index 8503750..893fda7 100644 --- a/features/300-awsredisinstance.feature +++ b/features/300-awsredisinstance.feature @@ -65,4 +65,4 @@ Feature: AwsRedisInstance feature When resource redis is deleted Then eventually resource authSecret does not exist - And eventually resource redis does not exist + And eventually resource redis does not exist with timeout3X diff --git a/internal/register.go b/internal/register.go index beac86e..4f498e7 100644 --- a/internal/register.go +++ b/internal/register.go @@ -3,9 +3,10 @@ package internal import ( "context" "fmt" + "os" + "github.com/cucumber/godog" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - "os" ) func Register(ctx *godog.ScenarioContext) { @@ -51,6 +52,7 @@ func Register(ctx *godog.ScenarioContext) { ctx.Step(`^resource (.*) is deleted`, resourceDeleted) ctx.Step(`^cleanup (.*)$`, cleanup) ctx.Step(`^resource (.*) does not exist$`, resourceDoesNotExist) + ctx.Step(`^eventually resource (.*) does not exist with (.*)$`, eventuallyResourceDoesNotExistWithOptions) ctx.Step(`^eventually resource (.*) does not exist$`, eventuallyResourceDoesNotExist) ctx.Step(`^there are no cloud resources$`, noCloudResources) ctx.Step(`^module ([^ ]+)? ?is removed$`, moduleRemoved) diff --git a/internal/resourceDoesNotExist.go b/internal/resourceDoesNotExist.go index 38d86ed..d44e43e 100644 --- a/internal/resourceDoesNotExist.go +++ b/internal/resourceDoesNotExist.go @@ -4,17 +4,49 @@ import ( "context" "errors" "fmt" + "strings" + "github.com/onsi/gomega" ) func eventuallyResourceDoesNotExist(ctx context.Context, ref string) error { + return eventuallyResourceDoesNotExistWithOptions(ctx, ref, "") +} + +func eventuallyResourceDoesNotExistWithOptions(ctx context.Context, ref string, withOpts string) error { + timeout := DefaultEventuallyTimeout + + withOpts = strings.TrimSpace(withOpts) + if len(withOpts) > 0 { + opts := strings.Split(withOpts, ",") + for _, opt := range opts { + opt = strings.TrimSpace(opt) + if opt == "" { + continue + } + // ugly, but for now with just few timeout1-5X works, if you add more, try to find a better implementation. + switch opt { + case "timeout2X": + timeout = 2 * timeout + case "timeout3X": + timeout = 3 * timeout + case "timeout4X": + timeout = 4 * timeout + case "timeout5X": + timeout = 5 * timeout + default: + return fmt.Errorf("unknown option: %s", opt) + } + } + } + var errMsg string gm := gomega.NewGomega(func(message string, callerSkip ...int) { errMsg = message }) ok := gm.Eventually(func(ctx context.Context, ref string) error { return resourceDoesNotExist(ctx, ref) - }). + }, timeout). WithArguments(ctx, ref). Should(gomega.Succeed()) if !ok || len(errMsg) > 0 {