Initial commit
This commit is contained in:
commit
485c5a4a1d
33 changed files with 5407 additions and 0 deletions
128
checker/interactive_test.go
Normal file
128
checker/interactive_test.go
Normal file
|
|
@ -0,0 +1,128 @@
|
|||
//go:build standalone
|
||||
|
||||
package checker
|
||||
|
||||
import (
|
||||
"net/http/httptest"
|
||||
"net/url"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func formRequest(values url.Values) *httptest.ResponseRecorder {
|
||||
_ = values
|
||||
return httptest.NewRecorder()
|
||||
}
|
||||
|
||||
func TestRenderForm_HasAllFields(t *testing.T) {
|
||||
fields := (&smtpProvider{}).RenderForm()
|
||||
got := map[string]bool{}
|
||||
for _, f := range fields {
|
||||
got[f.Id] = true
|
||||
}
|
||||
for _, want := range []string{"domain", "helo_name", "timeout", "test_null_sender", "test_postmaster", "test_open_relay", "test_probe_address"} {
|
||||
if !got[want] {
|
||||
t.Errorf("missing field %q", want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseForm_Defaults(t *testing.T) {
|
||||
v := url.Values{"domain": {"example.com"}}
|
||||
r := httptest.NewRequest("POST", "/", strings.NewReader(v.Encode()))
|
||||
r.Header.Set("Content-Type", "application/x-www-form-urlencoded")
|
||||
opts, err := (&smtpProvider{}).ParseForm(r)
|
||||
if err != nil {
|
||||
t.Fatalf("ParseForm: %v", err)
|
||||
}
|
||||
if opts["domain"] != "example.com" {
|
||||
t.Errorf("domain: %v", opts["domain"])
|
||||
}
|
||||
// Submitted form with no checkbox checks → false (per parseBool sentinel).
|
||||
if opts["test_null_sender"].(bool) {
|
||||
t.Error("expected test_null_sender=false on submitted form without checkbox")
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseForm_TrimsAndStripsTrailingDot(t *testing.T) {
|
||||
v := url.Values{"domain": {" example.com. "}}
|
||||
r := httptest.NewRequest("POST", "/", strings.NewReader(v.Encode()))
|
||||
r.Header.Set("Content-Type", "application/x-www-form-urlencoded")
|
||||
opts, err := (&smtpProvider{}).ParseForm(r)
|
||||
if err != nil {
|
||||
t.Fatalf("ParseForm: %v", err)
|
||||
}
|
||||
if opts["domain"] != "example.com" {
|
||||
t.Errorf("expected normalized domain, got %v", opts["domain"])
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseForm_RejectsEmptyDomain(t *testing.T) {
|
||||
r := httptest.NewRequest("POST", "/", strings.NewReader(""))
|
||||
r.Header.Set("Content-Type", "application/x-www-form-urlencoded")
|
||||
if _, err := (&smtpProvider{}).ParseForm(r); err == nil {
|
||||
t.Fatal("expected error on empty domain")
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseForm_RejectsNonNumericTimeout(t *testing.T) {
|
||||
v := url.Values{"domain": {"example.com"}, "timeout": {"banana"}}
|
||||
r := httptest.NewRequest("POST", "/", strings.NewReader(v.Encode()))
|
||||
r.Header.Set("Content-Type", "application/x-www-form-urlencoded")
|
||||
if _, err := (&smtpProvider{}).ParseForm(r); err == nil {
|
||||
t.Fatal("expected error on non-numeric timeout")
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseForm_PassesThroughCheckboxes(t *testing.T) {
|
||||
v := url.Values{
|
||||
"domain": {"example.com"},
|
||||
"timeout": {"5"},
|
||||
"helo_name": {"mx-checker.example.com"},
|
||||
"test_null_sender": {"on"},
|
||||
"test_postmaster": {"true"},
|
||||
"test_open_relay": {"yes"},
|
||||
"test_probe_address": {"postmaster@example.org"},
|
||||
}
|
||||
r := httptest.NewRequest("POST", "/", strings.NewReader(v.Encode()))
|
||||
r.Header.Set("Content-Type", "application/x-www-form-urlencoded")
|
||||
opts, err := (&smtpProvider{}).ParseForm(r)
|
||||
if err != nil {
|
||||
t.Fatalf("ParseForm: %v", err)
|
||||
}
|
||||
if opts["timeout"].(float64) != 5 {
|
||||
t.Errorf("timeout: %v", opts["timeout"])
|
||||
}
|
||||
if !opts["test_null_sender"].(bool) || !opts["test_postmaster"].(bool) || !opts["test_open_relay"].(bool) {
|
||||
t.Errorf("checkboxes: %+v", opts)
|
||||
}
|
||||
if opts["helo_name"] != "mx-checker.example.com" {
|
||||
t.Errorf("helo_name: %v", opts["helo_name"])
|
||||
}
|
||||
if opts["test_probe_address"] != "postmaster@example.org" {
|
||||
t.Errorf("probe addr: %v", opts["test_probe_address"])
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseBool_DefaultWhenNotSubmitted(t *testing.T) {
|
||||
r := httptest.NewRequest("GET", "/?", nil)
|
||||
if err := r.ParseForm(); err != nil {
|
||||
t.Fatalf("ParseForm: %v", err)
|
||||
}
|
||||
if !parseBool(r, "feature", true) {
|
||||
t.Error("missing key on non-submitted form should yield default")
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseBool_FalsyValues(t *testing.T) {
|
||||
cases := []string{"0", "false", "off", "no", "FALSE"}
|
||||
for _, c := range cases {
|
||||
r := httptest.NewRequest("GET", "/?domain=x&feature="+c, nil)
|
||||
if err := r.ParseForm(); err != nil {
|
||||
t.Fatalf("parse: %v", err)
|
||||
}
|
||||
if parseBool(r, "feature", true) {
|
||||
t.Errorf("value %q should be false", c)
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue