211 lines
5.0 KiB
Go
211 lines
5.0 KiB
Go
package statement
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestInsertReportString(t *testing.T) {
|
|
ir := newTestInsertReport()
|
|
tmplString := `Write Statement: %v
|
|
Points/Sec: %v
|
|
Resp Time Average: %v
|
|
Resp Time Standard Deviation: %v
|
|
95th Percentile Write Response: %v
|
|
Average Request Bytes: %v
|
|
Successful Write Reqs: %v
|
|
Retries: %v`
|
|
expected := fmt.Sprintf(tmplString,
|
|
ir.name,
|
|
ir.pointsPerSecond,
|
|
ir.avgResponseTime,
|
|
ir.stdDevResponseTime,
|
|
ir.percentile,
|
|
ir.avgRequestBytes,
|
|
ir.successfulWrites,
|
|
ir.numRetries)
|
|
got := ir.String()
|
|
if expected != got {
|
|
t.Fail()
|
|
}
|
|
}
|
|
|
|
func TestInsertReportPoint(t *testing.T) {
|
|
ir := newTestInsertReport()
|
|
expected := "testDefault"
|
|
got := strings.Split(ir.Point().String(), " ")[0]
|
|
if expected != got {
|
|
t.Errorf("expected: %v\ngot: %v\n", expected, got)
|
|
}
|
|
}
|
|
|
|
func TestQueryReportString(t *testing.T) {
|
|
qr := newTestQueryReport()
|
|
tmplString := `Query Statement: %v
|
|
Resp Time Average: %v
|
|
Resp Time Standard Deviation: %v
|
|
95th Percentile Read Response: %v
|
|
Query Resp Bytes Average: %v bytes
|
|
Successful Queries: %v`
|
|
expected := fmt.Sprintf(tmplString,
|
|
qr.name,
|
|
qr.avgResponseTime,
|
|
qr.stdDevResponseTime,
|
|
qr.percentile,
|
|
qr.responseBytes,
|
|
qr.successfulReads)
|
|
got := qr.String()
|
|
if expected != got {
|
|
t.Fail()
|
|
}
|
|
}
|
|
|
|
func TestQueryReportPoint(t *testing.T) {
|
|
qr := newTestQueryReport()
|
|
expected := "testDefault"
|
|
got := strings.Split(qr.Point().String(), " ")[0]
|
|
if expected != got {
|
|
t.Errorf("expected: %v\ngot: %v\n", expected, got)
|
|
}
|
|
}
|
|
|
|
func TestInfluxQLReportString(t *testing.T) {
|
|
iqlr := newTestInfluxQLReport()
|
|
expected := fmt.Sprintf("[X] '%v' -> %v", iqlr.statement, iqlr.responseTime)
|
|
got := iqlr.String()
|
|
if expected != got {
|
|
t.Fail()
|
|
}
|
|
}
|
|
|
|
func TestInfluxQLReportPoint(t *testing.T) {
|
|
iqlr := newTestInfluxQLReport()
|
|
expected := "testDefault"
|
|
got := strings.Split(iqlr.Point().String(), " ")[0]
|
|
if expected != got {
|
|
t.Errorf("expected: %v\ngot: %v\n", expected, got)
|
|
}
|
|
}
|
|
|
|
func newTestInsertReport() *insertReport {
|
|
return &insertReport{
|
|
name: "foo_name",
|
|
numRetries: 0,
|
|
pointsPerSecond: 500000,
|
|
successfulWrites: 20000,
|
|
avgRequestBytes: 18932,
|
|
avgResponseTime: time.Duration(int64(20000)),
|
|
stdDevResponseTime: time.Duration(int64(20000)),
|
|
percentile: time.Duration(int64(20000)),
|
|
}
|
|
}
|
|
|
|
func newTestQueryReport() *queryReport {
|
|
return &queryReport{
|
|
name: "foo_name",
|
|
successfulReads: 2000,
|
|
responseBytes: 39049,
|
|
stddevResponseBytes: 9091284,
|
|
avgResponseTime: 139082,
|
|
stdDevResponseTime: 29487,
|
|
percentile: 8273491,
|
|
}
|
|
}
|
|
|
|
func newTestInfluxQLReport() *influxQlReport {
|
|
return &influxQlReport{
|
|
statement: "foo_name",
|
|
responseTime: time.Duration(int64(20000)),
|
|
success: false,
|
|
}
|
|
}
|
|
|
|
func TestGetColumnIndex(t *testing.T) {
|
|
col := "thing"
|
|
columns := []string{"thing"}
|
|
expected := 0
|
|
got := getColumnIndex(col, columns)
|
|
if expected != got {
|
|
t.Fail()
|
|
}
|
|
}
|
|
|
|
func TestNumberBytes(t *testing.T) {
|
|
columns := []string{"num_bytes"}
|
|
values := [][]interface{}{[]interface{}{json.Number("1")}}
|
|
expected := 1
|
|
got := numberBytes(columns, values)
|
|
if expected != got {
|
|
t.Fail()
|
|
}
|
|
}
|
|
|
|
func TestCountSuccesses(t *testing.T) {
|
|
columns := []string{"status_code"}
|
|
values := [][]interface{}{[]interface{}{json.Number("200")}}
|
|
expected := 1
|
|
got := countSuccesses(columns, values)
|
|
if expected != got {
|
|
t.Fail()
|
|
}
|
|
}
|
|
|
|
func TestCountRetries(t *testing.T) {
|
|
columns := []string{"status_code"}
|
|
values := [][]interface{}{[]interface{}{json.Number("500")}}
|
|
expected := 1
|
|
got := countRetries(columns, values)
|
|
if expected != got {
|
|
t.Fail()
|
|
}
|
|
}
|
|
|
|
func TestResponseTimes(t *testing.T) {
|
|
columns := []string{"response_time_ns"}
|
|
values := [][]interface{}{[]interface{}{json.Number("380")}}
|
|
expected := ResponseTimes([]ResponseTime{NewResponseTime(380)})
|
|
got := responseTimes(columns, values)
|
|
if expected[0].Value != got[0].Value {
|
|
t.Fail()
|
|
}
|
|
}
|
|
|
|
func TestPercentile(t *testing.T) {
|
|
rs := createTestResponseTimes()
|
|
expected := time.Duration(21)
|
|
got := percentile(rs)
|
|
if expected != got {
|
|
t.Errorf("expected: %v\ngot: %v\n", expected, got)
|
|
}
|
|
}
|
|
|
|
func TestAvgDuration(t *testing.T) {
|
|
rs := createTestResponseTimes()
|
|
expected := time.Duration(11)
|
|
got := avgDuration(rs)
|
|
if expected != got {
|
|
t.Errorf("expected: %v\ngot: %v\n", expected, got)
|
|
}
|
|
}
|
|
|
|
func TestStddevDuration(t *testing.T) {
|
|
rs := createTestResponseTimes()
|
|
expected := time.Duration(6)
|
|
got := stddevDuration(rs)
|
|
if expected != got {
|
|
t.Errorf("expected: %v\ngot: %v\n", expected, got)
|
|
}
|
|
}
|
|
|
|
func createTestResponseTimes() ResponseTimes {
|
|
rstms := []int{1, 2, 3, 4, 5, 6, 7, 13, 14, 15, 16, 17, 18, 19, 8, 9, 10, 11, 12, 20, 21, 22}
|
|
rs := []ResponseTime{}
|
|
for _, rst := range rstms {
|
|
rs = append(rs, NewResponseTime(rst))
|
|
}
|
|
return rs
|
|
}
|