1package expr
2
3import (
4	"fmt"
5	"testing"
6	"time"
7
8	"bosun.org/opentsdb"
9	"github.com/influxdata/influxdb/client/v2"
10)
11
12const influxTimeFmt = time.RFC3339Nano
13
14func TestInfluxQueryDuration(t *testing.T) {
15	type influxTest struct {
16		query  string
17		gbi    string // group by interval
18		expect string // empty for error
19	}
20	date := time.Date(2000, time.January, 1, 2, 0, 0, 0, time.UTC)
21	dur := time.Hour
22	end := date.Format(influxTimeFmt)
23	start := date.Add(-dur).Format(influxTimeFmt)
24	tests := []influxTest{
25		{
26			"select * from a", "",
27			fmt.Sprintf("SELECT * FROM a WHERE time >= '%s' AND time <= '%s' fill(none)", start, end),
28		},
29		{
30			"select * from a WHERE value > 0", "",
31			fmt.Sprintf("SELECT * FROM a WHERE value > 0 AND time >= '%s' AND time <= '%s' fill(none)", start, end),
32		},
33		{
34			"select * from a WHERE value > 0", "15m",
35			fmt.Sprintf("SELECT * FROM a WHERE value > 0 AND time >= '%s' AND time <= '%s' GROUP BY time(15m) fill(none)", start, end),
36		},
37		{
38			"select NON_NEGATIVE_DERIVATIVE(SUM(value)) from a WHERE value > 0", "15m",
39			fmt.Sprintf("SELECT non_negative_derivative(sum(value)) FROM a WHERE value > 0 AND time >= '%s' AND time <= '%s' GROUP BY time(15m) fill(none)", start, end),
40		},
41		{
42			"select * from a WHERE time > 0 fill(none)", "",
43			"",
44		},
45	}
46	for _, test := range tests {
47		q, err := influxQueryDuration(date, test.query, dur.String(), "", test.gbi)
48		if err != nil && test.expect != "" {
49			t.Errorf("%v: unexpected error: %v", test.query, err)
50		} else if q != test.expect {
51			t.Errorf("%v: \n\texpected: %v\n\tgot: %v", test.query, test.expect, q)
52		}
53	}
54}
55
56func TestInfluxQuery(t *testing.T) {
57	e := State{
58		now: time.Date(2015, time.February, 25, 0, 0, 0, 0, time.UTC),
59		Backends: &Backends{
60			InfluxConfig: client.HTTPConfig{},
61		},
62		BosunProviders: &BosunProviders{
63			Squelched: func(tags opentsdb.TagSet) bool {
64				return false
65			},
66		},
67	}
68	_, err := InfluxQuery(&e, "db", "select * from alh limit 10", "1n", "", "")
69	if err == nil {
70		t.Fatal("Should have received an error from InfluxQuery")
71	}
72}
73