github.com/crewjam/saml@v0.4.14/samlsp/samlsp_test.go (about) 1 package samlsp 2 3 import ( 4 "bytes" 5 "context" 6 "crypto" 7 "crypto/x509" 8 "encoding/pem" 9 "io" 10 "net/http" 11 "net/url" 12 "testing" 13 14 "gotest.tools/assert" 15 "gotest.tools/golden" 16 ) 17 18 type mockTransport func(req *http.Request) (*http.Response, error) 19 20 func (mt mockTransport) RoundTrip(req *http.Request) (*http.Response, error) { 21 return mt(req) 22 } 23 24 func mustParseURL(s string) url.URL { 25 rv, err := url.Parse(s) 26 if err != nil { 27 panic(err) 28 } 29 return *rv 30 } 31 32 func mustParsePrivateKey(pemStr []byte) crypto.PrivateKey { 33 b, _ := pem.Decode(pemStr) 34 if b == nil { 35 panic("cannot parse PEM") 36 } 37 k, err := x509.ParsePKCS1PrivateKey(b.Bytes) 38 if err != nil { 39 panic(err) 40 } 41 return k 42 } 43 44 func mustParseCertificate(pemStr []byte) *x509.Certificate { 45 b, _ := pem.Decode(pemStr) 46 if b == nil { 47 panic("cannot parse PEM") 48 } 49 cert, err := x509.ParseCertificate(b.Bytes) 50 if err != nil { 51 panic(err) 52 } 53 return cert 54 } 55 56 func TestCanParseTestshibMetadata(t *testing.T) { 57 httpClient := http.Client{ 58 Transport: mockTransport(func(req *http.Request) (*http.Response, error) { 59 responseBody := golden.Get(t, "testshib_metadata.xml") 60 return &http.Response{ 61 Header: http.Header{}, 62 Request: req, 63 StatusCode: http.StatusOK, 64 Body: io.NopCloser(bytes.NewReader(responseBody)), 65 }, nil 66 }), 67 } 68 69 _, err := FetchMetadata(context.Background(), 70 &httpClient, 71 mustParseURL("https://ipa.example.com/idp/saml2/metadata")) 72 assert.Check(t, err) 73 }