Select Git revision
collector_test.go
collector_test.go 8.55 KiB
package reportscollector
import (
"io/ioutil"
"net/http"
"net/http/httptest"
"path/filepath"
"strings"
"testing"
"github.com/chrj/smtpd"
)
type countingSink struct {
counter int
}
func (c *countingSink) Send(e Event) {
c.counter++
}
func (c *countingSink) reset() { c.counter = 0 }
func createTestCollector() (*countingSink, string, func()) {
sink := new(countingSink)
c := NewCollector(
sink,
new(ReportHandler),
new(TLSRPTHandler),
new(LegacyCSPHandler),
new(DMARCHandler),
)
srv := httptest.NewServer(c)
return sink, srv.URL, func() {
srv.Close()
}
}
func doRequest(t *testing.T, uri, contentType, data string) {
req, err := http.NewRequest("POST", uri, strings.NewReader(data))
if err != nil {
t.Fatalf("NewRequest failed: %v", err)
}
req.Header.Set("Content-Type", contentType)
client := new(http.Client)
resp, err := client.Do(req)
if err != nil {
t.Fatalf("request failed: %v", err)
}
defer resp.Body.Close()
if resp.StatusCode >= 300 {
t.Fatalf("request failed with status %d: %s", resp.StatusCode, resp.Status)
}
}
var reportsTestData = `[{
"type": "csp",
"age": 10,
"url": "https://example.com/vulnerable-page/",
"user_agent": "Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0",
"body": {
"blocked": "https://evil.com/evil.js",
"directive": "script-src",
"policy": "script-src 'self'; object-src 'none'",
"status": 200,
"referrer": "https://evil.com/"
}
}, {
"type": "hpkp",
"age": 32,