battlemap - battlemap_test.go
1 package battlemap
2
3 import (
4 "flag"
5 "fmt"
6 "net/http"
7 "net/http/httptest"
8 "os"
9 "path/filepath"
10 "strings"
11 "testing"
12
13 "vimagination.zapto.org/keystore"
14 )
15
16 var (
17 srv *httptest.Server
18 battlemap Battlemap
19 dir = flag.String("httptest.dir", "./test/", "server dir")
20 )
21
22 func TestMain(m *testing.M) {
23 for _, arg := range os.Args {
24 if strings.HasPrefix(arg, "-httptest.serve=") {
25 pluginTest := flag.Bool("plugintest", false, "disable cached plugins for easier testing")
26 flag.Parse()
27 if err := battlemap.initModules(*dir, nil); err != nil {
28 fmt.Fprintln(os.Stderr, err)
29 os.Exit(1)
30 }
31 if *pluginTest {
32 var pd keystore.String
33 battlemap.config.Get("PluginsDir", &pd)
34 battlemap.plugins.Handler = http.FileServer(http.Dir(filepath.Join(battlemap.config.BaseDir, string(pd))))
35 }
36 battlemap.initMux(http.FileServer(http.Dir("./internal/static")))
37 mux := http.NewServeMux()
38 mux.Handle("/", &battlemap)
39 srv := httptest.NewUnstartedServer(mux)
40 srv.Start()
41 }
42 }
43 dataDir, err := os.MkdirTemp("", "battlemap-test")
44 if err != nil {
45 fmt.Fprintf(os.Stderr, "error creating temp dir: %s", err)
46 os.Exit(1)
47 }
48 r := testMain(m, dataDir)
49 os.RemoveAll(dataDir)
50 os.Exit(r)
51 }
52
53 func testMain(m *testing.M, dataDir string) int {
54 if err := battlemap.initModules(dataDir, nil); err != nil {
55 fmt.Fprintln(os.Stderr, err)
56 return 1
57 }
58 battlemap.initMux(index)
59 srv = httptest.NewServer(&battlemap)
60 r := m.Run()
61 srv.Close()
62 return r
63 }
64