code.cloudfoundry.org/cli@v7.1.0+incompatible/cf/net/uaa_gateway_test.go (about)

     1  package net_test
     2  
     3  import (
     4  	"fmt"
     5  	"net/http"
     6  	"net/http/httptest"
     7  	"time"
     8  
     9  	"code.cloudfoundry.org/cli/cf/configuration/coreconfig"
    10  	"code.cloudfoundry.org/cli/cf/errors"
    11  	. "code.cloudfoundry.org/cli/cf/net"
    12  	"code.cloudfoundry.org/cli/cf/terminal/terminalfakes"
    13  	"code.cloudfoundry.org/cli/cf/trace/tracefakes"
    14  	testconfig "code.cloudfoundry.org/cli/cf/util/testhelpers/configuration"
    15  	. "github.com/onsi/ginkgo"
    16  	. "github.com/onsi/gomega"
    17  )
    18  
    19  var failingUAARequest = func(writer http.ResponseWriter, request *http.Request) {
    20  	writer.WriteHeader(http.StatusBadRequest)
    21  	jsonResponse := `{ "error": "foo", "error_description": "The foo is wrong..." }`
    22  	fmt.Fprintln(writer, jsonResponse)
    23  }
    24  
    25  var _ = Describe("UAA Gateway", func() {
    26  	var gateway Gateway
    27  	var config coreconfig.Reader
    28  	var timeout string
    29  
    30  	BeforeEach(func() {
    31  		config = testconfig.NewRepository()
    32  		timeout = "1"
    33  	})
    34  
    35  	JustBeforeEach(func() {
    36  		gateway = NewUAAGateway(config, new(terminalfakes.FakeUI), new(tracefakes.FakePrinter), timeout)
    37  	})
    38  
    39  	It("parses error responses", func() {
    40  		ts := httptest.NewTLSServer(http.HandlerFunc(failingUAARequest))
    41  		defer ts.Close()
    42  		gateway.SetTrustedCerts(ts.TLS.Certificates)
    43  
    44  		request, apiErr := gateway.NewRequest("GET", ts.URL, "TOKEN", nil)
    45  		_, apiErr = gateway.PerformRequest(request)
    46  
    47  		Expect(apiErr).NotTo(BeNil())
    48  		Expect(apiErr.Error()).To(ContainSubstring("The foo is wrong"))
    49  		Expect(apiErr.(errors.HTTPError).ErrorCode()).To(ContainSubstring("foo"))
    50  	})
    51  
    52  	It("uses the set dial timeout", func() {
    53  		Expect(gateway.DialTimeout).To(Equal(1 * time.Second))
    54  	})
    55  
    56  	Context("with an invalid timeout", func() {
    57  		BeforeEach(func() {
    58  			timeout = ""
    59  		})
    60  
    61  		It("uses the default dial timeout", func() {
    62  			Expect(gateway.DialTimeout).To(Equal(5 * time.Second))
    63  		})
    64  	})
    65  })