Tooling
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
package studio
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// The one property share.go promises: another origin can read, and cannot do anything else.
|
||||
func TestCORSIsReadOnly(t *testing.T) {
|
||||
inner := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
w.WriteHeader(http.StatusOK)
|
||||
})
|
||||
h := readOnlyCORS(inner)
|
||||
|
||||
for _, tc := range []struct {
|
||||
method string
|
||||
want string
|
||||
}{
|
||||
{http.MethodGet, "*"},
|
||||
{http.MethodHead, "*"},
|
||||
{http.MethodPost, ""},
|
||||
{http.MethodOptions, ""},
|
||||
{http.MethodDelete, ""},
|
||||
} {
|
||||
rec := httptest.NewRecorder()
|
||||
h.ServeHTTP(rec, httptest.NewRequest(tc.method, "/api/legend", nil))
|
||||
if got := rec.Header().Get("Access-Control-Allow-Origin"); got != tc.want {
|
||||
t.Errorf("%s: Access-Control-Allow-Origin = %q, want %q", tc.method, got, tc.want)
|
||||
}
|
||||
// No preflight is answered: a browser needs Allow-Methods to send a cross-origin POST, and it never
|
||||
// gets one.
|
||||
if got := rec.Header().Get("Access-Control-Allow-Methods"); got != "" {
|
||||
t.Errorf("%s: Access-Control-Allow-Methods = %q, want none", tc.method, got)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestServeJSONFileIsTheFileOnDisk(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
path := filepath.Join(dir, "legend.json")
|
||||
// Commentary and formatting are the point: what Orogen reads is the text the author wrote.
|
||||
text := "{\n \"_comment\": \"kept\",\n \"classes\": []\n}\n"
|
||||
if err := os.WriteFile(path, []byte(text), 0o644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
rec := httptest.NewRecorder()
|
||||
serveJSONFile(rec, path)
|
||||
if rec.Code != http.StatusOK {
|
||||
t.Fatalf("status %d", rec.Code)
|
||||
}
|
||||
if got := rec.Body.String(); got != text {
|
||||
t.Errorf("body changed:\n%s\nwant\n%s", got, text)
|
||||
}
|
||||
if ct := rec.Header().Get("Content-Type"); ct != "application/json" {
|
||||
t.Errorf("Content-Type %q", ct)
|
||||
}
|
||||
|
||||
// A planet with no overlay legend has "" for its path, and that is a 404 rather than a read of "".
|
||||
rec = httptest.NewRecorder()
|
||||
serveJSONFile(rec, "")
|
||||
if rec.Code != http.StatusNotFound {
|
||||
t.Errorf("empty path: status %d, want 404", rec.Code)
|
||||
}
|
||||
rec = httptest.NewRecorder()
|
||||
serveJSONFile(rec, filepath.Join(dir, "missing.json"))
|
||||
if rec.Code != http.StatusNotFound {
|
||||
t.Errorf("missing file: status %d, want 404", rec.Code)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user