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  }