Expressions: Move GEL into core as expressions (#29072)
* comes from grafana/gel-app * remove transform plugin code * move __expr__ and -100 constants to expr pkg * set OrgID on request plugin context * use gtime for resample duration * in resample, rename "rule" to "window", use gtime for duration, parse duration before exec * remove gel entry from plugins-bundled/external.json which creates an empty array for plugins
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
package mathexp
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestFunc(t *testing.T) {
|
||||
var tests = []struct {
|
||||
name string
|
||||
expr string
|
||||
vars Vars
|
||||
newErrIs assert.ErrorAssertionFunc
|
||||
execErrIs assert.ErrorAssertionFunc
|
||||
resultIs assert.ComparisonAssertionFunc
|
||||
results Results
|
||||
}{
|
||||
{
|
||||
name: "abs on number",
|
||||
expr: "abs($A)",
|
||||
vars: Vars{
|
||||
"A": Results{
|
||||
[]Value{
|
||||
makeNumber("", nil, float64Pointer(-7)),
|
||||
},
|
||||
},
|
||||
},
|
||||
newErrIs: assert.NoError,
|
||||
execErrIs: assert.NoError,
|
||||
resultIs: assert.Equal,
|
||||
results: Results{[]Value{makeNumber("", nil, float64Pointer(7))}},
|
||||
},
|
||||
{
|
||||
name: "abs on scalar",
|
||||
expr: "abs(-1)",
|
||||
vars: Vars{},
|
||||
newErrIs: assert.NoError,
|
||||
execErrIs: assert.NoError,
|
||||
resultIs: assert.Equal,
|
||||
results: Results{[]Value{NewScalar(float64Pointer(1.0))}},
|
||||
},
|
||||
{
|
||||
name: "abs on series",
|
||||
expr: "abs($A)",
|
||||
vars: Vars{
|
||||
"A": Results{
|
||||
[]Value{
|
||||
makeSeriesNullableTime("", nil, nullTimeTP{
|
||||
unixTimePointer(5, 0), float64Pointer(-2),
|
||||
}, nullTimeTP{
|
||||
unixTimePointer(10, 0), float64Pointer(-1),
|
||||
}),
|
||||
},
|
||||
},
|
||||
},
|
||||
newErrIs: assert.NoError,
|
||||
execErrIs: assert.NoError,
|
||||
resultIs: assert.Equal,
|
||||
results: Results{
|
||||
[]Value{
|
||||
makeSeriesNullableTime("", nil, nullTimeTP{
|
||||
unixTimePointer(5, 0), float64Pointer(2),
|
||||
}, nullTimeTP{
|
||||
unixTimePointer(10, 0), float64Pointer(1),
|
||||
}),
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "abs on string - should error",
|
||||
expr: `abs("hi")`,
|
||||
vars: Vars{},
|
||||
newErrIs: assert.Error,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
e, err := New(tt.expr)
|
||||
tt.newErrIs(t, err)
|
||||
if e != nil {
|
||||
res, err := e.Execute(tt.vars)
|
||||
tt.execErrIs(t, err)
|
||||
tt.resultIs(t, tt.results, res)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user