88 lines
2.0 KiB
Go
88 lines
2.0 KiB
Go
package server
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"local/s2sa/s2sa/logg"
|
|
"local/s2sa/s2sa/server/router"
|
|
"local/s2sa/s2sa/services"
|
|
"local/s2sa/s2sa/storage"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestServerStart(t *testing.T) {
|
|
server, _, _ := mockServer()
|
|
|
|
checked := false
|
|
if err := server.Add("/hello/world", func(_ http.ResponseWriter, _ *http.Request) {
|
|
checked = true
|
|
}); err != nil {
|
|
t.Fatalf("cannot add route: %v", err)
|
|
}
|
|
|
|
go func() {
|
|
if err := server.Run(); err != nil {
|
|
t.Fatalf("err running server: %v", err)
|
|
}
|
|
}()
|
|
|
|
if resp, err := http.Get("http://localhost" + server.addr + "/hello/world"); err != nil {
|
|
t.Errorf("failed to get: %v", err)
|
|
} else if resp.StatusCode != 200 {
|
|
t.Errorf("wrong status: %v", resp.StatusCode)
|
|
} else if !checked {
|
|
t.Errorf("didnt hit handler")
|
|
}
|
|
}
|
|
|
|
func mockServer() (*Server, string, string) {
|
|
f, _ := os.Open(os.DevNull)
|
|
logg.ConfigFile(f)
|
|
portServer := httptest.NewServer(nil)
|
|
port := strings.Split(portServer.URL, ":")[2]
|
|
portServer.Close()
|
|
s := &Server{
|
|
router: router.New(),
|
|
db: services.New(storage.NewMap()),
|
|
authdb: services.New(storage.NewMap()),
|
|
addr: ":" + port,
|
|
}
|
|
s.authdb.Register(serverNS)
|
|
if err := s.Routes(); err != nil {
|
|
panic(fmt.Sprintf("cannot initiate server routes; %v", err))
|
|
}
|
|
|
|
defaultName := "name"
|
|
if err := s.db.Register(defaultName); err != nil {
|
|
panic(fmt.Sprintf("cannot register: %v", err))
|
|
}
|
|
token, err := s.db.New("name", "to")
|
|
if err != nil {
|
|
panic(fmt.Sprintf("cannot generate: %v", err))
|
|
}
|
|
defaultAccessor := token.Accessor
|
|
return s, defaultName, defaultAccessor
|
|
}
|
|
|
|
func TestServerAdd(t *testing.T) {
|
|
server, _, _ := mockServer()
|
|
path := "/hello/world"
|
|
if err := server.Add(path, echoHTTP); err != nil {
|
|
t.Fatalf("cannot add path: %v", err)
|
|
}
|
|
w := httptest.NewRecorder()
|
|
r, _ := http.NewRequest("GET", path, nil)
|
|
server.ServeHTTP(w, r)
|
|
b, err := ioutil.ReadAll(w.Body)
|
|
if err != nil {
|
|
t.Fatalf("cannot read body: %v", err)
|
|
}
|
|
if string(b) != path {
|
|
t.Errorf("cannot hit endpoint: %s", b)
|
|
}
|
|
}
|