66 lines
1.9 KiB
Go
66 lines
1.9 KiB
Go
package server
|
|
|
|
import (
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
// newTestServer is a server on a fresh database with an admin signed in (the
|
|
// cookie) and one machine, x1.
|
|
func newTestServer(t *testing.T) (*Server, *http.Cookie) {
|
|
t.Helper()
|
|
db, err := OpenDB(t.TempDir() + "/t.db")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
s, err := New(Options{DB: db, DistDir: t.TempDir()})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
hash, _ := hashPassword("Passw0rd12345")
|
|
if err := db.CreateAdmin("adm", hash); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
_ = db.SetConfig(cfgSetupDone, "1")
|
|
a, _ := db.AdminByUsername("adm")
|
|
if err := db.CreateSession("sid-test", a.ID, sessionTTL); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := db.CreateAgent(Agent{ID: "x1", Name: "t", Hostname: "h", OS: "linux", Arch: "amd64", TokenHash: "x"}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
return s, &http.Cookie{Name: sessionCookie, Value: "sid-test"}
|
|
}
|
|
|
|
func get(t *testing.T, s *Server, c *http.Cookie, path string) *httptest.ResponseRecorder {
|
|
t.Helper()
|
|
req := httptest.NewRequest(http.MethodGet, path, nil)
|
|
req.AddCookie(c)
|
|
w := httptest.NewRecorder()
|
|
s.Handler().ServeHTTP(w, req)
|
|
return w
|
|
}
|
|
|
|
func TestFragmentHasNoChrome(t *testing.T) {
|
|
s, cookie := newTestServer(t)
|
|
w := get(t, s, cookie, "/settings?frag=1")
|
|
body := w.Body.String()
|
|
if w.Code != 200 || strings.Contains(body, "<html") || strings.Contains(body, "topbar") {
|
|
t.Fatalf("fragment: code %d, has chrome: %q", w.Code, body[:min(200, len(body))])
|
|
}
|
|
if !strings.Contains(body, `data-module="settings"`) {
|
|
t.Fatalf("fragment has no module root")
|
|
}
|
|
}
|
|
|
|
func TestShellRoutes(t *testing.T) {
|
|
s, cookie := newTestServer(t)
|
|
for _, p := range []string{"/", "/terminal", "/settings", "/agents/x1/files", "/agents/x1/terminal"} {
|
|
if w := get(t, s, cookie, p); !strings.Contains(w.Body.String(), `id="app"`) {
|
|
t.Errorf("%s: not the shell (code %d)", p, w.Code)
|
|
}
|
|
}
|
|
}
|