From 30ca6887dd5e84e14c881ca62b83d14fbb63c456 Mon Sep 17 00:00:00 2001 From: Todd Short Date: Tue, 14 Nov 2023 16:19:46 -0500 Subject: [PATCH] Parallelize the admission tests Signed-off-by: Todd Short --- internal/controllers/admission_test.go | 127 +++++++++++++++---------- 1 file changed, 79 insertions(+), 48 deletions(-) diff --git a/internal/controllers/admission_test.go b/internal/controllers/admission_test.go index ba65e8c46..71417edf0 100644 --- a/internal/controllers/admission_test.go +++ b/internal/controllers/admission_test.go @@ -2,6 +2,7 @@ package controllers_test import ( "context" + "sync" "testing" "github.com/stretchr/testify/require" @@ -61,15 +62,21 @@ func TestOperatorSpecs(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) defer cancel() + var wg sync.WaitGroup + wg.Add(len(operatorData)) for _, d := range operatorData { - t.Logf("Running %s", d.comment) - cl, err := newClient() - require.NoError(t, err) - require.NotNil(t, cl) - err = cl.Create(ctx, d.spec) - require.Error(t, err) - require.ErrorContains(t, err, d.errMsg) + go func(t *testing.T, d testData) { + defer wg.Done() + t.Logf("Running %s", d.comment) + cl, err := newClient() + require.NoError(t, err) + require.NotNil(t, cl) + err = cl.Create(ctx, d.spec) + require.Error(t, err) + require.ErrorContains(t, err, d.errMsg) + }(t, d) } + wg.Wait() } func TestOperatorInvalidSemver(t *testing.T) { @@ -97,18 +104,24 @@ func TestOperatorInvalidSemver(t *testing.T) { ">1.2.3;<2.3.4", "1.2.3 - 2.3.4", } - for _, invalidSemver := range invalidSemvers { - cl, err := newClient() - require.NoError(t, err) - require.NotNil(t, cl) - err = cl.Create(ctx, operator(operatorsv1alpha1.OperatorSpec{ - PackageName: "package", - Version: invalidSemver, - })) - require.Errorf(t, err, "expected error for invalid semver %q", invalidSemver) - // Don't need to include the whole regex, this should be enough to match the MasterMinds regex - require.ErrorContains(t, err, "spec.version in body should match '^(\\s*(=||!=|>|<|>=|=>|<=|=<|~|~>|\\^)") + var wg sync.WaitGroup + wg.Add(len(invalidSemvers)) + for _, sm := range invalidSemvers { + go func(t *testing.T, sm string) { + defer wg.Done() + cl, err := newClient() + require.NoError(t, err) + require.NotNil(t, cl) + err = cl.Create(ctx, operator(operatorsv1alpha1.OperatorSpec{ + PackageName: "package", + Version: sm, + })) + require.Errorf(t, err, "expected error for invalid semver %q", sm) + // Don't need to include the whole regex, this should be enough to match the MasterMinds regex + require.ErrorContains(t, err, "spec.version in body should match '^(\\s*(=||!=|>|<|>=|=>|<=|=<|~|~>|\\^)") + }(t, sm) } + wg.Wait() } func TestOperatorValidSemver(t *testing.T) { @@ -149,17 +162,23 @@ func TestOperatorValidSemver(t *testing.T) { "<1.2.3-abc >2.3.4-def", "<1.2.3-abc+def >2.3.4-ghi+jkl", } - for _, validSemver := range validSemvers { - op := operator(operatorsv1alpha1.OperatorSpec{ - PackageName: "package", - Version: validSemver, - }) - cl, err := newClient() - require.NoError(t, err) - require.NotNil(t, cl) - err = cl.Create(ctx, op) - require.NoErrorf(t, err, "unexpected error for semver range '%q': %w", validSemver, err) + var wg sync.WaitGroup + wg.Add(len(validSemvers)) + for _, sm := range validSemvers { + go func(t *testing.T, sm string) { + defer wg.Done() + op := operator(operatorsv1alpha1.OperatorSpec{ + PackageName: "package", + Version: sm, + }) + cl, err := newClient() + require.NoError(t, err) + require.NotNil(t, cl) + err = cl.Create(ctx, op) + require.NoErrorf(t, err, "unexpected error for semver range '%q': %w", sm, err) + }(t, sm) } + wg.Wait() } func TestOperatorInvalidChannel(t *testing.T) { @@ -176,17 +195,23 @@ func TestOperatorInvalidChannel(t *testing.T) { ".start-with-period", "end-with-period.", } - for _, invalidChannel := range invalidChannels { - cl, err := newClient() - require.NoError(t, err) - require.NotNil(t, cl) - err = cl.Create(ctx, operator(operatorsv1alpha1.OperatorSpec{ - PackageName: "package", - Channel: invalidChannel, - })) - require.Errorf(t, err, "expected error for invalid channel '%q'", invalidChannel) - require.ErrorContains(t, err, "spec.channel in body should match '^[a-z0-9]+([\\.-][a-z0-9]+)*$'") + var wg sync.WaitGroup + wg.Add(len(invalidChannels)) + for _, ch := range invalidChannels { + go func(t *testing.T, ch string) { + defer wg.Done() + cl, err := newClient() + require.NoError(t, err) + require.NotNil(t, cl) + err = cl.Create(ctx, operator(operatorsv1alpha1.OperatorSpec{ + PackageName: "package", + Channel: ch, + })) + require.Errorf(t, err, "expected error for invalid channel '%q'", ch) + require.ErrorContains(t, err, "spec.channel in body should match '^[a-z0-9]+([\\.-][a-z0-9]+)*$'") + }(t, ch) } + wg.Wait() } func TestOperatorValidChannel(t *testing.T) { @@ -198,15 +223,21 @@ func TestOperatorValidChannel(t *testing.T) { "dotted.name", "channel-has-version-1.0.1", } - for _, validChannel := range validChannels { - op := operator(operatorsv1alpha1.OperatorSpec{ - PackageName: "package", - Channel: validChannel, - }) - cl, err := newClient() - require.NoError(t, err) - require.NotNil(t, cl) - err = cl.Create(ctx, op) - require.NoErrorf(t, err, "unexpected error creating valid channel '%q': %w", validChannel, err) + var wg sync.WaitGroup + wg.Add(len(validChannels)) + for _, ch := range validChannels { + go func(t *testing.T, ch string) { + defer wg.Done() + op := operator(operatorsv1alpha1.OperatorSpec{ + PackageName: "package", + Channel: ch, + }) + cl, err := newClient() + require.NoError(t, err) + require.NotNil(t, cl) + err = cl.Create(ctx, op) + require.NoErrorf(t, err, "unexpected error creating valid channel '%q': %w", ch, err) + }(t, ch) } + wg.Wait() }