console/filter: accept empty filters

This commit is contained in:
Vincent Bernat
2022-05-27 08:59:51 +02:00
parent e114affdad
commit 36a101fd90
2 changed files with 28 additions and 0 deletions

View File

@@ -3,6 +3,7 @@ package console
import ( import (
"errors" "errors"
"fmt" "fmt"
"strings"
"akvorado/common/helpers" "akvorado/common/helpers"
"akvorado/console/filter" "akvorado/console/filter"
@@ -98,6 +99,10 @@ func (gf queryFilter) MarshalText() ([]byte, error) {
return []byte(gf.filter), nil return []byte(gf.filter), nil
} }
func (gf *queryFilter) UnmarshalText(input []byte) error { func (gf *queryFilter) UnmarshalText(input []byte) error {
if strings.TrimSpace(string(input)) == "" {
*gf = queryFilter{""}
return nil
}
got, err := filter.Parse("", input) got, err := filter.Parse("", input)
if err != nil { if err != nil {
return fmt.Errorf("cannot parse filter: %s", filter.HumanError(err)) return fmt.Errorf("cannot parse filter: %s", filter.HumanError(err))

View File

@@ -43,3 +43,26 @@ func TestQueryColumnSQLSelect(t *testing.T) {
}) })
} }
} }
func TestUnmarshalFilter(t *testing.T) {
cases := []struct {
Input string
Expected string
}{
{"", ""},
{" ", ""},
{"SrcPort=12322", "SrcPort = 12322"},
}
for _, tc := range cases {
t.Run(tc.Input, func(t *testing.T) {
var qf queryFilter
err := qf.UnmarshalText([]byte(tc.Input))
if err != nil {
t.Fatalf("UnmarshalText(%q) error:\n%+v", tc.Input, err)
}
if diff := helpers.Diff(qf.filter, tc.Expected); diff != "" {
t.Fatalf("UnmarshalText(%q) (-got, +want):\n%s", tc.Input, diff)
}
})
}
}