From 932b7ddc694bc731f47809e15e83a2ab65554f9c Mon Sep 17 00:00:00 2001 From: Nityananda Gohain Date: Tue, 2 Jul 2024 11:53:30 +0530 Subject: [PATCH] fix: orderby validation and correction in logs old QB (#5399) --- pkg/query-service/app/logs/parser.go | 4 +- pkg/query-service/app/logs/parser_test.go | 50 +++++++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/pkg/query-service/app/logs/parser.go b/pkg/query-service/app/logs/parser.go index 06ea6d2271..855a023528 100644 --- a/pkg/query-service/app/logs/parser.go +++ b/pkg/query-service/app/logs/parser.go @@ -58,7 +58,9 @@ func ParseLogFilterParams(r *http.Request) (*model.LogsFilterParams, error) { res.OrderBy = val[0] } if val, ok := params[ORDER]; ok { - res.Order = val[0] + if val[0] == ASC || val[0] == DESC { + res.Order = val[0] + } } if val, ok := params["q"]; ok { res.Query = val[0] diff --git a/pkg/query-service/app/logs/parser_test.go b/pkg/query-service/app/logs/parser_test.go index bb7dde6296..6397738437 100644 --- a/pkg/query-service/app/logs/parser_test.go +++ b/pkg/query-service/app/logs/parser_test.go @@ -1,6 +1,8 @@ package logs import ( + "net/http" + "net/http/httptest" "testing" . "github.com/smartystreets/goconvey/convey" @@ -432,3 +434,51 @@ func TestGenerateSQLQuery(t *testing.T) { }) } } + +var parseLogFilterParams = []struct { + Name string + ReqParams string + ExpectedLogFilterParams *model.LogsFilterParams +}{ + { + Name: "test with proper order by", + ReqParams: "order=desc&q=service.name='myservice'&limit=10", + ExpectedLogFilterParams: &model.LogsFilterParams{ + Limit: 10, + OrderBy: "timestamp", + Order: DESC, + Query: "service.name='myservice'", + }, + }, + { + Name: "test with proper order by asc", + ReqParams: "order=asc&q=service.name='myservice'&limit=10", + ExpectedLogFilterParams: &model.LogsFilterParams{ + Limit: 10, + OrderBy: "timestamp", + Order: ASC, + Query: "service.name='myservice'", + }, + }, + { + Name: "test with incorrect order by", + ReqParams: "order=undefined&q=service.name='myservice'&limit=10", + ExpectedLogFilterParams: &model.LogsFilterParams{ + Limit: 10, + OrderBy: "timestamp", + Order: DESC, + Query: "service.name='myservice'", + }, + }, +} + +func TestParseLogFilterParams(t *testing.T) { + for _, test := range parseLogFilterParams { + Convey(test.Name, t, func() { + req := httptest.NewRequest(http.MethodGet, "/logs?"+test.ReqParams, nil) + params, err := ParseLogFilterParams(req) + So(err, ShouldBeNil) + So(params, ShouldEqual, test.ExpectedLogFilterParams) + }) + } +}