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  }