github.com/stampzilla/stampzilla-go@v2.0.0-rc9+incompatible/nodes/stampzilla-server/e2e/setup_test.go (about) 1 package main 2 3 import ( 4 "io" 5 "io/ioutil" 6 "log" 7 "net/http" 8 "net/http/httptest" 9 "os" 10 "strings" 11 "testing" 12 "time" 13 14 "github.com/stampzilla/stampzilla-go/nodes/stampzilla-server/models" 15 "github.com/stampzilla/stampzilla-go/nodes/stampzilla-server/servermain" 16 "github.com/stampzilla/stampzilla-go/pkg/node" 17 ) 18 19 func makeRequest(t *testing.T, handler http.Handler, method, url string, body io.Reader) *httptest.ResponseRecorder { 20 req := httptest.NewRequest("GET", "http://localhost/ca.crt", body) 21 w := httptest.NewRecorder() 22 handler.ServeHTTP(w, req) 23 return w 24 } 25 26 func setupWebsocketTest(t *testing.T) (*servermain.Main, *node.Node, func()) { 27 main, cleanup := setupServer(t) 28 insecure := httptest.NewServer(main.HTTPServer) 29 30 secure := httptest.NewUnstartedServer(main.TLSServer) 31 secure.TLS = main.TLSConfig() 32 secure.StartTLS() 33 34 insecureURL := strings.Split(strings.TrimPrefix(insecure.URL, "http://"), ":") 35 secureURL := strings.Split(strings.TrimPrefix(secure.URL, "https://"), ":") 36 37 // Server will tell the node its TLS port after successfull certificate request 38 main.Config.TLSPort = secureURL[1] 39 40 os.Setenv("STAMPZILLA_HOST", insecureURL[0]) 41 os.Setenv("STAMPZILLA_PORT", insecureURL[1]) 42 43 node := node.New("example") 44 45 return main, node, func() { 46 cleanup() 47 insecure.Close() 48 secure.Close() 49 } 50 } 51 52 func setupServer(t *testing.T) (*servermain.Main, func()) { 53 config := &models.Config{ 54 UUID: "123", 55 Name: "testserver", 56 } 57 server := servermain.New(config) 58 59 prevDir, err := os.Getwd() 60 if err != nil { 61 t.Fatal(err) 62 } 63 dir, err := ioutil.TempDir("", "e2etest") 64 if err != nil { 65 log.Fatal(err) 66 } 67 os.Chdir(dir) 68 69 server.Init() 70 server.HTTPServer.Init() 71 server.TLSServer.Init() 72 73 cleanUp := func() { 74 os.Chdir(prevDir) 75 err := os.RemoveAll(dir) // clean up 76 if err != nil { 77 t.Fatal(err) 78 } 79 } 80 return server, cleanUp 81 } 82 83 func waitFor(t *testing.T, timeout time.Duration, msg string, ok func() bool) { 84 end := time.Now().Add(timeout) 85 for { 86 if end.Before(time.Now()) { 87 t.Errorf("timeout waiting for: %s", msg) 88 return 89 } 90 time.Sleep(10 * time.Millisecond) 91 if ok() { 92 return 93 } 94 } 95 } 96 97 func acceptCertificateRequest(t *testing.T, main *servermain.Main) { 98 go func() { 99 waitFor(t, 2*time.Second, "nodes should be 1", func() bool { 100 return len(main.Store.GetRequests()) == 1 101 }) 102 r := main.Store.GetRequests() 103 main.Store.AcceptRequest(r[0].Connection) 104 }() 105 }