Path: blob/main/pkg/flow/internal/stdlib/stdlib_test.go
4096 views
package stdlib12import (3"reflect"4"testing"56"github.com/grafana/agent/component/discovery"7"github.com/grafana/agent/pkg/river/parser"8"github.com/grafana/agent/pkg/river/vm"9"github.com/prometheus/common/model"10"github.com/stretchr/testify/require"11)1213func TestVM_Stdlib_Scoped(t *testing.T) {14rootScope := &vm.Scope{15Variables: Identifiers,16}1718tt := []struct {19name string20input string21scope *vm.Scope22expect interface{}23}{24{25name: "discovery_target_decode",26input: `discovery_target_decode(input)`,27scope: &vm.Scope{28Parent: rootScope,29Variables: map[string]interface{}{30"input": `[31{32"targets": ["host-a:12345", "host-a:12346"],33"labels": {34"foo": "bar"35}36},37{38"targets": ["host-b:12345", "host-b:12346"],39"labels": {40"hello": "world"41}42}43]`,44},45},46expect: []discovery.Target{47{48model.AddressLabel: "host-a:12345",49"foo": "bar",50},51{52model.AddressLabel: "host-a:12346",53"foo": "bar",54},55{56model.AddressLabel: "host-b:12345",57"hello": "world",58},59{60model.AddressLabel: "host-b:12346",61"hello": "world",62},63},64},65}6667for _, tc := range tt {68t.Run(tc.name, func(t *testing.T) {69expr, err := parser.ParseExpression(tc.input)70require.NoError(t, err)7172eval := vm.New(expr)7374rv := reflect.New(reflect.TypeOf(tc.expect))75require.NoError(t, eval.Evaluate(tc.scope, rv.Interface()))76require.Equal(t, tc.expect, rv.Elem().Interface())77})78}79}808182