mirror of
https://github.com/mjl-/mox.git
synced 2024-12-26 16:33:47 +03:00
111 lines
3.1 KiB
Go
111 lines
3.1 KiB
Go
package dmarcdb
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"path/filepath"
|
|
"reflect"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/mjl-/mox/dmarcrpt"
|
|
"github.com/mjl-/mox/dns"
|
|
"github.com/mjl-/mox/mox-"
|
|
)
|
|
|
|
var ctxbg = context.Background()
|
|
|
|
func TestDMARCDB(t *testing.T) {
|
|
mox.Shutdown = ctxbg
|
|
mox.ConfigStaticPath = "../testdata/dmarcdb/fake.conf"
|
|
mox.Conf.Static.DataDir = "."
|
|
|
|
dbpath := mox.DataDirPath("dmarcrpt.db")
|
|
os.MkdirAll(filepath.Dir(dbpath), 0770)
|
|
defer os.Remove(dbpath)
|
|
|
|
if err := Init(); err != nil {
|
|
t.Fatalf("init database: %s", err)
|
|
}
|
|
|
|
feedback := &dmarcrpt.Feedback{
|
|
ReportMetadata: dmarcrpt.ReportMetadata{
|
|
OrgName: "google.com",
|
|
Email: "noreply-dmarc-support@google.com",
|
|
ExtraContactInfo: "https://support.google.com/a/answer/2466580",
|
|
ReportID: "10051505501689795560",
|
|
DateRange: dmarcrpt.DateRange{
|
|
Begin: 1596412800,
|
|
End: 1596499199,
|
|
},
|
|
},
|
|
PolicyPublished: dmarcrpt.PolicyPublished{
|
|
Domain: "example.org",
|
|
ADKIM: "r",
|
|
ASPF: "r",
|
|
Policy: "reject",
|
|
SubdomainPolicy: "reject",
|
|
Percentage: 100,
|
|
},
|
|
Records: []dmarcrpt.ReportRecord{
|
|
{
|
|
Row: dmarcrpt.Row{
|
|
SourceIP: "127.0.0.1",
|
|
Count: 1,
|
|
PolicyEvaluated: dmarcrpt.PolicyEvaluated{
|
|
Disposition: dmarcrpt.DispositionNone,
|
|
DKIM: dmarcrpt.DMARCPass,
|
|
SPF: dmarcrpt.DMARCPass,
|
|
},
|
|
},
|
|
Identifiers: dmarcrpt.Identifiers{
|
|
HeaderFrom: "example.org",
|
|
},
|
|
AuthResults: dmarcrpt.AuthResults{
|
|
DKIM: []dmarcrpt.DKIMAuthResult{
|
|
{
|
|
Domain: "example.org",
|
|
Result: dmarcrpt.DKIMPass,
|
|
Selector: "example",
|
|
},
|
|
},
|
|
SPF: []dmarcrpt.SPFAuthResult{
|
|
{
|
|
Domain: "example.org",
|
|
Result: dmarcrpt.SPFPass,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
if err := AddReport(ctxbg, feedback, dns.Domain{ASCII: "google.com"}); err != nil {
|
|
t.Fatalf("adding report: %s", err)
|
|
}
|
|
|
|
records, err := Records(ctxbg)
|
|
if err != nil || len(records) != 1 || !reflect.DeepEqual(&records[0].Feedback, feedback) {
|
|
t.Fatalf("records: got err %v, records %#v, expected no error, single record with feedback %#v", err, records, feedback)
|
|
}
|
|
|
|
record, err := RecordID(ctxbg, records[0].ID)
|
|
if err != nil || !reflect.DeepEqual(&record.Feedback, feedback) {
|
|
t.Fatalf("record id: got err %v, record %#v, expected feedback %#v", err, record, feedback)
|
|
}
|
|
|
|
start := time.Unix(1596412800, 0)
|
|
end := time.Unix(1596499199, 0)
|
|
records, err = RecordsPeriodDomain(ctxbg, start, end, "example.org")
|
|
if err != nil || len(records) != 1 || !reflect.DeepEqual(&records[0].Feedback, feedback) {
|
|
t.Fatalf("records: got err %v, records %#v, expected no error, single record with feedback %#v", err, records, feedback)
|
|
}
|
|
|
|
records, err = RecordsPeriodDomain(ctxbg, end, end, "example.org")
|
|
if err != nil || len(records) != 0 {
|
|
t.Fatalf("records: got err %v, records %#v, expected no error and no records", err, records)
|
|
}
|
|
records, err = RecordsPeriodDomain(ctxbg, start, end, "other.example")
|
|
if err != nil || len(records) != 0 {
|
|
t.Fatalf("records: got err %v, records %#v, expected no error and no records", err, records)
|
|
}
|
|
}
|