190 lines
6.1 KiB
Go
190 lines
6.1 KiB
Go
package main
|
|
|
|
import (
|
|
"testing"
|
|
"fmt"
|
|
"runtime/pprof"
|
|
"os"
|
|
"time"
|
|
)
|
|
|
|
type vex_tester graph_tester
|
|
|
|
func TestNewMemberAdd(t *testing.T) {
|
|
name := "Noah"
|
|
|
|
member := NewMember(name)
|
|
root_event := NewEvent("", "", []Resource{member})
|
|
event_manager := NewEventManager(root_event, []Resource{member})
|
|
res := event_manager.FindResource(member.ID())
|
|
|
|
if res == nil {
|
|
t.Fatal("Failed to find member in event_manager")
|
|
}
|
|
|
|
if res.Name() != name || res.ID() != member.ID() {
|
|
t.Fatal("Name/ID of returned resource did not match")
|
|
}
|
|
}
|
|
|
|
func TestNewTeamAdd(t *testing.T) {
|
|
name_1 := "Noah"
|
|
name_2 := "Ben"
|
|
|
|
org := "6659"
|
|
team_id := "S"
|
|
|
|
member_1 := NewMember(name_1)
|
|
member_2 := NewMember(name_2)
|
|
|
|
team := NewTeam(org, team_id, []*Member{member_1, member_2})
|
|
|
|
root_event := NewEvent("", "", []Resource{team})
|
|
event_manager := NewEventManager(root_event, []Resource{member_1, member_2, team})
|
|
res := event_manager.FindResource(team.ID())
|
|
|
|
if res == nil {
|
|
t.Fatal("Failed to find team in event_manager")
|
|
}
|
|
|
|
if res.Name() != fmt.Sprintf("%s%s", org, team_id) || res.ID() != team.ID() {
|
|
t.Fatal("Name/ID of returned team did not match")
|
|
}
|
|
|
|
if res.Children()[0].ID() != member_1.ID() && res.Children()[1].ID() != member_1.ID() {
|
|
t.Fatal("Could not find member_1 in team")
|
|
}
|
|
|
|
if res.Children()[0].ID() != member_2.ID() && res.Children()[1].ID() != member_2.ID() {
|
|
t.Fatal("Could not find member_2 in team")
|
|
}
|
|
|
|
res = event_manager.FindResource(member_1.ID())
|
|
|
|
if res == nil {
|
|
t.Fatal("Failed to find member_1 in event_manager")
|
|
}
|
|
|
|
if res.Name() != name_1 || res.ID() != member_1.ID() {
|
|
t.Fatal("Name/ID of returned member_1 did not match")
|
|
}
|
|
}
|
|
|
|
func TestNewAllianceAdd(t *testing.T) {
|
|
name_1 := "Noah"
|
|
name_2 := "Ben"
|
|
|
|
org_1 := "6659"
|
|
team_id_1 := "S"
|
|
|
|
org_2 := "210"
|
|
team_id_2 := "Y"
|
|
|
|
member_1 := NewMember(name_1)
|
|
member_2 := NewMember(name_2)
|
|
|
|
team_1 := NewTeam(org_1, team_id_1, []*Member{member_1})
|
|
team_2 := NewTeam(org_2, team_id_2, []*Member{member_2})
|
|
|
|
alliance := NewAlliance(team_1, team_2)
|
|
|
|
root_event := NewEvent("", "", []Resource{alliance})
|
|
event_manager := NewEventManager(root_event, []Resource{member_1, member_2, team_1, team_2, alliance})
|
|
res := event_manager.FindResource(alliance.ID())
|
|
|
|
if res == nil {
|
|
t.Fatal("Failed to find alliance in event_manager")
|
|
}
|
|
|
|
if res.Name() != fmt.Sprintf("Alliance %s/%s", team_1.Name(), team_2.Name()) || res.ID() != alliance.ID() {
|
|
t.Fatal("Name/ID of returned alliance did not match")
|
|
}
|
|
}
|
|
|
|
func TestNewMatch(t *testing.T) {
|
|
name_1 := "Noah"
|
|
name_2 := "Ben"
|
|
name_3 := "Justin"
|
|
name_4 := "Ian"
|
|
|
|
org_1 := "6659"
|
|
org_2 := "210"
|
|
|
|
team_id_1 := "S"
|
|
team_id_2 := "Y"
|
|
|
|
arena_name := "Center Arena"
|
|
|
|
member_1 := NewMember(name_1)
|
|
member_2 := NewMember(name_2)
|
|
|
|
member_3 := NewMember(name_3)
|
|
member_4 := NewMember(name_4)
|
|
|
|
team_1 := NewTeam(org_1, team_id_1, []*Member{member_1})
|
|
team_2 := NewTeam(org_1, team_id_2, []*Member{member_2})
|
|
|
|
team_3 := NewTeam(org_2, team_id_1, []*Member{member_3})
|
|
team_4 := NewTeam(org_2, team_id_2, []*Member{member_4})
|
|
|
|
alliance_1 := NewAlliance(team_1, team_2)
|
|
alliance_2 := NewAlliance(team_3, team_4)
|
|
|
|
arena := NewVirtualArena(arena_name)
|
|
|
|
match := NewMatch(alliance_1, alliance_2, arena)
|
|
match_c := match.UpdateChannel()
|
|
root_event := NewEventQueue("root_event", "", []Resource{})
|
|
r := root_event.DoneResource()
|
|
|
|
event_manager := NewEventManager(root_event, []Resource{member_1, member_2, member_3, member_4, team_1, team_2, team_3, team_4, alliance_1, alliance_2, arena})
|
|
event_manager.AddEvent(root_event, match, NewEventQueueInfo(1))
|
|
|
|
go func() {
|
|
time.Sleep(time.Second * 20)
|
|
if r.Owner() != nil {
|
|
pprof.Lookup("goroutine").WriteTo(os.Stdout, 1)
|
|
AbortEvent(root_event)
|
|
}
|
|
}()
|
|
|
|
go func(match_c chan GraphSignal) {
|
|
(*graph_tester)(t).CheckForValue(match_c, "no update to match after starting 1")
|
|
(*graph_tester)(t).CheckForNone(match_c, "update to match after starting 2")
|
|
SendUpdate(match, NewSignal(nil, "queue_autonomous"))
|
|
(*graph_tester)(t).CheckForValue(match_c, "no update to match after queueing autonomous 1")
|
|
(*graph_tester)(t).CheckForValue(match_c, "no update to match after queueing autonomous 2")
|
|
(*graph_tester)(t).CheckForNone(match_c, "update to match after queueing autonomous 3")
|
|
auton_signal := NewSignal(nil, "start_autonomous")
|
|
auton_signal.time = time.Now()
|
|
SendUpdate(match, auton_signal)
|
|
(*graph_tester)(t).CheckForValue(match_c, "no update to match after starting autonomous 1")
|
|
(*graph_tester)(t).CheckForValue(match_c, "no update to match after starting autonomous 2")
|
|
(*graph_tester)(t).CheckForNone(match_c, "update to match after starting autonomous 3")
|
|
time.Sleep(TEMP_AUTON_TIME)
|
|
time.Sleep(time.Millisecond * 100)
|
|
(*graph_tester)(t).CheckForValue(match_c, "no update to match after ending autonomous 1")
|
|
(*graph_tester)(t).CheckForNone(match_c, "update to match after ending autonomous 2")
|
|
SendUpdate(match, NewSignal(nil, "queue_driver"))
|
|
(*graph_tester)(t).CheckForValue(match_c, "no update to match after queueing driver 1")
|
|
(*graph_tester)(t).CheckForValue(match_c, "no update to match after queueing driver 2")
|
|
(*graph_tester)(t).CheckForNone(match_c, "update to match after queueing driver 3")
|
|
driver_signal := NewSignal(nil, "start_driver")
|
|
driver_signal.time = time.Now()
|
|
SendUpdate(match, driver_signal)
|
|
(*graph_tester)(t).CheckForValue(match_c, "no update to match after starting driver 1")
|
|
(*graph_tester)(t).CheckForValue(match_c, "no update to match after starting driver 2")
|
|
(*graph_tester)(t).CheckForNone(match_c, "update to match after starting driver 3")
|
|
time.Sleep(TEMP_DRIVE_TIME)
|
|
time.Sleep(time.Millisecond * 100)
|
|
(*graph_tester)(t).CheckForValue(match_c, "no update to match after game done 1")
|
|
(*graph_tester)(t).CheckForValue(match_c, "no update to match after game done 2")
|
|
(*graph_tester)(t).CheckForNone(match_c, "update to match after game done 3")
|
|
}(match_c)
|
|
|
|
err := event_manager.Run()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|