mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
				
	
	
		
			127 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
	
package testdatasource
 | 
						|
 | 
						|
import (
 | 
						|
	"testing"
 | 
						|
	"time"
 | 
						|
 | 
						|
	"github.com/grafana/grafana/pkg/components/simplejson"
 | 
						|
	"github.com/grafana/grafana/pkg/tsdb"
 | 
						|
	. "github.com/smartystreets/goconvey/convey"
 | 
						|
)
 | 
						|
 | 
						|
func TestTestdataScenarios(t *testing.T) {
 | 
						|
	Convey("random walk ", t, func() {
 | 
						|
		scenario := ScenarioRegistry["random_walk"]
 | 
						|
 | 
						|
		Convey("Should start at the requested value", func() {
 | 
						|
			req := &tsdb.TsdbQuery{
 | 
						|
				TimeRange: tsdb.NewFakeTimeRange("5m", "now", time.Now()),
 | 
						|
				Queries: []*tsdb.Query{
 | 
						|
					{RefId: "A", IntervalMs: 100, MaxDataPoints: 100, Model: simplejson.New()},
 | 
						|
				},
 | 
						|
			}
 | 
						|
			query := req.Queries[0]
 | 
						|
			query.Model.Set("startValue", 1.234)
 | 
						|
 | 
						|
			result := scenario.Handler(req.Queries[0], req)
 | 
						|
			points := result.Series[0].Points
 | 
						|
 | 
						|
			So(result.Series, ShouldNotBeNil)
 | 
						|
			So(points[0][0].Float64, ShouldEqual, 1.234)
 | 
						|
		})
 | 
						|
	})
 | 
						|
 | 
						|
	Convey("random walk table", t, func() {
 | 
						|
		scenario := ScenarioRegistry["random_walk_table"]
 | 
						|
 | 
						|
		Convey("Should return a table that looks like value/min/max", func() {
 | 
						|
			req := &tsdb.TsdbQuery{
 | 
						|
				TimeRange: tsdb.NewFakeTimeRange("5m", "now", time.Now()),
 | 
						|
				Queries: []*tsdb.Query{
 | 
						|
					{RefId: "A", IntervalMs: 100, MaxDataPoints: 100, Model: simplejson.New()},
 | 
						|
				},
 | 
						|
			}
 | 
						|
 | 
						|
			result := scenario.Handler(req.Queries[0], req)
 | 
						|
			table := result.Tables[0]
 | 
						|
 | 
						|
			So(len(table.Rows), ShouldBeGreaterThan, 50)
 | 
						|
			for _, row := range table.Rows {
 | 
						|
				value := row[1]
 | 
						|
				min := row[2]
 | 
						|
				max := row[3]
 | 
						|
 | 
						|
				So(min, ShouldBeLessThan, value)
 | 
						|
				So(max, ShouldBeGreaterThan, value)
 | 
						|
			}
 | 
						|
		})
 | 
						|
 | 
						|
		Convey("Should return a table with some nil values", func() {
 | 
						|
			req := &tsdb.TsdbQuery{
 | 
						|
				TimeRange: tsdb.NewFakeTimeRange("5m", "now", time.Now()),
 | 
						|
				Queries: []*tsdb.Query{
 | 
						|
					{RefId: "A", IntervalMs: 100, MaxDataPoints: 100, Model: simplejson.New()},
 | 
						|
				},
 | 
						|
			}
 | 
						|
			query := req.Queries[0]
 | 
						|
			query.Model.Set("withNil", true)
 | 
						|
 | 
						|
			result := scenario.Handler(req.Queries[0], req)
 | 
						|
			table := result.Tables[0]
 | 
						|
 | 
						|
			nil1 := false
 | 
						|
			nil2 := false
 | 
						|
			nil3 := false
 | 
						|
 | 
						|
			So(len(table.Rows), ShouldBeGreaterThan, 50)
 | 
						|
			for _, row := range table.Rows {
 | 
						|
				if row[1] == nil {
 | 
						|
					nil1 = true
 | 
						|
				}
 | 
						|
				if row[2] == nil {
 | 
						|
					nil2 = true
 | 
						|
				}
 | 
						|
				if row[3] == nil {
 | 
						|
					nil3 = true
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			So(nil1, ShouldBeTrue)
 | 
						|
			So(nil2, ShouldBeTrue)
 | 
						|
			So(nil3, ShouldBeTrue)
 | 
						|
		})
 | 
						|
	})
 | 
						|
}
 | 
						|
 | 
						|
func TestToLabels(t *testing.T) {
 | 
						|
	Convey("read labels", t, func() {
 | 
						|
		tags := make(map[string]string)
 | 
						|
		tags["job"] = "foo"
 | 
						|
		tags["instance"] = "bar"
 | 
						|
 | 
						|
		query1 := tsdb.Query{
 | 
						|
			Model: simplejson.NewFromAny(map[string]interface{}{
 | 
						|
				"labels": `{job="foo", instance="bar"}`,
 | 
						|
			}),
 | 
						|
		}
 | 
						|
 | 
						|
		So(parseLabels(&query1), ShouldResemble, tags)
 | 
						|
 | 
						|
		query2 := tsdb.Query{
 | 
						|
			Model: simplejson.NewFromAny(map[string]interface{}{
 | 
						|
				"labels": `job=foo, instance=bar`,
 | 
						|
			}),
 | 
						|
		}
 | 
						|
 | 
						|
		So(parseLabels(&query2), ShouldResemble, tags)
 | 
						|
 | 
						|
		query3 := tsdb.Query{
 | 
						|
			Model: simplejson.NewFromAny(map[string]interface{}{
 | 
						|
				"labels": `job = foo,instance = bar`,
 | 
						|
			}),
 | 
						|
		}
 | 
						|
 | 
						|
		So(parseLabels(&query3), ShouldResemble, tags)
 | 
						|
	})
 | 
						|
}
 |