70 lines
1.7 KiB
Go
70 lines
1.7 KiB
Go
package main
|
|
|
|
import (
|
|
"crypto/x509"
|
|
"crypto/x509/pkix"
|
|
"fmt"
|
|
"math/big"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/letsencrypt/boulder/mocks"
|
|
"github.com/letsencrypt/boulder/test"
|
|
)
|
|
|
|
var (
|
|
email1 = "mailto:one@example.com"
|
|
email2 = "mailto:two@example.com"
|
|
)
|
|
|
|
func TestSendEarliestCertInfo(t *testing.T) {
|
|
expiresIn := 24 * time.Hour
|
|
ctx := setup(t, []time.Duration{expiresIn})
|
|
defer ctx.cleanUp()
|
|
|
|
rawCertA := newX509Cert("happy A",
|
|
ctx.fc.Now().AddDate(0, 0, 5),
|
|
[]string{"example-A.com", "SHARED-example.com"},
|
|
serial1,
|
|
)
|
|
rawCertB := newX509Cert("happy B",
|
|
ctx.fc.Now().AddDate(0, 0, 2),
|
|
[]string{"shared-example.com", "example-b.com"},
|
|
serial2,
|
|
)
|
|
|
|
err := ctx.m.sendNags([]string{email1, email2}, []*x509.Certificate{rawCertA, rawCertB})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(ctx.mc.Messages) != 2 {
|
|
t.Errorf("num of messages, want %d, got %d", 2, len(ctx.mc.Messages))
|
|
}
|
|
if len(ctx.mc.Messages) == 0 {
|
|
t.Fatalf("no message sent")
|
|
}
|
|
domains := "example-a.com\nexample-b.com\nshared-example.com"
|
|
expected := mocks.MailerMessage{
|
|
Subject: "Testing: Let's Encrypt certificate expiration notice for domain \"example-a.com\" (and 2 more)",
|
|
Body: fmt.Sprintf(`hi, cert for DNS names %s is going to expire in 2 days (%s)`,
|
|
domains,
|
|
rawCertB.NotAfter.Format(time.RFC822Z)),
|
|
}
|
|
expected.To = "one@example.com"
|
|
test.AssertEquals(t, expected, ctx.mc.Messages[0])
|
|
expected.To = "two@example.com"
|
|
test.AssertEquals(t, expected, ctx.mc.Messages[1])
|
|
}
|
|
|
|
func newX509Cert(commonName string, notAfter time.Time, dnsNames []string, serial *big.Int) *x509.Certificate {
|
|
return &x509.Certificate{
|
|
Subject: pkix.Name{
|
|
CommonName: commonName,
|
|
},
|
|
NotAfter: notAfter,
|
|
DNSNames: dnsNames,
|
|
SerialNumber: serial,
|
|
}
|
|
|
|
}
|