working on valuemonitor
This commit is contained in:
+160
-6
@@ -2,8 +2,11 @@ package settings
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/rand"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"maps"
|
||||
"os"
|
||||
@@ -12,10 +15,6 @@ import (
|
||||
"time"
|
||||
)
|
||||
|
||||
const (
|
||||
TheTestFilename = "settings_test.settings"
|
||||
)
|
||||
|
||||
var (
|
||||
AdditionalKeyValuePairs = map[string]string{
|
||||
"D": "d",
|
||||
@@ -43,8 +42,11 @@ func TestSettings(t *testing.T) {
|
||||
t.Fatalf("error cleaning up %s from this run: %v\n", TheTestFilename, err)
|
||||
}
|
||||
}()
|
||||
settings := NewSettingsWithContext(t.Context(), TheTestFilename, false)
|
||||
if want, got := TheTestFilename, settings.GetFilename(); want != got {
|
||||
settings := TheSettings
|
||||
err = settings.Update()
|
||||
if err != nil {
|
||||
t.Fatalf("error updating settings: %v\n", err)
|
||||
} else if want, got := TheTestFilename, settings.GetFilename(); want != got {
|
||||
t.Fatalf("error: wanted '%s'; got '%s'\n", want, got)
|
||||
} else if got := settings.modtime; got.Equal(time.Time{}) {
|
||||
t.Fatalf("error: modtime == (time.Time{}) - not updated when initialized")
|
||||
@@ -125,3 +127,155 @@ func TestSettings(t *testing.T) {
|
||||
t.Fatalf("error: wanted error indicating 'no such file or directory'; got %v\n", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDump(t *testing.T) {
|
||||
dump, err := TheSettings.Dump()
|
||||
if err != nil {
|
||||
t.Fatalf("error dumping settings: %v\n", err)
|
||||
}
|
||||
scanner := NewScanner(bytes.NewReader(dump))
|
||||
var found int
|
||||
loop:
|
||||
for {
|
||||
key, value, err := scanner.ReadNextLine()
|
||||
if err != nil {
|
||||
if !errors.Is(err, io.EOF) {
|
||||
t.Fatalf("error reading next line: %v\n", err)
|
||||
}
|
||||
break loop
|
||||
}
|
||||
if want, got := TheSettings.GetKeyValue(key), value; want != got {
|
||||
t.Fatalf("error: wanted key %q value %q; got %q\n", key, want, got)
|
||||
}
|
||||
found++
|
||||
}
|
||||
if want, got := len(TheSettings.contents), found; want != got {
|
||||
t.Fatalf("error: wanted %d entries; got %d\n", want, got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDumpJson(t *testing.T) {
|
||||
marshaled, err := TheSettings.DumpToJson()
|
||||
if err != nil {
|
||||
t.Fatalf("error dumping to json: %v\n", err)
|
||||
}
|
||||
var unmarshaled map[string]string
|
||||
err = json.Unmarshal(marshaled, &unmarshaled)
|
||||
if err != nil {
|
||||
t.Fatalf("error unmarshaling json dump: %v\n", err)
|
||||
}
|
||||
if want, got := TheSettings.contents, unmarshaled; !maps.Equal(want, got) {
|
||||
t.Fatalf("error: wanted %v; got %v\n", want, got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSetKeyValue(t *testing.T) {
|
||||
key, value := rand.Text(), rand.Text()
|
||||
if !TheSettings.SetKeyValue(key, value) {
|
||||
t.Fatalf("SetKeyValue didn't update?\n")
|
||||
}
|
||||
if want, got := value, TheSettings.GetKeyValue(key); want != got {
|
||||
t.Fatalf("error: wanted %q; got %q\n", want, got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseBool(t *testing.T) {
|
||||
TheTestItems := map[string]bool{
|
||||
"yes": true,
|
||||
"on": true,
|
||||
"true": true,
|
||||
"True": true,
|
||||
"TRUE": true,
|
||||
"no": false,
|
||||
"off": false,
|
||||
"false": false,
|
||||
}
|
||||
for boolString, want := range TheTestItems {
|
||||
got, err := ParseBool(boolString)
|
||||
if err != nil {
|
||||
t.Fatalf("error: %v\n", err)
|
||||
}
|
||||
if want != got {
|
||||
t.Fatalf("error: wanted %s=%v; got %v\n", boolString, want, got)
|
||||
}
|
||||
}
|
||||
TheBadTestItems := []string{
|
||||
"blue",
|
||||
"cat",
|
||||
"https://google.com",
|
||||
}
|
||||
for _, boolString := range TheBadTestItems {
|
||||
got, err := ParseBool(boolString)
|
||||
if err == nil {
|
||||
t.Fatalf("error: successfully parsed %s as bool %v...\n", boolString, got)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetStringOrDefault(t *testing.T) {
|
||||
dump, err := TheSettings.Dump()
|
||||
if err != nil {
|
||||
t.Fatalf("error getting dump: %v\n", err)
|
||||
}
|
||||
scanner := NewScanner(bytes.NewReader(dump))
|
||||
loop:
|
||||
for {
|
||||
key, value, err := scanner.ReadNextLine()
|
||||
if err != nil {
|
||||
if !errors.Is(err, io.EOF) {
|
||||
t.Fatalf("error reading from dump: %v\n", err)
|
||||
}
|
||||
break loop
|
||||
}
|
||||
if want, got := value, TheSettings.GetStringOrDefault(key, "SomeInvalidDefault"); want != got {
|
||||
t.Fatalf("error: wanted key %q=%q; got %q\n", key, want, got)
|
||||
}
|
||||
}
|
||||
badKey := "some new key"
|
||||
badValue := "some invalid value"
|
||||
if want, got := badValue, TheSettings.GetStringOrDefault(badKey, badValue); want != got {
|
||||
t.Fatalf("error: wanted key %q=%q; got %q\n", badKey, want, got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetBoolOrDefault(t *testing.T) {
|
||||
key, value := "some bool value", "on"
|
||||
TheSettings.SetKeyValue(key, value)
|
||||
if want, got := true, TheSettings.GetBoolOrDefault(key, false); want != got {
|
||||
t.Fatalf("error: wanted %q=%v; got %v\n", key, want, got)
|
||||
}
|
||||
value = "shark"
|
||||
TheSettings.SetKeyValue(key, value)
|
||||
if want, got := false, TheSettings.GetBoolOrDefault(key, false); want != got {
|
||||
t.Fatalf("error: wanted %q=%v; got %v\n", key, want, got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetDurationOrDefault(t *testing.T) {
|
||||
key, value := "some duration value", "10s"
|
||||
TheSettings.SetKeyValue(key, value)
|
||||
if want, got := time.Second*10, TheSettings.GetDurationOrDefault(key, time.Minute*10); want != got {
|
||||
t.Fatalf("error: wanted %q=%s; got %s\n", key, want, got)
|
||||
}
|
||||
value = "loud"
|
||||
TheSettings.SetKeyValue(key, value)
|
||||
if want, got := time.Minute*10, TheSettings.GetDurationOrDefault(key, time.Minute*10); want != got {
|
||||
t.Fatalf("error: wanted %q=%s; got %s\n", key, want, got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetIntOrDefault(t *testing.T) {
|
||||
key, value := "some int value", "10"
|
||||
TheSettings.SetKeyValue(key, value)
|
||||
if want, got := 10, TheSettings.GetIntOrDefault(key, 200); want != got {
|
||||
t.Fatalf("error: wanted %q=%d; got %d\n", key, want, got)
|
||||
}
|
||||
value = "cat"
|
||||
TheSettings.SetKeyValue(key, value)
|
||||
if want, got := 200, TheSettings.GetIntOrDefault(key, 200); want != got {
|
||||
t.Fatalf("error: wanted default value %d for bad key; got %d\n", want, got)
|
||||
}
|
||||
if want, got := 200, TheSettings.GetIntOrDefault("some fake bad key", 200); want != got {
|
||||
t.Fatalf("error: wanted default value %d for bad key; got %d\n", want, got)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user