lego/acme/http_challenge_test.go

71 lines
1.8 KiB
Go
Raw Normal View History

2015-11-12 22:51:07 +00:00
package acme
import (
2016-01-27 01:01:58 +00:00
"crypto/rand"
2015-11-12 22:51:07 +00:00
"crypto/rsa"
"io/ioutil"
"testing"
2018-09-15 17:16:35 +00:00
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
2015-11-12 22:51:07 +00:00
)
func TestHTTPChallenge(t *testing.T) {
2015-12-27 18:26:47 +00:00
mockValidate := func(_ *jws, _, _ string, chlng challenge) error {
uri := "http://localhost:23457/.well-known/acme-challenge/" + chlng.Token
resp, err := httpGet(uri)
if err != nil {
return err
2015-11-12 22:51:07 +00:00
}
defer resp.Body.Close()
2015-11-12 22:51:07 +00:00
if want := "text/plain"; resp.Header.Get("Content-Type") != want {
t.Errorf("Get(%q) Content-Type: got %q, want %q", uri, resp.Header.Get("Content-Type"), want)
2015-11-12 22:51:07 +00:00
}
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return err
2015-11-12 22:51:07 +00:00
}
bodyStr := string(body)
2015-11-12 22:51:07 +00:00
if bodyStr != chlng.KeyAuthorization {
t.Errorf("Get(%q) Body: got %q, want %q", uri, bodyStr, chlng.KeyAuthorization)
2015-11-12 22:51:07 +00:00
}
return nil
2015-11-12 22:51:07 +00:00
}
2018-09-15 17:16:35 +00:00
privKey, err := rsa.GenerateKey(rand.Reader, 512)
require.NoError(t, err, "Could not generate test key")
solver := &httpChallenge{
jws: &jws{privKey: privKey},
validate: mockValidate,
provider: &HTTPProviderServer{port: "23457"},
2015-11-12 22:51:07 +00:00
}
2018-09-15 17:16:35 +00:00
clientChallenge := challenge{Type: string(HTTP01), Token: "http1"}
err = solver.Solve(clientChallenge, "localhost:23457")
assert.NoError(t, err)
2015-11-12 22:51:07 +00:00
}
func TestHTTPChallengeInvalidPort(t *testing.T) {
2018-09-15 17:16:35 +00:00
privKey, err := rsa.GenerateKey(rand.Reader, 128)
require.NoError(t, err, "Could not generate test key")
2018-09-15 17:16:35 +00:00
solver := &httpChallenge{
jws: &jws{privKey: privKey},
validate: stubValidate,
provider: &HTTPProviderServer{port: "123456"},
2015-11-12 22:51:07 +00:00
}
2018-09-15 17:16:35 +00:00
clientChallenge := challenge{Type: string(HTTP01), Token: "http2"}
err = solver.Solve(clientChallenge, "localhost:123456")
require.Error(t, err)
assert.Contains(t, err.Error(), "invalid port")
assert.Contains(t, err.Error(), "123456")
2015-11-12 22:51:07 +00:00
}