Skip to content

Commit

Permalink
Parallelize the admission tests
Browse files Browse the repository at this point in the history
Signed-off-by: Todd Short <tshort@redhat.com>
  • Loading branch information
tmshort committed Nov 14, 2023
1 parent 7c94479 commit 30ca688
Showing 1 changed file with 79 additions and 48 deletions.
127 changes: 79 additions & 48 deletions internal/controllers/admission_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package controllers_test

import (
"context"
"sync"
"testing"

"github.com/stretchr/testify/require"
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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) {
Expand All @@ -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) {
Expand All @@ -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()
}

0 comments on commit 30ca688

Please sign in to comment.