func TestServicePrincipalTokenRefreshUnmarshals(t *testing.T) { spt := newServicePrincipalToken() expiresOn := strconv.Itoa(int(time.Now().Add(3600 * time.Second).Sub(expirationBase).Seconds())) j := newTokenJSON(expiresOn, "resource") resp := mocks.NewResponseWithContent(j) c := mocks.NewSender() s := autorest.DecorateSender(c, (func() autorest.SendDecorator { return func(s autorest.Sender) autorest.Sender { return autorest.SenderFunc(func(r *http.Request) (*http.Response, error) { return resp, nil }) } })()) spt.SetSender(s) err := spt.Refresh() if err != nil { t.Errorf("azure: ServicePrincipalToken#Refresh returned an unexpected error (%v)", err) } else if spt.AccessToken != "accessToken" || spt.ExpiresIn != "3600" || spt.ExpiresOn != expiresOn || spt.NotBefore != expiresOn || spt.Resource != "resource" || spt.Type != "Bearer" { t.Errorf("azure: ServicePrincipalToken#Refresh failed correctly unmarshal the JSON -- expected %v, received %v", j, *spt) } }
func withRequestLogging() autorest.SendDecorator { return func(s autorest.Sender) autorest.Sender { return autorest.SenderFunc(func(r *http.Request) (*http.Response, error) { log.Printf("[DEBUG] Sending Azure RM Request %s to %s\n", r.Method, r.URL) resp, err := s.Do(r) log.Printf("[DEBUG] Received Azure RM Request status code %s for %s\n", resp.Status, r.URL) return resp, err }) } }
func withPollWatcher() autorest.SendDecorator { return func(s autorest.Sender) autorest.Sender { return autorest.SenderFunc(func(r *http.Request) (*http.Response, error) { fmt.Printf("[DEBUG] Sending Azure RM Request %q to %q\n", r.Method, r.URL) resp, err := s.Do(r) fmt.Printf("[DEBUG] Received Azure RM Request status code %s for %s\n", resp.Status, r.URL) if autorest.ResponseRequiresPolling(resp) { fmt.Printf("[DEBUG] Azure RM request will poll %s after %d seconds\n", autorest.GetPollingLocation(resp), int(autorest.GetPollingDelay(resp, time.Duration(0))/time.Second)) } return resp, err }) } }
func withWatcher() autorest.SendDecorator { return func(s autorest.Sender) autorest.Sender { return autorest.SenderFunc(func(r *http.Request) (*http.Response, error) { fmt.Printf("Sending %s %s\n", r.Method, r.URL) resp, err := s.Do(r) fmt.Printf("...received status %s\n", resp.Status) if autorest.ResponseRequiresPolling(resp) { fmt.Printf("...will poll after %d seconds\n", int(autorest.GetPollingDelay(resp, time.Duration(0))/time.Second)) fmt.Printf("...will poll at %s\n", autorest.GetPollingLocation(resp)) } fmt.Println("") return resp, err }) } }
func TestServicePrincipalTokenRefreshUsesPOST(t *testing.T) { spt := newServicePrincipalToken() c := mocks.NewSender() s := autorest.DecorateSender(c, (func() autorest.SendDecorator { return func(s autorest.Sender) autorest.Sender { return autorest.SenderFunc(func(r *http.Request) (*http.Response, error) { if r.Method != "POST" { t.Errorf("azure: ServicePrincipalToken#Refresh did not correctly set HTTP method -- expected %v, received %v", "POST", r.Method) } return mocks.NewResponse(), nil }) } })()) spt.SetSender(s) spt.Refresh() }
func TestServicePrincipalTokenRefreshClosesRequestBody(t *testing.T) { spt := newServicePrincipalToken() resp := mocks.NewResponse() c := mocks.NewSender() s := autorest.DecorateSender(c, (func() autorest.SendDecorator { return func(s autorest.Sender) autorest.Sender { return autorest.SenderFunc(func(r *http.Request) (*http.Response, error) { return resp, nil }) } })()) spt.SetSender(s) spt.Refresh() if resp.Body.(*mocks.Body).IsOpen() { t.Error("azure: ServicePrincipalToken#Refresh failed to close the HTTP Response Body") } }
func TestServicePrincipalTokenRefreshSetsURL(t *testing.T) { spt := newServicePrincipalToken() c := mocks.NewSender() s := autorest.DecorateSender(c, (func() autorest.SendDecorator { return func(s autorest.Sender) autorest.Sender { return autorest.SenderFunc(func(r *http.Request) (*http.Response, error) { u := fmt.Sprintf("https://login.microsoftonline.com/%s/oauth2/token?api-version=1.0", spt.tenantID) if r.URL.String() != u { t.Errorf("azure: ServicePrincipalToken#Refresh did not correctly set the URL -- expected %v, received %v", u, r.URL) } return mocks.NewResponse(), nil }) } })()) spt.SetSender(s) spt.Refresh() }
func TestServicePrincipalTokenRefreshSetsMimeType(t *testing.T) { spt := newServicePrincipalToken() c := mocks.NewSender() s := autorest.DecorateSender(c, (func() autorest.SendDecorator { return func(s autorest.Sender) autorest.Sender { return autorest.SenderFunc(func(r *http.Request) (*http.Response, error) { if r.Header.Get(http.CanonicalHeaderKey("Content-Type")) != "application/x-www-form-urlencoded" { t.Errorf("azure: ServicePrincipalToken#Refresh did not correctly set Content-Type -- expected %v, received %v", "application/x-form-urlencoded", r.Header.Get(http.CanonicalHeaderKey("Content-Type"))) } return mocks.NewResponse(), nil }) } })()) spt.SetSender(s) spt.Refresh() }
func TestServicePrincipalTokenEnsureFreshSkipsIfFresh(t *testing.T) { spt := newServicePrincipalToken() setTokenToExpireIn(&spt.Token, 1000*time.Second) f := false c := mocks.NewSender() s := autorest.DecorateSender(c, (func() autorest.SendDecorator { return func(s autorest.Sender) autorest.Sender { return autorest.SenderFunc(func(r *http.Request) (*http.Response, error) { f = true return mocks.NewResponse(), nil }) } })()) spt.SetSender(s) spt.EnsureFresh() if f { t.Error("azure: ServicePrincipalToken#EnsureFresh invoked Refresh for fresh token") } }
func TestServicePrincipalTokenEnsureFreshRefreshes(t *testing.T) { spt := newServicePrincipalToken() expireToken(&spt.Token) f := false c := mocks.NewSender() s := autorest.DecorateSender(c, (func() autorest.SendDecorator { return func(s autorest.Sender) autorest.Sender { return autorest.SenderFunc(func(r *http.Request) (*http.Response, error) { f = true return mocks.NewResponse(), nil }) } })()) spt.SetSender(s) spt.EnsureFresh() if !f { t.Error("azure: ServicePrincipalToken#EnsureFresh failed to call Refresh for stale token") } }
func TestServicePrincipalTokenRefreshSetsBody(t *testing.T) { spt := newServicePrincipalToken() c := mocks.NewSender() s := autorest.DecorateSender(c, (func() autorest.SendDecorator { return func(s autorest.Sender) autorest.Sender { return autorest.SenderFunc(func(r *http.Request) (*http.Response, error) { b, err := ioutil.ReadAll(r.Body) if err != nil { t.Errorf("azure: Failed to read body of Service Principal token request (%v)", err) } else if string(b) != defaultFormData { t.Errorf("azure: ServicePrincipalToken#Refresh did not correctly set the HTTP Request Body -- expected %v, received %v", defaultFormData, string(b)) } return mocks.NewResponse(), nil }) } })()) spt.SetSender(s) spt.Refresh() }