moth/cmd/mothd/state_test.go

100 lines
2.1 KiB
Go
Raw Normal View History

2019-12-01 18:58:09 -07:00
package main
import (
2019-12-01 20:53:13 -07:00
"bytes"
2019-12-01 18:58:09 -07:00
"os"
"testing"
2020-08-18 17:04:23 -06:00
"time"
2020-08-14 20:26:04 -06:00
"github.com/spf13/afero"
2019-12-01 18:58:09 -07:00
)
2020-08-17 17:43:57 -06:00
func NewTestState() *State {
s := NewState(new(afero.MemMapFs))
2020-08-18 17:04:23 -06:00
s.refresh()
2020-08-17 17:43:57 -06:00
return s
}
2019-12-01 18:58:09 -07:00
func TestState(t *testing.T) {
2020-08-17 17:43:57 -06:00
s := NewTestState()
2019-12-01 18:58:09 -07:00
mustExist := func(path string) {
2020-08-17 17:43:57 -06:00
_, err := s.Fs.Stat(path)
2019-12-01 18:58:09 -07:00
if os.IsNotExist(err) {
t.Errorf("File %s does not exist", path)
}
}
2019-12-01 20:53:13 -07:00
pl := s.PointsLog()
if len(pl) != 0 {
t.Errorf("Empty points log is not empty")
}
2019-12-01 20:47:46 -07:00
2019-12-01 18:58:09 -07:00
mustExist("initialized")
mustExist("enabled")
mustExist("hours")
2019-12-01 20:53:13 -07:00
2020-08-17 17:43:57 -06:00
teamIDsBuf, err := afero.ReadFile(s.Fs, "teamids.txt")
2019-12-01 20:47:46 -07:00
if err != nil {
2019-12-01 20:53:13 -07:00
t.Errorf("Reading teamids.txt: %v", err)
2019-12-01 20:47:46 -07:00
}
2019-12-01 20:53:13 -07:00
2020-08-17 17:43:57 -06:00
teamIDs := bytes.Split(teamIDsBuf, []byte("\n"))
if (len(teamIDs) != 101) || (len(teamIDs[100]) > 0) {
t.Errorf("There weren't 100 teamIDs, there were %d", len(teamIDs))
2019-12-01 20:47:46 -07:00
}
2020-08-17 17:43:57 -06:00
teamID := string(teamIDs[0])
2019-12-01 20:53:13 -07:00
2019-12-01 20:47:46 -07:00
if err := s.SetTeamName("bad team ID", "bad team name"); err == nil {
2019-12-01 20:53:13 -07:00
t.Errorf("Setting bad team ID didn't raise an error")
2019-12-01 20:47:46 -07:00
}
2019-12-01 20:53:13 -07:00
2020-08-17 17:43:57 -06:00
if err := s.SetTeamName(teamID, "My Team"); err != nil {
2019-12-01 20:53:13 -07:00
t.Errorf("Setting team name: %v", err)
2019-12-01 20:47:46 -07:00
}
2019-12-07 21:17:13 -07:00
2019-12-05 21:50:43 -07:00
category := "poot"
points := 3928
2020-08-17 17:43:57 -06:00
s.AwardPoints(teamID, category, points)
2020-08-18 17:04:23 -06:00
s.refresh()
2019-12-07 21:17:13 -07:00
2019-12-05 21:50:43 -07:00
pl = s.PointsLog()
if len(pl) != 1 {
t.Errorf("After awarding points, points log has length %d", len(pl))
2020-08-17 17:43:57 -06:00
} else if (pl[0].TeamID != teamID) || (pl[0].Category != category) || (pl[0].Points != points) {
2019-12-05 21:50:43 -07:00
t.Errorf("Incorrect logged award %v", pl)
}
2019-12-07 21:17:13 -07:00
2020-08-17 17:43:57 -06:00
s.Fs.Remove("initialized")
2020-08-18 17:04:23 -06:00
s.refresh()
2019-12-07 21:17:13 -07:00
2019-12-05 21:54:32 -07:00
pl = s.PointsLog()
if len(pl) != 0 {
t.Errorf("After reinitialization, points log has length %d", len(pl))
}
2019-12-01 18:58:09 -07:00
}
2020-08-18 17:04:23 -06:00
func TestStateEvents(t *testing.T) {
s := NewTestState()
s.LogEvent("moo")
s.LogEventf("moo %d", 2)
if msg := <-s.eventStream; msg != "moo" {
t.Error("Wrong message from event stream", msg)
}
if msg := <-s.eventStream; msg != "moo 2" {
t.Error("Formatted event is wrong:", msg)
}
}
func TestStateMaintainer(t *testing.T) {
s := NewTestState()
go s.Maintain(2 * time.Second)
s.LogEvent("Hello!")
eventLog, _ := afero.ReadFile(s.Fs, "event.log")
if len(eventLog) != 12 {
t.Error("Wrong event log length:", len(eventLog))
}
}