Skip to content

Commit 60f514b

Browse files
authored
Merge pull request #27 from PDOK/wr/url-immutability
improved url immutability checks
2 parents 647486a + c829482 commit 60f514b

File tree

2 files changed

+82
-7
lines changed

2 files changed

+82
-7
lines changed

pkg/validation/url.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package validation
33
import (
44
"errors"
55
"fmt"
6+
"github.com/pdok/smooth-operator/model"
67
"net/url"
78

89
"k8s.io/apimachinery/pkg/util/validation/field"
@@ -27,14 +28,13 @@ func ValidateBaseURL(baseURL string) error {
2728
return nil
2829
}
2930

30-
type BaseUrlProvider interface {
31-
GetBaseUrl() string
32-
}
33-
34-
func CheckBaseUrlImmutability(oldProvider BaseUrlProvider, newProvider BaseUrlProvider, allErrs *field.ErrorList) {
35-
if oldProvider.GetBaseUrl() != newProvider.GetBaseUrl() {
31+
func CheckUrlImmutability(oldURL, newURL model.URL, allErrs *field.ErrorList, path *field.Path) {
32+
if oldURL.URL == nil && newURL.URL == nil {
33+
return
34+
}
35+
if (oldURL.URL == nil && newURL.URL != nil) || (oldURL.URL != nil && newURL.URL == nil) || (*oldURL.URL != *newURL.URL) {
3636
*allErrs = append(*allErrs, field.Forbidden(
37-
field.NewPath("spec").Child("service").Child("baseURL"),
37+
path,
3838
"is immutable",
3939
))
4040
}

pkg/validation/url_test.go

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package validation
2+
3+
import (
4+
"github.com/pdok/smooth-operator/model"
5+
"github.com/stretchr/testify/assert"
6+
"k8s.io/apimachinery/pkg/util/validation/field"
7+
"testing"
8+
)
9+
10+
func TestCheckUrlImmutability(t *testing.T) {
11+
URL1, _ := model.ParseURL("http://test.com/test")
12+
URL2, _ := model.ParseURL("http://test.com/test")
13+
URL3, _ := model.ParseURL("http://test.com/other")
14+
type args struct {
15+
oldURL model.URL
16+
newURL model.URL
17+
}
18+
tests := []struct {
19+
name string
20+
args args
21+
wantErr bool
22+
}{
23+
{
24+
name: "the same URLs",
25+
args: args{
26+
oldURL: model.URL{URL: URL1},
27+
newURL: model.URL{URL: URL2},
28+
},
29+
wantErr: false,
30+
},
31+
{
32+
name: "different URLs",
33+
args: args{
34+
oldURL: model.URL{URL: URL1},
35+
newURL: model.URL{URL: URL3},
36+
},
37+
wantErr: true,
38+
},
39+
{
40+
name: "nil URLs",
41+
args: args{
42+
oldURL: model.URL{},
43+
newURL: model.URL{},
44+
},
45+
wantErr: false,
46+
},
47+
{
48+
name: "old nil, new URL",
49+
args: args{
50+
oldURL: model.URL{},
51+
newURL: model.URL{URL: URL3},
52+
},
53+
wantErr: true,
54+
},
55+
{
56+
name: "old URL, new nil",
57+
args: args{
58+
oldURL: model.URL{URL: URL1},
59+
newURL: model.URL{URL: URL3},
60+
},
61+
wantErr: true,
62+
},
63+
}
64+
for _, tt := range tests {
65+
t.Run(tt.name, func(t *testing.T) {
66+
allErrs := field.ErrorList{}
67+
CheckUrlImmutability(tt.args.oldURL, tt.args.newURL, &allErrs, nil)
68+
if tt.wantErr {
69+
assert.NotEmpty(t, allErrs)
70+
} else {
71+
assert.Empty(t, allErrs)
72+
}
73+
})
74+
}
75+
}

0 commit comments

Comments
 (0)