lego/acme/http_challenge_test.go

58 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"
"strings"
"testing"
)
func TestHTTPChallenge(t *testing.T) {
2016-01-27 01:01:58 +00:00
privKey, _ := rsa.GenerateKey(rand.Reader, 512)
j := &jws{privKey: privKey}
2018-05-30 17:53:04 +00:00
clientChallenge := challenge{Type: string(HTTP01), Token: "http1"}
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
}
2016-02-14 21:07:27 +00:00
solver := &httpChallenge{jws: j, validate: mockValidate, provider: &HTTPProviderServer{port: "23457"}}
2015-11-12 22:51:07 +00:00
if err := solver.Solve(clientChallenge, "localhost:23457"); err != nil {
t.Errorf("Solve error: got %v, want nil", err)
2015-11-12 22:51:07 +00:00
}
}
func TestHTTPChallengeInvalidPort(t *testing.T) {
2016-01-27 01:01:58 +00:00
privKey, _ := rsa.GenerateKey(rand.Reader, 128)
j := &jws{privKey: privKey}
2018-05-30 17:53:04 +00:00
clientChallenge := challenge{Type: string(HTTP01), Token: "http2"}
2016-02-14 21:07:27 +00:00
solver := &httpChallenge{jws: j, validate: stubValidate, provider: &HTTPProviderServer{port: "123456"}}
if err := solver.Solve(clientChallenge, "localhost:123456"); err == nil {
t.Errorf("Solve error: got %v, want error", err)
} else if want, want18 := "invalid port 123456", "123456: invalid port"; !strings.HasSuffix(err.Error(), want) && !strings.HasSuffix(err.Error(), want18) {
t.Errorf("Solve error: got %q, want suffix %q", err.Error(), want)
2015-11-12 22:51:07 +00:00
}
}