Sort whitelist list to avoid random orders

This commit is contained in:
Manuel de Brito Fontes 2016-12-15 11:18:06 -03:00
parent 88780f77f6
commit bd5d90539a
2 changed files with 37 additions and 15 deletions

View file

@ -18,6 +18,7 @@ package ipwhitelist
import ( import (
"errors" "errors"
"sort"
"strings" "strings"
"k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/apis/extensions"
@ -47,8 +48,7 @@ type SourceRange struct {
// Multiple ranges can specified using commas as separator // Multiple ranges can specified using commas as separator
// e.g. `18.0.0.0/8,56.0.0.0/8` // e.g. `18.0.0.0/8,56.0.0.0/8`
func ParseAnnotations(cfg defaults.Backend, ing *extensions.Ingress) (*SourceRange, error) { func ParseAnnotations(cfg defaults.Backend, ing *extensions.Ingress) (*SourceRange, error) {
cidrs := []string{} sort.Strings(cfg.WhitelistSourceRange)
if ing.GetAnnotations() == nil { if ing.GetAnnotations() == nil {
return &SourceRange{CIDR: cfg.WhitelistSourceRange}, parser.ErrMissingAnnotations return &SourceRange{CIDR: cfg.WhitelistSourceRange}, parser.ErrMissingAnnotations
} }
@ -64,9 +64,12 @@ func ParseAnnotations(cfg defaults.Backend, ing *extensions.Ingress) (*SourceRan
return &SourceRange{CIDR: cfg.WhitelistSourceRange}, ErrInvalidCIDR return &SourceRange{CIDR: cfg.WhitelistSourceRange}, ErrInvalidCIDR
} }
cidrs := []string{}
for k := range ipnets { for k := range ipnets {
cidrs = append(cidrs, k) cidrs = append(cidrs, k)
} }
sort.Strings(cidrs)
return &SourceRange{cidrs}, nil return &SourceRange{cidrs}, nil
} }

View file

@ -63,6 +63,7 @@ func buildIngress() *extensions.Ingress {
} }
func TestParseAnnotations(t *testing.T) { func TestParseAnnotations(t *testing.T) {
// TODO: convert test cases to tables
ing := buildIngress() ing := buildIngress()
testNet := "10.0.0.0/24" testNet := "10.0.0.0/24"
@ -86,24 +87,42 @@ func TestParseAnnotations(t *testing.T) {
} }
data[whitelist] = "www" data[whitelist] = "www"
ing.SetAnnotations(data)
_, err = ParseAnnotations(defaults.Backend{}, ing) _, err = ParseAnnotations(defaults.Backend{}, ing)
if err == nil { if err == nil {
t.Errorf("Expected error parsing an invalid cidr") t.Errorf("Expected error parsing an invalid cidr")
} }
delete(data, "whitelist") delete(data, whitelist)
ing.SetAnnotations(data) ing.SetAnnotations(data)
//sr, _ = ParseAnnotations(defaults.Backend{}, ing) sr, err = ParseAnnotations(defaults.Backend{}, ing)
// TODO: fix test if err == nil {
/* t.Errorf("Expected error parsing an invalid cidr")
if !reflect.DeepEqual(sr.CIDR, []string{}) { }
t.Errorf("Expected empty CIDR but %v returned", sr.CIDR) if !strsEquals(sr.CIDR, []string{}) {
} t.Errorf("Expected empty CIDR but %v returned", sr.CIDR)
}
sr, _ = ParseAnnotations(defaults.Upstream{}, &extensions.Ingress{}) sr, _ = ParseAnnotations(defaults.Backend{}, &extensions.Ingress{})
if !reflect.DeepEqual(sr.CIDR, []string{}) { if !strsEquals(sr.CIDR, []string{}) {
t.Errorf("Expected empty CIDR but %v returned", sr.CIDR) t.Errorf("Expected empty CIDR but %v returned", sr.CIDR)
} }
*/
data[whitelist] = "2.2.2.2/32,1.1.1.1/32,3.3.3.0/24"
sr, _ = ParseAnnotations(defaults.Backend{}, ing)
ecidr := []string{"1.1.1.1/32", "2.2.2.2/32", "3.3.3.0/24"}
if !strsEquals(sr.CIDR, ecidr) {
t.Errorf("Expected %v CIDR but %v returned", ecidr, sr.CIDR)
}
}
func strsEquals(a, b []string) bool {
if len(a) != len(b) {
return false
}
for i, v := range a {
if v != b[i] {
return false
}
}
return true
} }