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) } }