github.com/versent/saml2aws@v2.17.0+incompatible/pkg/provider/f5apm/f5apm_test.go (about)

     1  package f5apm
     2  
     3  import (
     4  	"bytes"
     5  	"io/ioutil"
     6  	"net/http"
     7  	"net/http/cookiejar"
     8  	"net/http/httptest"
     9  	"net/url"
    10  	"testing"
    11  
    12  	"github.com/PuerkitoBio/goquery"
    13  	"github.com/versent/saml2aws/pkg/creds"
    14  
    15  	"github.com/versent/saml2aws/pkg/provider"
    16  
    17  	"github.com/stretchr/testify/require"
    18  )
    19  
    20  func TestClient_getLoginForm(t *testing.T) {
    21  	data, err := ioutil.ReadFile("example/loginpage.html")
    22  	require.Nil(t, err)
    23  
    24  	ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    25  		w.Write(data)
    26  	}))
    27  	defer ts.Close()
    28  
    29  	jar, err := cookiejar.New(nil)
    30  	require.Nil(t, err)
    31  	ac := Client{client: &provider.HTTPClient{Client: http.Client{Jar: jar}}}
    32  	t.Log(ac)
    33  	loginDetails := &creds.LoginDetails{URL: ts.URL, Username: "groundcontrol", Password: "majortom"}
    34  	t.Log(loginDetails)
    35  
    36  	authForm, err := ac.getLoginForm(loginDetails)
    37  	require.Nil(t, err)
    38  	require.Equal(t, url.Values{
    39  		"username": []string{"groundcontrol"},
    40  		"password": []string{"majortom"},
    41  		"vhost":    []string{"standard"},
    42  	}, authForm)
    43  }
    44  func TestClient_postLoginForm_user_pass(t *testing.T) {
    45  	data, err := ioutil.ReadFile("example/loginpage.html")
    46  	require.Nil(t, err)
    47  
    48  	ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    49  		w.Write(data)
    50  	}))
    51  	defer ts.Close()
    52  
    53  	jar, err := cookiejar.New(nil)
    54  	require.Nil(t, err)
    55  	ac := Client{client: &provider.HTTPClient{Client: http.Client{Jar: jar}}}
    56  	t.Log(ac)
    57  	loginDetails := &creds.LoginDetails{URL: ts.URL, Username: "groundcontrol", Password: "majortom"}
    58  	t.Log(loginDetails)
    59  
    60  	authForm := url.Values{}
    61  	authForm.Add("username", "groundcontrol")
    62  	authForm.Add("password", "majortom")
    63  	resData, err := ac.postLoginForm(loginDetails, authForm)
    64  	require.Nil(t, err)
    65  	require.Equal(t, data, resData)
    66  }
    67  
    68  func TestClient_containsMFAForm(t *testing.T) {
    69  	data, err := ioutil.ReadFile("example/mfapage.html")
    70  	require.Nil(t, err)
    71  	doc, err := goquery.NewDocumentFromReader(bytes.NewReader(data))
    72  	require.Nil(t, err)
    73  	mfaFound, mfaMethods := containsMFAForm(doc)
    74  	require.True(t, mfaFound)
    75  	require.Equal(t, []string{"push", "token"}, mfaMethods)
    76  }
    77  
    78  func TestClient_containsMFAForm_False(t *testing.T) {
    79  	data, err := ioutil.ReadFile("example/loginpage.html")
    80  	require.Nil(t, err)
    81  	doc, err := goquery.NewDocumentFromReader(bytes.NewReader(data))
    82  	require.Nil(t, err)
    83  	mfaFound, mfaMethods := containsMFAForm(doc)
    84  	require.False(t, mfaFound)
    85  	require.Equal(t, []string(nil), mfaMethods)
    86  }