influxdb/v1/monitor/system_test.go

56 lines
1.5 KiB
Go

package monitor_test
import (
"os"
"reflect"
"testing"
"time"
"github.com/influxdata/influxdb/v2/v1/monitor"
)
func TestDiagnostics_System(t *testing.T) {
s := monitor.New(nil, monitor.Config{})
if err := s.Open(); err != nil {
t.Fatalf("unexpected error: %s", err)
}
defer s.Close()
d, err := s.Diagnostics()
if err != nil {
t.Errorf("unexpected error: %s", err)
return
}
diags, ok := d["system"]
if !ok {
t.Fatal("no diagnostics found for 'system'")
}
if got, exp := diags.Columns, []string{"PID", "currentTime", "started", "uptime"}; !reflect.DeepEqual(got, exp) {
t.Errorf("unexpected columns: got=%v exp=%v", got, exp)
}
// So this next part is nearly impossible to match, so just check if they look correct.
if exp, got := 1, len(diags.Rows); exp != got {
t.Fatalf("expected exactly %d row, got %d", exp, got)
}
if got, exp := diags.Rows[0][0].(int), os.Getpid(); got != exp {
t.Errorf("unexpected pid: got=%v exp=%v", got, exp)
}
currentTime := diags.Rows[0][1].(time.Time)
startTime := diags.Rows[0][2].(time.Time)
if !startTime.Before(currentTime) {
t.Errorf("start time is not before the current time: %s (start), %s (current)", startTime, currentTime)
}
uptime, err := time.ParseDuration(diags.Rows[0][3].(string))
if err != nil {
t.Errorf("unable to parse uptime duration: %s: %s", diags.Rows[0][3], err)
} else if got, exp := uptime, currentTime.Sub(startTime); got != exp {
t.Errorf("uptime does not match the difference between start time and current time: got=%v exp=%v", got, exp)
}
}