2022-06-24 14:52:11 +05:30
package app
import (
"bytes"
"net/http"
"testing"
"github.com/smartystreets/assertions/should"
. "github.com/smartystreets/goconvey/convey"
2022-10-06 20:13:30 +05:30
"go.signoz.io/signoz/pkg/query-service/app/metrics"
"go.signoz.io/signoz/pkg/query-service/model"
2022-06-24 14:52:11 +05:30
)
func TestParseFilterSingleFilter ( t * testing . T ) {
Convey ( "TestParseFilterSingleFilter" , t , func ( ) {
postBody := [ ] byte ( ` {
"op" : "AND" ,
"items" : [
{ "key" : "namespace" , "value" : "a" , "op" : "EQ" }
]
} ` )
req , _ := http . NewRequest ( "POST" , "" , bytes . NewReader ( postBody ) )
res , _ := parseFilterSet ( req )
query , _ := metrics . BuildMetricsTimeSeriesFilterQuery ( res , [ ] string { } , "table" , model . NOOP )
2023-01-16 14:57:04 +05:30
So ( query , ShouldContainSubstring , "signoz_metrics.distributed_time_series_v2 WHERE metric_name = 'table' AND JSONExtractString(labels, 'namespace') = 'a'" )
2022-06-24 14:52:11 +05:30
} )
}
func TestParseFilterMultipleFilter ( t * testing . T ) {
Convey ( "TestParseFilterMultipleFilter" , t , func ( ) {
postBody := [ ] byte ( ` {
"op" : "AND" ,
"items" : [
{ "key" : "namespace" , "value" : "a" , "op" : "EQ" } ,
{ "key" : "host" , "value" : [ "host-1" , "host-2" ] , "op" : "IN" }
]
} ` )
req , _ := http . NewRequest ( "POST" , "" , bytes . NewReader ( postBody ) )
res , _ := parseFilterSet ( req )
query , _ := metrics . BuildMetricsTimeSeriesFilterQuery ( res , [ ] string { } , "table" , model . NOOP )
2022-11-14 22:51:23 +05:30
So ( query , should . ContainSubstring , "JSONExtractString(labels, 'host') IN ['host-1','host-2']" )
So ( query , should . ContainSubstring , "JSONExtractString(labels, 'namespace') = 'a'" )
2022-06-24 14:52:11 +05:30
} )
}
func TestParseFilterNotSupportedOp ( t * testing . T ) {
Convey ( "TestParseFilterNotSupportedOp" , t , func ( ) {
postBody := [ ] byte ( ` {
"op" : "AND" ,
"items" : [
{ "key" : "namespace" , "value" : "a" , "op" : "PO" }
]
} ` )
req , _ := http . NewRequest ( "POST" , "" , bytes . NewReader ( postBody ) )
res , _ := parseFilterSet ( req )
_ , err := metrics . BuildMetricsTimeSeriesFilterQuery ( res , [ ] string { } , "table" , model . NOOP )
So ( err , should . BeError , "unsupported operation" )
} )
}