FieldType: Add enum type and include it in testdata scenarios (#64059)

This commit is contained in:
Ryan McKinley
2023-03-03 13:37:56 -08:00
committed by GitHub
parent aed020d9b5
commit b7d8589588
9 changed files with 200 additions and 89 deletions

View File

@@ -712,15 +712,29 @@ func randomWalkTable(query backend.DataQuery, model *simplejson.Json) *data.Fram
walker := model.Get("startValue").MustFloat64(rand.Float64() * 100)
spread := 2.5
stateField := data.NewFieldFromFieldType(data.FieldTypeEnum, 0)
stateField.Name = "State"
stateField.Config = &data.FieldConfig{
TypeConfig: &data.FieldTypeConfig{
Enum: &data.EnumFieldConfig{
Text: []string{
"Unknown", "Up", "Down", // 0,1,2
},
},
},
}
frame := data.NewFrame(query.RefID,
data.NewField("Time", nil, []*time.Time{}),
data.NewField("Value", nil, []*float64{}),
data.NewField("Min", nil, []*float64{}),
data.NewField("Max", nil, []*float64{}),
data.NewField("Info", nil, []*string{}),
stateField,
)
var info strings.Builder
state := data.EnumItemIndex(0)
for i := int64(0); i < query.MaxDataPoints && timeWalkerMs < to; i++ {
delta := rand.Float64() - 0.5
@@ -729,8 +743,10 @@ func randomWalkTable(query backend.DataQuery, model *simplejson.Json) *data.Fram
info.Reset()
if delta > 0 {
info.WriteString("up")
state = 1
} else {
info.WriteString("down")
state = 2
}
if math.Abs(delta) > .4 {
info.WriteString(" fast")
@@ -748,11 +764,12 @@ func randomWalkTable(query backend.DataQuery, model *simplejson.Json) *data.Fram
for i := range vals {
if rand.Float64() > .2 {
vals[i] = nil
state = 0
}
}
}
frame.AppendRow(&t, vals[0], vals[1], vals[2], &infoString)
frame.AppendRow(&t, vals[0], vals[1], vals[2], &infoString, state)
timeWalkerMs += query.Interval.Milliseconds()
}

View File

@@ -96,7 +96,7 @@ func TestTestdataScenarios(t *testing.T) {
require.Len(t, dResp.Frames, 1)
frame := dResp.Frames[0]
require.Greater(t, frame.Rows(), 50)
require.Len(t, frame.Fields, 5)
require.Len(t, frame.Fields, 6)
require.Equal(t, "Time", frame.Fields[0].Name)
require.Equal(t, "Value", frame.Fields[1].Name)
require.Equal(t, "Min", frame.Fields[2].Name)
@@ -152,12 +152,13 @@ func TestTestdataScenarios(t *testing.T) {
require.Len(t, dResp.Frames, 1)
frame := dResp.Frames[0]
require.Greater(t, frame.Rows(), 50)
require.Len(t, frame.Fields, 5)
require.Len(t, frame.Fields, 6)
require.Equal(t, "Time", frame.Fields[0].Name)
require.Equal(t, "Value", frame.Fields[1].Name)
require.Equal(t, "Min", frame.Fields[2].Name)
require.Equal(t, "Max", frame.Fields[3].Name)
require.Equal(t, "Info", frame.Fields[4].Name)
require.Equal(t, "State", frame.Fields[5].Name)
valNil := false
minNil := false