mirror of https://github.com/knative/func.git
327 lines
5.6 KiB
Go
327 lines
5.6 KiB
Go
//go:build !integration
|
|
// +build !integration
|
|
|
|
package functions
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"knative.dev/pkg/ptr"
|
|
)
|
|
|
|
func Test_validateOptions(t *testing.T) {
|
|
|
|
tests := []struct {
|
|
name string
|
|
options Options
|
|
errs int
|
|
}{
|
|
{
|
|
"correct 'scale.metric' - concurrency",
|
|
Options{
|
|
Scale: &ScaleOptions{
|
|
Metric: ptr.String("concurrency"),
|
|
},
|
|
},
|
|
0,
|
|
},
|
|
{
|
|
"correct 'scale.metric' - rps",
|
|
Options{
|
|
Scale: &ScaleOptions{
|
|
Metric: ptr.String("rps"),
|
|
},
|
|
},
|
|
0,
|
|
},
|
|
{
|
|
"incorrect 'scale.metric'",
|
|
Options{
|
|
Scale: &ScaleOptions{
|
|
Metric: ptr.String("foo"),
|
|
},
|
|
},
|
|
1,
|
|
},
|
|
{
|
|
"correct 'scale.min'",
|
|
Options{
|
|
Scale: &ScaleOptions{
|
|
Min: ptr.Int64(1),
|
|
},
|
|
},
|
|
0,
|
|
},
|
|
{
|
|
"correct 'scale.max'",
|
|
Options{
|
|
Scale: &ScaleOptions{
|
|
Max: ptr.Int64(10),
|
|
},
|
|
},
|
|
0,
|
|
},
|
|
{
|
|
"correct 'scale.min' & 'scale.max'",
|
|
Options{
|
|
Scale: &ScaleOptions{
|
|
Min: ptr.Int64(0),
|
|
Max: ptr.Int64(10),
|
|
},
|
|
},
|
|
0,
|
|
},
|
|
{
|
|
"incorrect 'scale.min' & 'scale.max'",
|
|
Options{
|
|
Scale: &ScaleOptions{
|
|
Min: ptr.Int64(100),
|
|
Max: ptr.Int64(10),
|
|
},
|
|
},
|
|
1,
|
|
},
|
|
{
|
|
"incorrect 'scale.min' - negative value",
|
|
Options{
|
|
Scale: &ScaleOptions{
|
|
Min: ptr.Int64(-10),
|
|
},
|
|
},
|
|
1,
|
|
},
|
|
{
|
|
"incorrect 'scale.max' - negative value",
|
|
Options{
|
|
Scale: &ScaleOptions{
|
|
Max: ptr.Int64(-10),
|
|
},
|
|
},
|
|
1,
|
|
},
|
|
{
|
|
"correct 'scale.target'",
|
|
Options{
|
|
Scale: &ScaleOptions{
|
|
Target: ptr.Float64(50),
|
|
},
|
|
},
|
|
0,
|
|
},
|
|
{
|
|
"incorrect 'scale.target'",
|
|
Options{
|
|
Scale: &ScaleOptions{
|
|
Target: ptr.Float64(0),
|
|
},
|
|
},
|
|
1,
|
|
},
|
|
{
|
|
"correct 'scale.utilization'",
|
|
Options{
|
|
Scale: &ScaleOptions{
|
|
Utilization: ptr.Float64(50),
|
|
},
|
|
},
|
|
0,
|
|
},
|
|
{
|
|
"incorrect 'scale.utilization' - < 1",
|
|
Options{
|
|
Scale: &ScaleOptions{
|
|
Utilization: ptr.Float64(0),
|
|
},
|
|
},
|
|
1,
|
|
},
|
|
{
|
|
"incorrect 'scale.utilization' - > 100",
|
|
Options{
|
|
Scale: &ScaleOptions{
|
|
Utilization: ptr.Float64(110),
|
|
},
|
|
},
|
|
1,
|
|
},
|
|
{
|
|
"correct 'resources.requests.cpu'",
|
|
Options{
|
|
Resources: &ResourcesOptions{
|
|
Requests: &ResourcesRequestsOptions{
|
|
CPU: ptr.String("1000m"),
|
|
},
|
|
},
|
|
},
|
|
0,
|
|
},
|
|
{
|
|
"incorrect 'resources.requests.cpu'",
|
|
Options{
|
|
Resources: &ResourcesOptions{
|
|
Requests: &ResourcesRequestsOptions{
|
|
CPU: ptr.String("foo"),
|
|
},
|
|
},
|
|
},
|
|
1,
|
|
},
|
|
{
|
|
"correct 'resources.requests.memory'",
|
|
Options{
|
|
Resources: &ResourcesOptions{
|
|
Requests: &ResourcesRequestsOptions{
|
|
Memory: ptr.String("100Mi"),
|
|
},
|
|
},
|
|
},
|
|
0,
|
|
},
|
|
{
|
|
"incorrect 'resources.requests.memory'",
|
|
Options{
|
|
Resources: &ResourcesOptions{
|
|
Requests: &ResourcesRequestsOptions{
|
|
Memory: ptr.String("foo"),
|
|
},
|
|
},
|
|
},
|
|
1,
|
|
},
|
|
{
|
|
"correct 'resources.limits.cpu'",
|
|
Options{
|
|
Resources: &ResourcesOptions{
|
|
Limits: &ResourcesLimitsOptions{
|
|
CPU: ptr.String("1000m"),
|
|
},
|
|
},
|
|
},
|
|
0,
|
|
},
|
|
{
|
|
"incorrect 'resources.limits.cpu'",
|
|
Options{
|
|
Resources: &ResourcesOptions{
|
|
Limits: &ResourcesLimitsOptions{
|
|
CPU: ptr.String("foo"),
|
|
},
|
|
},
|
|
},
|
|
1,
|
|
},
|
|
{
|
|
"correct 'resources.limits.memory'",
|
|
Options{
|
|
Resources: &ResourcesOptions{
|
|
Limits: &ResourcesLimitsOptions{
|
|
Memory: ptr.String("100Mi"),
|
|
},
|
|
},
|
|
},
|
|
0,
|
|
},
|
|
{
|
|
"incorrect 'resources.limits.memory'",
|
|
Options{
|
|
Resources: &ResourcesOptions{
|
|
Limits: &ResourcesLimitsOptions{
|
|
Memory: ptr.String("foo"),
|
|
},
|
|
},
|
|
},
|
|
1,
|
|
},
|
|
{
|
|
"correct 'resources.limits.concurrency'",
|
|
Options{
|
|
Resources: &ResourcesOptions{
|
|
Limits: &ResourcesLimitsOptions{
|
|
Concurrency: ptr.Int64(50),
|
|
},
|
|
},
|
|
},
|
|
0,
|
|
},
|
|
{
|
|
"correct 'resources.limits.concurrency' - 0",
|
|
Options{
|
|
Resources: &ResourcesOptions{
|
|
Limits: &ResourcesLimitsOptions{
|
|
Concurrency: ptr.Int64(0),
|
|
},
|
|
},
|
|
},
|
|
0,
|
|
},
|
|
{
|
|
"incorrect 'resources.limits.concurrency' - negative value",
|
|
Options{
|
|
Resources: &ResourcesOptions{
|
|
Limits: &ResourcesLimitsOptions{
|
|
Concurrency: ptr.Int64(-10),
|
|
},
|
|
},
|
|
},
|
|
1,
|
|
},
|
|
{
|
|
"correct all options",
|
|
Options{
|
|
Resources: &ResourcesOptions{
|
|
Requests: &ResourcesRequestsOptions{
|
|
CPU: ptr.String("1000m"),
|
|
Memory: ptr.String("100Mi"),
|
|
},
|
|
Limits: &ResourcesLimitsOptions{
|
|
CPU: ptr.String("1000m"),
|
|
Memory: ptr.String("100Mi"),
|
|
Concurrency: ptr.Int64(10),
|
|
},
|
|
},
|
|
Scale: &ScaleOptions{
|
|
Min: ptr.Int64(0),
|
|
Max: ptr.Int64(10),
|
|
Metric: ptr.String("concurrency"),
|
|
Target: ptr.Float64(40.5),
|
|
Utilization: ptr.Float64(35.5),
|
|
},
|
|
},
|
|
0,
|
|
},
|
|
{
|
|
"incorrect all options",
|
|
Options{
|
|
Resources: &ResourcesOptions{
|
|
Requests: &ResourcesRequestsOptions{
|
|
CPU: ptr.String("foo"),
|
|
Memory: ptr.String("foo"),
|
|
},
|
|
Limits: &ResourcesLimitsOptions{
|
|
CPU: ptr.String("foo"),
|
|
Memory: ptr.String("foo"),
|
|
Concurrency: ptr.Int64(-1),
|
|
},
|
|
},
|
|
Scale: &ScaleOptions{
|
|
Min: ptr.Int64(-1),
|
|
Max: ptr.Int64(-1),
|
|
Metric: ptr.String("foo"),
|
|
Target: ptr.Float64(-1),
|
|
Utilization: ptr.Float64(110),
|
|
},
|
|
},
|
|
10,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if got := validateOptions(tt.options); len(got) != tt.errs {
|
|
t.Errorf("validateOptions() = %v\n got %d errors but want %d", got, len(got), tt.errs)
|
|
}
|
|
})
|
|
}
|
|
|
|
}
|