Skip to content

Commit

Permalink
Merge pull request #56 from gtopper/dev-to-master
Browse files Browse the repository at this point in the history
dev -> master
  • Loading branch information
Gal Topper authored Mar 15, 2020
2 parents bd6461a + 9ea72b2 commit d3a0ee8
Show file tree
Hide file tree
Showing 629 changed files with 271,933 additions and 1,887 deletions.
17 changes: 15 additions & 2 deletions functions/query/query.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (

"github.com/nuclio/nuclio-sdk-go"
"github.com/pkg/errors"
v3ioerrors "github.com/v3io/v3io-go/pkg/errors"
"github.com/v3io/v3io-tsdb/pkg/config"
"github.com/v3io/v3io-tsdb/pkg/formatter"
"github.com/v3io/v3io-tsdb/pkg/pquerier"
Expand Down Expand Up @@ -71,6 +72,10 @@ func Query(context *nuclio.Context, event nuclio.Event) (interface{}, error) {
// Select query to get back a series set iterator
seriesSet, err := querier.Select(params)
if err != nil {
cause := errors.Cause(err)
if e, hasErrorCode := cause.(v3ioerrors.ErrorWithStatusCode); hasErrorCode && e.StatusCode() >= 400 && e.StatusCode() < 500 {
return nil, nuclio.WrapErrBadRequest(err)
}
return nil, errors.Wrap(err, "Failed to execute query select")
}

Expand Down Expand Up @@ -195,9 +200,17 @@ func validateRequest(eventBody []byte) (*request, error) {
aggregators, ok := requestMap["aggregators"]
delete(requestMap, "aggregators")
if ok {
request.Aggregators, ok = aggregators.([]string)
aggrs, ok := aggregators.([]interface{})
if !ok {
return nil, errors.New("'aggregators' field must be a string array")
return nil, errors.New("'aggregators' field must be an array")
}
request.Aggregators = make([]string, 0, len(aggrs))
for _, aggr := range aggrs {
aggregator, ok := aggr.(string)
if !ok {
return nil, errors.New("'aggregators' array must contain only strings")
}
request.Aggregators = append(request.Aggregators, aggregator)
}
}
var unsupportedFields []string
Expand Down
58 changes: 36 additions & 22 deletions functions/query/query_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ func (suite *QueryTestSuite) TestValidateRequest() {
EndTime: "1642995948517",
}
req, err := validateRequest([]byte(requestString))
suite.NoError(err)
suite.Equal(expected, req)
suite.Require().NoError(err)
suite.Require().Equal(expected, req)
}

func (suite *QueryTestSuite) TestValidateRequestBadAggregators() {
Expand All @@ -36,9 +36,9 @@ func (suite *QueryTestSuite) TestValidateRequestBadAggregators() {
"end_time": "1642995948517"
}`
_, err := validateRequest([]byte(requestString))
suite.Error(err)
expectedErrorMessage := "'aggregators' field must be a string array"
suite.Equal(expectedErrorMessage, err.Error())
suite.Require().Error(err)
expectedErrorMessage := "'aggregators' field must be an array"
suite.Require().Equal(expectedErrorMessage, err.Error())
}

func (suite *QueryTestSuite) TestValidateRequestBadFieldName() {
Expand All @@ -47,9 +47,9 @@ func (suite *QueryTestSuite) TestValidateRequestBadFieldName() {
"filter_expression": "1==1"
}`
_, err := validateRequest([]byte(requestString))
suite.Error(err)
suite.Require().Error(err)
expectedErrorMessage := "Request must not contain unsupported fields: m3tric"
suite.Equal(expectedErrorMessage, err.Error())
suite.Require().Equal(expectedErrorMessage, err.Error())
}

func (suite *QueryTestSuite) TestValidateRequestBadFieldType() {
Expand All @@ -58,9 +58,9 @@ func (suite *QueryTestSuite) TestValidateRequestBadFieldType() {
"start_time": 1542111395000
}`
_, err := validateRequest([]byte(requestString))
suite.Error(err)
suite.Require().Error(err)
expectedErrorMessage := "'start_time' field must be a string"
suite.Equal(expectedErrorMessage, err.Error())
suite.Require().Equal(expectedErrorMessage, err.Error())
}

func (suite *QueryTestSuite) TestValidateRequestMinimal() {
Expand All @@ -71,8 +71,8 @@ func (suite *QueryTestSuite) TestValidateRequestMinimal() {
Metric: "cpu",
}
req, err := validateRequest([]byte(requestString))
suite.NoError(err)
suite.Equal(expected, req)
suite.Require().NoError(err)
suite.Require().Equal(expected, req)
}

func (suite *QueryTestSuite) TestValidateRequestWithoutMetric() {
Expand All @@ -85,8 +85,8 @@ func (suite *QueryTestSuite) TestValidateRequestWithoutMetric() {
EndTime: "1542111395000",
}
req, err := validateRequest([]byte(requestString))
suite.NoError(err)
suite.Equal(expected, req)
suite.Require().NoError(err)
suite.Require().Equal(expected, req)
}

func (suite *QueryTestSuite) TestValidateRequestIntAggregators() {
Expand All @@ -95,9 +95,23 @@ func (suite *QueryTestSuite) TestValidateRequestIntAggregators() {
"aggregators": [1, 2, 3]
}`
_, err := validateRequest([]byte(requestString))
suite.Error(err)
expectedErrorMessage := "'aggregators' field must be a string array"
suite.Equal(expectedErrorMessage, err.Error())
suite.Require().Error(err)
expectedErrorMessage := "'aggregators' array must contain only strings"
suite.Require().Equal(expectedErrorMessage, err.Error())
}

func (suite *QueryTestSuite) TestValidateRequestStringAggregators() {
requestString := `{
"metric": "cpu",
"aggregators": ["a", "b", "c"]
}`
expected := &request{
Metric: "cpu",
Aggregators: []string{"a", "b", "c"},
}
req, err := validateRequest([]byte(requestString))
suite.Require().NoError(err)
suite.Require().Equal(expected, req)
}

func (suite *QueryTestSuite) TestValidateRequestUnsupportedField() {
Expand All @@ -106,9 +120,9 @@ func (suite *QueryTestSuite) TestValidateRequestUnsupportedField() {
"3nd_t1me": "1542111395000"
}`
_, err := validateRequest([]byte(requestString))
suite.Error(err)
suite.Require().Error(err)
expectedErrorMessage := "Request must not contain unsupported fields: 3nd_t1me"
suite.Equal(expectedErrorMessage, err.Error())
suite.Require().Equal(expectedErrorMessage, err.Error())
}

func (suite *QueryTestSuite) TestValidateRequestLastAndEndTime() {
Expand All @@ -118,18 +132,18 @@ func (suite *QueryTestSuite) TestValidateRequestLastAndEndTime() {
"end_time": "1542111395000"
}`
_, err := validateRequest([]byte(requestString))
suite.Error(err)
suite.Require().Error(err)
expectedErrorMessage := "'last' field must not be used in conjunction with 'start_time' or 'end_time'"
suite.Equal(expectedErrorMessage, err.Error())
suite.Require().Equal(expectedErrorMessage, err.Error())
}

func (suite *QueryTestSuite) TestValidateEmptyRequest() {
requestString := `{
}`
_, err := validateRequest([]byte(requestString))
suite.Error(err)
suite.Require().Error(err)
expectedErrorMessage := "Request must contain either a 'metric' field or 'filter_expression' field"
suite.Equal(expectedErrorMessage, err.Error())
suite.Require().Equal(expectedErrorMessage, err.Error())
}

func TestQueryTestSuite(t *testing.T) {
Expand Down
22 changes: 22 additions & 0 deletions functions/query/vendor/github.com/v3io/v3io-go/go.mod

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

50 changes: 50 additions & 0 deletions functions/query/vendor/github.com/v3io/v3io-go/go.sum

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit d3a0ee8

Please sign in to comment.