Merge pull request #421 from kuba/simplehttp-test-mode
Allow TLS simpleHttp in test mode.
This commit is contained in:
commit
c41c0a6b41
|
|
@ -87,7 +87,6 @@ func (va ValidationAuthorityImpl) validateSimpleHTTP(identifier core.AcmeIdentif
|
||||||
}
|
}
|
||||||
if va.TestMode {
|
if va.TestMode {
|
||||||
hostName = "localhost:5001"
|
hostName = "localhost:5001"
|
||||||
scheme = "http"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
url := fmt.Sprintf("%s://%s/.well-known/acme-challenge/%s", scheme, hostName, challenge.Path)
|
url := fmt.Sprintf("%s://%s/.well-known/acme-challenge/%s", scheme, hostName, challenge.Path)
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,7 @@ const expectedToken = "THETOKEN"
|
||||||
const pathWrongToken = "wrongtoken"
|
const pathWrongToken = "wrongtoken"
|
||||||
const path404 = "404"
|
const path404 = "404"
|
||||||
|
|
||||||
func simpleSrv(t *testing.T, token string, stopChan, waitChan chan bool) {
|
func simpleSrv(t *testing.T, token string, stopChan, waitChan chan bool, enableTLS bool) {
|
||||||
// Reset any existing handlers
|
// Reset any existing handlers
|
||||||
http.DefaultServeMux = http.NewServeMux()
|
http.DefaultServeMux = http.NewServeMux()
|
||||||
|
|
||||||
|
|
@ -77,11 +77,11 @@ func simpleSrv(t *testing.T, token string, stopChan, waitChan chan bool) {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
httpsServer := &http.Server{Addr: "localhost:5001"}
|
server := &http.Server{Addr: "localhost:5001"}
|
||||||
conn, err := net.Listen("tcp", httpsServer.Addr)
|
conn, err := net.Listen("tcp", server.Addr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
waitChan <- true
|
waitChan <- true
|
||||||
t.Fatalf("Couldn't listen on %s: %s", httpsServer.Addr, err)
|
t.Fatalf("Couldn't listen on %s: %s", server.Addr, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
|
|
@ -89,8 +89,40 @@ func simpleSrv(t *testing.T, token string, stopChan, waitChan chan bool) {
|
||||||
conn.Close()
|
conn.Close()
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
var listener net.Listener
|
||||||
|
if !enableTLS {
|
||||||
|
listener = conn
|
||||||
|
} else {
|
||||||
|
template := &x509.Certificate{
|
||||||
|
SerialNumber: big.NewInt(1337),
|
||||||
|
Subject: pkix.Name{
|
||||||
|
Organization: []string{"tests"},
|
||||||
|
},
|
||||||
|
NotBefore: time.Now(),
|
||||||
|
NotAfter: time.Now().AddDate(0, 0, 1),
|
||||||
|
|
||||||
|
KeyUsage: x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign,
|
||||||
|
ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth},
|
||||||
|
BasicConstraintsValid: true,
|
||||||
|
|
||||||
|
DNSNames: []string{"example.com"},
|
||||||
|
}
|
||||||
|
|
||||||
|
certBytes, _ := x509.CreateCertificate(rand.Reader, template, template, &TheKey.PublicKey, &TheKey)
|
||||||
|
cert := &tls.Certificate{
|
||||||
|
Certificate: [][]byte{certBytes},
|
||||||
|
PrivateKey: &TheKey,
|
||||||
|
}
|
||||||
|
|
||||||
|
tlsConfig := &tls.Config{
|
||||||
|
Certificates: []tls.Certificate{*cert},
|
||||||
|
}
|
||||||
|
|
||||||
|
listener = tls.NewListener(conn, tlsConfig)
|
||||||
|
}
|
||||||
|
|
||||||
waitChan <- true
|
waitChan <- true
|
||||||
httpsServer.Serve(conn)
|
server.Serve(listener)
|
||||||
}
|
}
|
||||||
|
|
||||||
func dvsniSrv(t *testing.T, R, S []byte, stopChan, waitChan chan bool) {
|
func dvsniSrv(t *testing.T, R, S []byte, stopChan, waitChan chan bool) {
|
||||||
|
|
@ -166,12 +198,30 @@ func brokenTLSSrv(t *testing.T, stopChan, waitChan chan bool) {
|
||||||
httpsServer.Serve(tlsListener)
|
httpsServer.Serve(tlsListener)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSimpleHttp(t *testing.T) {
|
func TestSimpleHttpTLS(t *testing.T) {
|
||||||
va := NewValidationAuthorityImpl(true)
|
va := NewValidationAuthorityImpl(true)
|
||||||
va.DNSResolver = core.NewDNSResolver(time.Second*5, []string{"8.8.8.8:53"})
|
va.DNSResolver = core.NewDNSResolver(time.Second*5, []string{"8.8.8.8:53"})
|
||||||
|
|
||||||
chall := core.Challenge{Path: "test", Token: expectedToken}
|
chall := core.Challenge{Path: "test", Token: expectedToken}
|
||||||
|
|
||||||
|
stopChan := make(chan bool, 1)
|
||||||
|
waitChan := make(chan bool, 1)
|
||||||
|
go simpleSrv(t, expectedToken, stopChan, waitChan, true)
|
||||||
|
defer func() { stopChan <- true }()
|
||||||
|
<-waitChan
|
||||||
|
|
||||||
|
finChall, err := va.validateSimpleHTTP(ident, chall)
|
||||||
|
test.AssertEquals(t, finChall.Status, core.StatusValid)
|
||||||
|
test.AssertNotError(t, err, chall.Path)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSimpleHttp(t *testing.T) {
|
||||||
|
va := NewValidationAuthorityImpl(true)
|
||||||
|
va.DNSResolver = core.NewDNSResolver(time.Second*5, []string{"8.8.8.8:53"})
|
||||||
|
|
||||||
|
tls := false
|
||||||
|
chall := core.Challenge{Path: "test", Token: expectedToken, TLS: &tls}
|
||||||
|
|
||||||
invalidChall, err := va.validateSimpleHTTP(ident, chall)
|
invalidChall, err := va.validateSimpleHTTP(ident, chall)
|
||||||
test.AssertEquals(t, invalidChall.Status, core.StatusInvalid)
|
test.AssertEquals(t, invalidChall.Status, core.StatusInvalid)
|
||||||
test.AssertError(t, err, "Server's not up yet; expected refusal. Where did we connect?")
|
test.AssertError(t, err, "Server's not up yet; expected refusal. Where did we connect?")
|
||||||
|
|
@ -179,7 +229,7 @@ func TestSimpleHttp(t *testing.T) {
|
||||||
|
|
||||||
stopChan := make(chan bool, 1)
|
stopChan := make(chan bool, 1)
|
||||||
waitChan := make(chan bool, 1)
|
waitChan := make(chan bool, 1)
|
||||||
go simpleSrv(t, expectedToken, stopChan, waitChan)
|
go simpleSrv(t, expectedToken, stopChan, waitChan, tls)
|
||||||
defer func() { stopChan <- true }()
|
defer func() { stopChan <- true }()
|
||||||
<-waitChan
|
<-waitChan
|
||||||
|
|
||||||
|
|
@ -187,14 +237,6 @@ func TestSimpleHttp(t *testing.T) {
|
||||||
test.AssertEquals(t, finChall.Status, core.StatusValid)
|
test.AssertEquals(t, finChall.Status, core.StatusValid)
|
||||||
test.AssertNotError(t, err, chall.Path)
|
test.AssertNotError(t, err, chall.Path)
|
||||||
|
|
||||||
tls := false
|
|
||||||
chall.TLS = &tls
|
|
||||||
finChall, err = va.validateSimpleHTTP(ident, chall)
|
|
||||||
test.AssertEquals(t, finChall.Status, core.StatusValid)
|
|
||||||
test.AssertNotError(t, err, chall.Path)
|
|
||||||
|
|
||||||
tls = true
|
|
||||||
chall.TLS = &tls
|
|
||||||
chall.Path = path404
|
chall.Path = path404
|
||||||
invalidChall, err = va.validateSimpleHTTP(ident, chall)
|
invalidChall, err = va.validateSimpleHTTP(ident, chall)
|
||||||
test.AssertEquals(t, invalidChall.Status, core.StatusInvalid)
|
test.AssertEquals(t, invalidChall.Status, core.StatusInvalid)
|
||||||
|
|
@ -332,12 +374,14 @@ func TestValidateHTTP(t *testing.T) {
|
||||||
mockRA := &MockRegistrationAuthority{}
|
mockRA := &MockRegistrationAuthority{}
|
||||||
va.RA = mockRA
|
va.RA = mockRA
|
||||||
|
|
||||||
|
tls := false
|
||||||
challHTTP := core.SimpleHTTPChallenge()
|
challHTTP := core.SimpleHTTPChallenge()
|
||||||
challHTTP.Path = "test"
|
challHTTP.Path = "test"
|
||||||
|
challHTTP.TLS = &tls
|
||||||
|
|
||||||
stopChanHTTP := make(chan bool, 1)
|
stopChanHTTP := make(chan bool, 1)
|
||||||
waitChanHTTP := make(chan bool, 1)
|
waitChanHTTP := make(chan bool, 1)
|
||||||
go simpleSrv(t, challHTTP.Token, stopChanHTTP, waitChanHTTP)
|
go simpleSrv(t, challHTTP.Token, stopChanHTTP, waitChanHTTP, tls)
|
||||||
|
|
||||||
// Let them start
|
// Let them start
|
||||||
<-waitChanHTTP
|
<-waitChanHTTP
|
||||||
|
|
@ -432,12 +476,14 @@ func TestUpdateValidations(t *testing.T) {
|
||||||
mockRA := &MockRegistrationAuthority{}
|
mockRA := &MockRegistrationAuthority{}
|
||||||
va.RA = mockRA
|
va.RA = mockRA
|
||||||
|
|
||||||
|
tls := false
|
||||||
challHTTP := core.SimpleHTTPChallenge()
|
challHTTP := core.SimpleHTTPChallenge()
|
||||||
challHTTP.Path = "wait"
|
challHTTP.Path = "wait"
|
||||||
|
challHTTP.TLS = &tls
|
||||||
|
|
||||||
stopChanHTTP := make(chan bool, 1)
|
stopChanHTTP := make(chan bool, 1)
|
||||||
waitChanHTTP := make(chan bool, 1)
|
waitChanHTTP := make(chan bool, 1)
|
||||||
go simpleSrv(t, challHTTP.Token, stopChanHTTP, waitChanHTTP)
|
go simpleSrv(t, challHTTP.Token, stopChanHTTP, waitChanHTTP, tls)
|
||||||
|
|
||||||
// Let them start
|
// Let them start
|
||||||
<-waitChanHTTP
|
<-waitChanHTTP
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue