Skip to content

Commit 79c2242

Browse files
authored
Merge pull request #1464 from rohankanojia-forks/pr/issue1443
test : fix flaky failures in sync_test by making sure non-empty string pointer is generated
2 parents 492c050 + 76d8204 commit 79c2242

File tree

1 file changed

+158
-6
lines changed

1 file changed

+158
-6
lines changed

pkg/config/sync_test.go

Lines changed: 158 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import (
2121
"testing"
2222

2323
dw "github.com/devfile/api/v2/pkg/apis/workspaces/v1alpha2"
24-
attributes "github.com/devfile/api/v2/pkg/attributes"
24+
"github.com/devfile/api/v2/pkg/attributes"
2525
"github.com/google/go-cmp/cmp"
2626
fuzz "github.com/google/gofuzz"
2727
routev1 "github.com/openshift/api/route/v1"
@@ -458,6 +458,158 @@ func TestMergeConfigMergesStorageAccessMode(t *testing.T) {
458458
assert.Equal(t, expectedConfig.Workspace.StorageAccessMode, actualConfig.Workspace.StorageAccessMode)
459459
}
460460

461+
func TestMergeConfigMergesStorageClassName(t *testing.T) {
462+
nonEmptyStorageClassName := "fast-ssd"
463+
emptyStorageClassName := ""
464+
465+
tests := []struct {
466+
name string
467+
message string
468+
from *v1alpha1.OperatorConfiguration
469+
to *v1alpha1.OperatorConfiguration
470+
want *v1alpha1.OperatorConfiguration
471+
}{
472+
{
473+
name: "Merges non-emptyStorageClassName StorageClassName",
474+
message: "Non-emptyStorageClassName StorageClassName should overwrite to",
475+
from: &v1alpha1.OperatorConfiguration{
476+
Workspace: &v1alpha1.WorkspaceConfig{
477+
StorageClassName: &nonEmptyStorageClassName,
478+
},
479+
},
480+
to: &v1alpha1.OperatorConfiguration{
481+
Workspace: &v1alpha1.WorkspaceConfig{},
482+
},
483+
want: &v1alpha1.OperatorConfiguration{
484+
Workspace: &v1alpha1.WorkspaceConfig{
485+
StorageClassName: &nonEmptyStorageClassName,
486+
},
487+
},
488+
},
489+
{
490+
name: "Merges emptyStorageClassName StorageClassName",
491+
message: "Empty StorageClassName should overwrite to",
492+
from: &v1alpha1.OperatorConfiguration{
493+
Workspace: &v1alpha1.WorkspaceConfig{
494+
StorageClassName: &emptyStorageClassName,
495+
},
496+
},
497+
to: &v1alpha1.OperatorConfiguration{
498+
Workspace: &v1alpha1.WorkspaceConfig{
499+
StorageClassName: &nonEmptyStorageClassName,
500+
},
501+
},
502+
want: &v1alpha1.OperatorConfiguration{
503+
Workspace: &v1alpha1.WorkspaceConfig{
504+
StorageClassName: &emptyStorageClassName,
505+
},
506+
},
507+
},
508+
{
509+
name: "Nil from StorageClassName leaves to unchanged",
510+
message: "Nil in from should not overwrite to",
511+
from: &v1alpha1.OperatorConfiguration{
512+
Workspace: &v1alpha1.WorkspaceConfig{
513+
StorageClassName: nil,
514+
},
515+
},
516+
to: &v1alpha1.OperatorConfiguration{
517+
Workspace: &v1alpha1.WorkspaceConfig{
518+
StorageClassName: &nonEmptyStorageClassName,
519+
},
520+
},
521+
want: &v1alpha1.OperatorConfiguration{
522+
Workspace: &v1alpha1.WorkspaceConfig{
523+
StorageClassName: &nonEmptyStorageClassName,
524+
},
525+
},
526+
},
527+
}
528+
529+
for _, tt := range tests {
530+
t.Run(tt.name, func(t *testing.T) {
531+
mergeConfig(tt.from, tt.to)
532+
assert.Equal(t, tt.want.Workspace.StorageClassName, tt.to.Workspace.StorageClassName, tt.message)
533+
})
534+
}
535+
}
536+
537+
func TestMergeConfigMergesRuntimeClassName(t *testing.T) {
538+
nonEmptyRuntimeClassName := "kata-runtime"
539+
emptyRuntimeClassName := ""
540+
541+
tests := []struct {
542+
name string
543+
message string
544+
from *v1alpha1.OperatorConfiguration
545+
to *v1alpha1.OperatorConfiguration
546+
want *v1alpha1.OperatorConfiguration
547+
}{
548+
{
549+
name: "Merges non-emptyRuntimeClassName RuntimeClassName",
550+
message: "Non-emptyRuntimeClassName RuntimeClassName should overwrite to",
551+
from: &v1alpha1.OperatorConfiguration{
552+
Workspace: &v1alpha1.WorkspaceConfig{
553+
RuntimeClassName: &nonEmptyRuntimeClassName,
554+
},
555+
},
556+
to: &v1alpha1.OperatorConfiguration{
557+
Workspace: &v1alpha1.WorkspaceConfig{},
558+
},
559+
want: &v1alpha1.OperatorConfiguration{
560+
Workspace: &v1alpha1.WorkspaceConfig{
561+
RuntimeClassName: &nonEmptyRuntimeClassName,
562+
},
563+
},
564+
},
565+
{
566+
name: "Merges emptyRuntimeClassName RuntimeClassName",
567+
message: "Empty RuntimeClassName should overwrite to",
568+
from: &v1alpha1.OperatorConfiguration{
569+
Workspace: &v1alpha1.WorkspaceConfig{
570+
RuntimeClassName: &emptyRuntimeClassName,
571+
},
572+
},
573+
to: &v1alpha1.OperatorConfiguration{
574+
Workspace: &v1alpha1.WorkspaceConfig{
575+
RuntimeClassName: &nonEmptyRuntimeClassName,
576+
},
577+
},
578+
want: &v1alpha1.OperatorConfiguration{
579+
Workspace: &v1alpha1.WorkspaceConfig{
580+
RuntimeClassName: &emptyRuntimeClassName,
581+
},
582+
},
583+
},
584+
{
585+
name: "Nil from RuntimeClassName leaves to unchanged",
586+
message: "Nil in from should not overwrite to",
587+
from: &v1alpha1.OperatorConfiguration{
588+
Workspace: &v1alpha1.WorkspaceConfig{
589+
RuntimeClassName: nil,
590+
},
591+
},
592+
to: &v1alpha1.OperatorConfiguration{
593+
Workspace: &v1alpha1.WorkspaceConfig{
594+
RuntimeClassName: &nonEmptyRuntimeClassName,
595+
},
596+
},
597+
want: &v1alpha1.OperatorConfiguration{
598+
Workspace: &v1alpha1.WorkspaceConfig{
599+
RuntimeClassName: &nonEmptyRuntimeClassName,
600+
},
601+
},
602+
},
603+
}
604+
605+
for _, tt := range tests {
606+
t.Run(tt.name, func(t *testing.T) {
607+
mergeConfig(tt.from, tt.to)
608+
assert.Equal(t, tt.want.Workspace.RuntimeClassName, tt.to.Workspace.RuntimeClassName, tt.message)
609+
})
610+
}
611+
}
612+
461613
func fuzzQuantity(q *resource.Quantity, c fuzz.Continue) {
462614
q.Set(c.Int63n(999))
463615
q.Format = resource.DecimalSI
@@ -483,11 +635,11 @@ func fuzzResourceRequirements(req *corev1.ResourceRequirements, c fuzz.Continue)
483635
req.Requests = requests
484636
}
485637

486-
func fuzzStringPtr(str *string, c fuzz.Continue) {
638+
func fuzzStringPtr(str **string, c fuzz.Continue) {
487639
randString := c.RandString()
488-
// Only set string pointer if the generated string is not empty to avoid edge cases with
489-
// replacing empty strings with nils in sync code. This edge case has to be tested manually.
490-
if randString != "" {
491-
*str = randString
640+
// Ensure we never assign an empty string to avoid mergeConfig skipping updates.
641+
if randString == "" {
642+
randString = "default-string-by-fuzz"
492643
}
644+
*str = &randString
493645
}

0 commit comments

Comments
 (0)