/
functional_test.go
106 lines (96 loc) · 2.98 KB
/
functional_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package main
import (
"github.com/GlenKelley/battleref/git"
"github.com/GlenKelley/battleref/server"
"github.com/GlenKelley/battleref/testing"
"github.com/GlenKelley/battleref/tournament"
"github.com/GlenKelley/battleref/web"
"testing"
"time"
)
type JSONBody map[string]interface{}
func TestInitToRun2014(test *testing.T) {
t := (*testutil.T)(test)
initToRun(t, "8081", tournament.CategoryBattlecode2014)
}
func TestInitToRun2015(test *testing.T) {
t := (*testutil.T)(test)
initToRun(t, "8082", tournament.CategoryBattlecode2015)
}
func TestInitToRun2016(test *testing.T) {
t := (*testutil.T)(test)
initToRun(t, "8083", tournament.CategoryBattlecode2016)
}
func initToRun(t *testutil.T, port string, category tournament.TournamentCategory) {
if webserver, err := CreateServer(server.Properties{
":memory:",
port,
":temp:",
nil,
".",
}); err != nil {
t.FailNow()
} else {
defer webserver.Tournament.GitHost.Cleanup()
if err := webserver.Tournament.InstallDefaultMaps(webserver.Properties.ArenaResourcePath(), category); err != nil {
t.ErrorNow(err)
}
go webserver.Serve()
//Race condition of server not starting
time.Sleep(time.Millisecond)
if commit, err := CreatePlayer(port, "playerFoo", category); err != nil {
t.ErrorNow(err)
} else if maps, err := GetMaps(port, category); err != nil {
t.ErrorNow(err)
} else if len(maps) == 0 {
t.ErrorNowf("No default maps")
} else {
t.CheckError(RunMatch(port, "playerFoo", "playerFoo", commit, commit, maps[0], category))
}
}
}
func CreatePlayer(port, name string, category tournament.TournamentCategory) (string, error) {
var response struct {
Data struct {
CommitHash string `json:"commit_hash"`
RepoURL string `json:"repo_url"`
} `json:"data"`
}
if _, pubKey, err := testutil.CreateKeyPair(); err != nil {
return "", err
} else if err := web.SendPostJson("http://localhost:"+port+"/register", web.JsonBody{"name": name, "public_key": pubKey, "category": string(category)}, &response); err != nil {
return "", err
} else if repo, err := (git.TempRemote{}).CheckoutRepository(response.Data.RepoURL); err != nil {
return "", err
} else {
defer repo.Delete()
return response.Data.CommitHash, nil
}
}
func GetMaps(port string, category tournament.TournamentCategory) ([]string, error) {
var response struct {
Data struct {
Maps []string `json:"maps"`
} `json:"data"`
}
if err := web.SendGetJson("http://localhost:"+port+"/maps", web.JsonBody{"category": string(category)}, &response); err != nil {
return nil, err
} else {
return response.Data.Maps, nil
}
}
func RunMatch(port, name, name2, commit, commit2, mapName string, category tournament.TournamentCategory) error {
response := struct{}{}
if err := web.SendPostJson("http://localhost:"+port+"/match/run", web.JsonBody{
"player1": name,
"player2": name2,
"commit1": commit,
"commit2": commit2,
"category": string(category),
"map": mapName,
}, &response); err != nil {
return err
} else {
return nil
}
}