mirror of
https://github.com/mjl-/mox.git
synced 2025-06-28 01:08:15 +03:00

Intended for future use with chatmail servers. Standard email ports may be blocked on some networks, while the HTTPS port may be accessible. This is a squashed commit of PR #255 by s0ph0s-dog.
76 lines
3.2 KiB
Go
76 lines
3.2 KiB
Go
package http
|
|
|
|
import (
|
|
"bytes"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/mjl-/mox/mox-"
|
|
)
|
|
|
|
func TestServeHTTP(t *testing.T) {
|
|
os.RemoveAll("../testdata/web/data")
|
|
mox.ConfigStaticPath = filepath.FromSlash("../testdata/web/mox.conf")
|
|
mox.ConfigDynamicPath = filepath.Join(filepath.Dir(mox.ConfigStaticPath), "domains.conf")
|
|
mox.MustLoadConfig(true, false)
|
|
|
|
portSrvs := portServes("local", mox.Conf.Static.Listeners["local"])
|
|
srv := portSrvs[80]
|
|
|
|
test := func(method, target string, expCode int, expContent string, expHeaders map[string]string) {
|
|
t.Helper()
|
|
|
|
req := httptest.NewRequest(method, target, nil)
|
|
rw := httptest.NewRecorder()
|
|
rw.Body = &bytes.Buffer{}
|
|
srv.ServeHTTP(rw, req)
|
|
resp := rw.Result()
|
|
if resp.StatusCode != expCode {
|
|
t.Errorf("got statuscode %d, expected %d", resp.StatusCode, expCode)
|
|
}
|
|
if expContent != "" {
|
|
s := rw.Body.String()
|
|
if s != expContent {
|
|
t.Errorf("got response data %q, expected %q", s, expContent)
|
|
}
|
|
}
|
|
for k, v := range expHeaders {
|
|
if xv := resp.Header.Get(k); xv != v {
|
|
t.Errorf("got %q for header %q, expected %q", xv, k, v)
|
|
}
|
|
}
|
|
}
|
|
|
|
test("GET", "http://mta-sts.mox.example/.well-known/mta-sts.txt", http.StatusOK, "version: STSv1\nmode: enforce\nmax_age: 86400\nmx: mox.example\n", nil)
|
|
test("GET", "http://mox.example/.well-known/mta-sts.txt", http.StatusNotFound, "", nil) // mta-sts endpoint not in this domain.
|
|
test("GET", "http://mta-sts.mox.example/static/", http.StatusNotFound, "", nil) // static not served on this domain.
|
|
test("GET", "http://mta-sts.mox.example/other", http.StatusNotFound, "", nil)
|
|
test("GET", "http://mox.example/static/", http.StatusOK, "html\n", map[string]string{"X-Test": "mox"}) // index.html is served
|
|
test("GET", "http://mox.example/static/index.html", http.StatusOK, "html\n", map[string]string{"X-Test": "mox"})
|
|
test("GET", "http://mox.example/static/dir/", http.StatusOK, "", map[string]string{"X-Test": "mox"}) // Dir listing.
|
|
test("GET", "http://mox.example/other", http.StatusNotFound, "", nil)
|
|
|
|
// Webmail on IP, localhost, mail host, clientsettingsdomain, not others.
|
|
test("GET", "http://127.0.0.1/webmail/", http.StatusOK, "", nil)
|
|
test("GET", "http://localhost/webmail/", http.StatusOK, "", nil)
|
|
test("GET", "http://mox.example/webmail/", http.StatusOK, "", nil)
|
|
test("GET", "http://mail.mox.example/webmail/", http.StatusOK, "", nil)
|
|
test("GET", "http://mail.other.example/webmail/", http.StatusNotFound, "", nil)
|
|
test("GET", "http://remotehost/webmail/", http.StatusNotFound, "", nil)
|
|
|
|
// admin on IP, localhost, mail host, not clientsettingsdomain.
|
|
test("GET", "http://127.0.0.1/admin/", http.StatusOK, "", nil)
|
|
test("GET", "http://localhost/admin/", http.StatusOK, "", nil)
|
|
test("GET", "http://mox.example/admin/", http.StatusPermanentRedirect, "", nil) // Override by WebHandler.
|
|
test("GET", "http://mail.mox.example/admin/", http.StatusNotFound, "", nil)
|
|
|
|
// account is off.
|
|
test("GET", "http://127.0.0.1/", http.StatusNotFound, "", nil)
|
|
test("GET", "http://localhost/", http.StatusNotFound, "", nil)
|
|
test("GET", "http://mox.example/", http.StatusNotFound, "", nil)
|
|
test("GET", "http://mail.mox.example/", http.StatusNotFound, "", nil)
|
|
}
|