allow kb granularity for lua shared dicts (#6750)

Update internal/ingress/controller/template/configmap.go

Co-authored-by: Ricardo Katz <rikatz@users.noreply.github.com>

Co-authored-by: Ricardo Katz <rikatz@users.noreply.github.com>
This commit is contained in:
Matthew Silverman 2021-08-12 14:13:50 -04:00 committed by GitHub
parent b510b0e930
commit b591adac48
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 140 additions and 34 deletions

View file

@ -344,27 +344,32 @@ func TestLuaSharedDictsParsing(t *testing.T) {
{
name: "configuration_data only",
entry: map[string]string{"lua-shared-dicts": "configuration_data:5"},
expect: map[string]int{"configuration_data": 5},
expect: map[string]int{"configuration_data": 5120},
},
{
name: "certificate_data only",
entry: map[string]string{"lua-shared-dicts": "certificate_data: 4"},
expect: map[string]int{"certificate_data": 4},
expect: map[string]int{"certificate_data": 4096},
},
{
name: "custom dicts",
entry: map[string]string{"lua-shared-dicts": "configuration_data: 10, my_random_dict:15 , another_example:2"},
expect: map[string]int{"configuration_data": 10, "my_random_dict": 15, "another_example": 2},
expect: map[string]int{"configuration_data": 10240, "my_random_dict": 15360, "another_example": 2048},
},
{
name: "invalid size value should be ignored",
entry: map[string]string{"lua-shared-dicts": "mydict: 10, invalid_dict: 1a"},
expect: map[string]int{"mydict": 10},
entry: map[string]string{"lua-shared-dicts": "mydict: 10, invalid_dict: 1a, bad_mb_dict:10mb"},
expect: map[string]int{"mydict": 10240},
},
{
name: "dictionary size can not be larger than 200",
entry: map[string]string{"lua-shared-dicts": "mydict: 10, invalid_dict: 201"},
expect: map[string]int{"mydict": 10},
entry: map[string]string{"lua-shared-dicts": "mydict: 10, invalid_dict: 201, invalid_kb: 204801k"},
expect: map[string]int{"mydict": 10240},
},
{
name: "specified units are interpreted properly",
entry: map[string]string{"lua-shared-dicts": "kb_dict_a: 512k, mb_dict_a: 30m, kb_dict_b:16K, mb_dict_b:4M"},
expect: map[string]int{"kb_dict_a": 512, "mb_dict_a": 30720, "kb_dict_b": 16, "mb_dict_b": 4096},
},
}
@ -418,3 +423,76 @@ func TestSplitAndTrimSpace(t *testing.T) {
}
}
}
func TestDictStrToKb(t *testing.T) {
testCases := []struct {
name string
input string
expect int
}{
{
name: "unitless int size converted to kb",
input: "50",
expect: 51200,
},
{
name: "lowercase k accepted",
input: "512k",
expect: 512,
},
{
name: "uppercase K accepted",
input: "512K",
expect: 512,
},
{
name: "lowercase m accepted",
input: "10m",
expect: 10240,
},
{
name: "uppercase M accepted",
input: "10M",
expect: 10240,
},
{
name: "trailing characters fail",
input: "50kb",
expect: -1,
},
{
name: "leading characters fail",
input: " 50k",
expect: -1,
},
}
for _, tc := range testCases {
if size := dictStrToKb(tc.input); size != tc.expect {
t.Errorf("Testing %v. Expected \"%v\" but \"%v\" was returned", tc.name, tc.expect, size)
}
}
}
func TestDictKbToStr(t *testing.T) {
testCases := []struct {
name string
input int
expect string
}{
{
name: "mod 1024 reports as M",
input: 5120,
expect: "5M",
},
{
name: "non-mod 1024 reports as K",
input: 5001,
expect: "5001K",
},
}
for _, tc := range testCases {
if sizeStr := dictKbToStr(tc.input); sizeStr != tc.expect {
t.Errorf("Testing %v. Expected \"%v\" but \"%v\" was returned", tc.name, tc.expect, sizeStr)
}
}
}