diff --git a/cmd/config_consolidation_test.go b/cmd/config_consolidation_test.go index d90bda431db5..d733e4afd116 100644 --- a/cmd/config_consolidation_test.go +++ b/cmd/config_consolidation_test.go @@ -416,9 +416,16 @@ func getConfigConsolidationTestCases() []configConsolidationTestCase { {opts{}, exp{}, func(t *testing.T, c Config) { assert.Equal(t, lib.DefaultSummaryTrendStats, c.Options.SummaryTrendStats) }}, - {opts{cli: []string{"--summary-trend-stats", `""`}}, exp{}, func(t *testing.T, c Config) { + {opts{cli: []string{"--summary-trend-stats", ""}}, exp{}, func(t *testing.T, c Config) { assert.Equal(t, []string{}, c.Options.SummaryTrendStats) }}, + {opts{cli: []string{"--summary-trend-stats", "coun"}}, exp{consolidationError: true}, nil}, + {opts{cli: []string{"--summary-trend-stats", "med,avg,p("}}, exp{consolidationError: true}, nil}, + {opts{cli: []string{"--summary-trend-stats", "med,avg,p(-1)"}}, exp{consolidationError: true}, nil}, + {opts{cli: []string{"--summary-trend-stats", "med,avg,p(101)"}}, exp{consolidationError: true}, nil}, + {opts{cli: []string{"--summary-trend-stats", "med,avg,p(99.999)"}}, exp{}, func(t *testing.T, c Config) { + assert.Equal(t, []string{"med", "avg", "p(99.999)"}, c.Options.SummaryTrendStats) + }}, { opts{runner: &lib.Options{SummaryTrendStats: []string{"avg", "p(90)", "count"}}}, exp{}, diff --git a/ui/summary.go b/ui/summary.go index 257d4e068a38..0f70128e990e 100644 --- a/ui/summary.go +++ b/ui/summary.go @@ -46,8 +46,9 @@ const ( var ( errStatEmptyString = errors.New("invalid stat, empty string") errStatUnknownFormat = errors.New("invalid stat, unknown format") - errPercentileStatInvalidValue = errors.New("invalid percentile stat value, accepts a number") - staticResolvers = map[string]func(s *stats.TrendSink) interface{}{ + errPercentileStatInvalidValue = errors.New( + "invalid percentile stat value, accepts a number between 0 and 100") + staticResolvers = map[string]func(s *stats.TrendSink) interface{}{ "avg": func(s *stats.TrendSink) interface{} { return s.Avg }, "min": func(s *stats.TrendSink) interface{} { return s.Min }, "med": func(s *stats.TrendSink) interface{} { return s.Med }, @@ -127,7 +128,7 @@ func validatePercentile(stat string) (float64, error) { percentile, err := strconv.ParseFloat(stat[2:len(stat)-1], 64) - if err != nil { + if err != nil || ((0 > percentile) || (percentile > 100)) { return 0, errPercentileStatInvalidValue }