mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-08-28 02:44:59 +00:00
* tweak a bunch of logging and config make overall logs less verbose and chatty 1 minute computer check-in interval 3 minute snapshot interval remove CaptureLogger as it has same functionality as buffer logger add a WithPrefix to the Logger interface so sub-services can have different prefixes * fix some lint * fix lint... confused why this is coming up now
173 lines
3.8 KiB
Go
173 lines
3.8 KiB
Go
// Copyright 2022 Molecula Corp. (DBA FeatureBase).
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
package pilosa
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"reflect"
|
|
"runtime"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/featurebasedb/featurebase/v3/logger"
|
|
)
|
|
|
|
func TestDiagnosticsClient(t *testing.T) {
|
|
// Mock server.
|
|
server := httptest.NewServer(nil)
|
|
defer server.Close()
|
|
|
|
// Create a new client.
|
|
d := newDiagnosticsCollector(server.URL)
|
|
|
|
d.Set("gg", 10)
|
|
d.Set("ss", "ss")
|
|
|
|
data, err := d.encode()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
// Test the recorded metrics, note that some types are skipped.
|
|
var eq bool
|
|
output1 := []byte(`{"gg":10,"ss":"ss"}`)
|
|
if eq, err = compareJSON(data, output1); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !eq {
|
|
t.Fatalf("unexpected diagnostics: %+v", string(data))
|
|
}
|
|
|
|
// Test the metrics after a flush.
|
|
d.Flush()
|
|
data, err = d.encode()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
output2 := []byte(`{"gg":10,"ss":"ss","Uptime":0}`)
|
|
if eq, err = compareJSON(data, output2); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !eq {
|
|
t.Fatalf("unexpected diagnostics after flush: %+v", string(data))
|
|
}
|
|
}
|
|
|
|
func TestDiagnosticsVersion_Parse(t *testing.T) {
|
|
version := "0.1.1"
|
|
vs := versionSegments(version)
|
|
|
|
output := []int{0, 1, 1}
|
|
if !reflect.DeepEqual(vs, output) {
|
|
t.Fatalf("unexpected version: %+v", vs)
|
|
}
|
|
}
|
|
|
|
func TestDiagnosticsVersion_Compare(t *testing.T) {
|
|
d := newDiagnosticsCollector("localhost:10101")
|
|
|
|
version := "v0.1.1"
|
|
d.SetVersion(version)
|
|
|
|
err := d.compareVersion("v1.7.0")
|
|
if !strings.Contains(err.Error(), "a newer version") {
|
|
t.Fatalf("Expected a newer version is available, actual error: %s", err)
|
|
}
|
|
err = d.compareVersion("1.7.0")
|
|
if !strings.Contains(err.Error(), "a newer version") {
|
|
t.Fatalf("Expected a newer version is available, actual error: %s", err)
|
|
}
|
|
err = d.compareVersion("0.7.0")
|
|
if !strings.Contains(err.Error(), "the latest minor release is") {
|
|
t.Fatalf("Expected Minor Version Missmatch, actual error: %s", err)
|
|
}
|
|
err = d.compareVersion("0.1.2")
|
|
if !strings.Contains(err.Error(), "there is a new patch release of Pilosa") {
|
|
t.Fatalf("Expected Patch Version Missmatch, actual error: %s", err)
|
|
}
|
|
err = d.compareVersion("0.1.1")
|
|
if err != nil {
|
|
t.Fatalf("Versions should match")
|
|
}
|
|
d.SetVersion("v1.7.0")
|
|
err = d.compareVersion("0.7.2")
|
|
if err != nil {
|
|
t.Fatalf("Local version is greater")
|
|
}
|
|
}
|
|
|
|
func TestDiagnosticsVersion_Check(t *testing.T) {
|
|
// Mock server.
|
|
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
w.WriteHeader(http.StatusOK)
|
|
err := json.NewEncoder(w).Encode(versionResponse{
|
|
Version: "1.1.1",
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("couldn't encode version response: %v", err)
|
|
}
|
|
}))
|
|
defer server.Close()
|
|
|
|
// Create a new client.
|
|
d := newDiagnosticsCollector("localhost:10101")
|
|
|
|
logs := logger.NewBufferLogger()
|
|
d.Logger = logs
|
|
|
|
version := "0.1.1"
|
|
d.SetVersion(version)
|
|
d.VersionURL = server.URL
|
|
|
|
err := d.CheckVersion()
|
|
if err != nil {
|
|
t.Fatalf("checking version: %v", err)
|
|
}
|
|
|
|
allLogs, err := logs.ReadAll()
|
|
if err != nil {
|
|
t.Fatalf("reading all logs: %v", err)
|
|
}
|
|
|
|
if !strings.Contains(string(allLogs), "a newer version") {
|
|
t.Fatalf("expected version upgrade message, got '%s'", allLogs)
|
|
}
|
|
}
|
|
|
|
var _ = compareJSON
|
|
|
|
func compareJSON(a, b []byte) (bool, error) {
|
|
var j1, j2 interface{}
|
|
if err := json.Unmarshal(a, &j1); err != nil {
|
|
return false, err
|
|
}
|
|
if err := json.Unmarshal(b, &j2); err != nil {
|
|
return false, err
|
|
}
|
|
return reflect.DeepEqual(j1, j2), nil
|
|
}
|
|
|
|
func BenchmarkDiagnostics(b *testing.B) {
|
|
|
|
// Mock server.
|
|
server := httptest.NewServer(nil)
|
|
defer server.Close()
|
|
|
|
// Create a new client.
|
|
d := newDiagnosticsCollector(server.URL)
|
|
|
|
prev := runtime.GOMAXPROCS(4)
|
|
defer runtime.GOMAXPROCS(prev)
|
|
|
|
b.ResetTimer()
|
|
|
|
b.RunParallel(func(pb *testing.PB) {
|
|
for pb.Next() {
|
|
d.Set("cc", 1)
|
|
d.Set("gg", "test")
|
|
}
|
|
})
|
|
}
|