func testBatcherWithOutput( t *testing.T, name, script string, duration time.Duration, er kapacitor.Result, ignoreOrder ...bool, ) { clock, et, replayErr, tm := testBatcher(t, name, script) defer tm.Close() err := fastForwardTask(clock, et, replayErr, tm, duration) if err != nil { t.Error(err) } // Get the result output, err := et.GetOutput(name) if err != nil { t.Fatal(err) } resp, err := http.Get(output.Endpoint()) if err != nil { t.Fatal(err) } // Assert we got the expected result result := kapacitor.ResultFromJSON(resp.Body) if eq, msg := compareResults(er, result); !eq { t.Error(msg) } }
func TestStream_TopSelector(t *testing.T) { var script = ` var topScores = stream .from().measurement('scores') // Get the most recent score for each player .groupBy('game', 'player') .window() .period(2s) .every(2s) .align() .mapReduce(influxql.last('value')) // Calculate the top 5 scores per game .groupBy('game') .mapReduce(influxql.top(5, 'last', 'player')) topScores .httpOut('top_scores') topScores.sample(4s) .mapReduce(influxql.count('top')) .httpOut('top_scores_sampled') ` tw := time.Date(1971, 1, 1, 0, 0, 4, 0, time.UTC) er := kapacitor.Result{ Series: imodels.Rows{ { Name: "scores", Tags: map[string]string{"game": "g0"}, Columns: []string{"time", "player", "top"}, Values: [][]interface{}{ {tw, "p7", 978.0}, {tw, "p10", 957.0}, {tw, "p9", 878.0}, {tw, "p5", 877.0}, {tw, "p15", 791.0}, }, }, { Name: "scores", Tags: map[string]string{"game": "g1"}, Columns: []string{"time", "player", "top"}, Values: [][]interface{}{ {tw, "p19", 926.0}, {tw, "p12", 887.0}, {tw, "p0", 879.0}, {tw, "p15", 872.0}, {tw, "p16", 863.0}, }, }, }, } sampleER := kapacitor.Result{ Series: imodels.Rows{ { Name: "scores", Tags: map[string]string{"game": "g0"}, Columns: []string{"time", "count"}, Values: [][]interface{}{{ time.Date(1971, 1, 1, 0, 0, 4, 0, time.UTC), 5.0, }}, }, { Name: "scores", Tags: map[string]string{"game": "g1"}, Columns: []string{"time", "count"}, Values: [][]interface{}{{ time.Date(1971, 1, 1, 0, 0, 4, 0, time.UTC), 5.0, }}, }, }, } clock, et, replayErr, tm := testStreamer(t, "TestStream_TopSelector", script) defer tm.Close() err := fastForwardTask(clock, et, replayErr, tm, 10*time.Second) if err != nil { t.Error(err) } // Get the result output, err := et.GetOutput("top_scores") if err != nil { t.Fatal(err) } resp, err := http.Get(output.Endpoint()) if err != nil { t.Fatal(err) } // Assert we got the expected result result := kapacitor.ResultFromJSON(resp.Body) if eq, msg := compareResults(er, result); !eq { t.Error(msg) } // Get the result output, err = et.GetOutput("top_scores_sampled") if err != nil { t.Fatal(err) } resp, err = http.Get(output.Endpoint()) if err != nil { t.Fatal(err) } // Assert we got the expected result result = kapacitor.ResultFromJSON(resp.Body) if eq, msg := compareResults(sampleER, result); !eq { t.Error(msg) } }