github.com/orange-cloudfoundry/cli@v7.1.0+incompatible/api/cloudcontroller/ccv3/target_test.go (about)

     1  package ccv3_test
     2  
     3  import (
     4  	"fmt"
     5  	"net/http"
     6  
     7  	"code.cloudfoundry.org/cli/api/cloudcontroller"
     8  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccerror"
     9  	. "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3"
    10  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/ccv3fakes"
    11  
    12  	. "github.com/onsi/ginkgo"
    13  	. "github.com/onsi/gomega"
    14  	. "github.com/onsi/gomega/ghttp"
    15  )
    16  
    17  var _ = Describe("Target", func() {
    18  	var (
    19  		client    *Client
    20  		serverURL string
    21  	)
    22  
    23  	BeforeEach(func() {
    24  		client = NewClient(Config{AppName: "CF CLI API V3 Target Test", AppVersion: "Unknown"})
    25  	})
    26  
    27  	Describe("TargetCF", func() {
    28  		BeforeEach(func() {
    29  			server.Reset()
    30  
    31  			serverURL = server.URL()
    32  			rootResponse := fmt.Sprintf(`{
    33  				"links": {
    34  					"self": {
    35  						"href": "%s"
    36  					},
    37  					"cloud_controller_v2": {
    38  						"href": "%s/v2",
    39  						"meta": {
    40  							"version": "2.64.0"
    41  						}
    42  					},
    43  					"cloud_controller_v3": {
    44  						"href": "%s/v3",
    45  						"meta": {
    46  							"version": "3.0.0-alpha.5"
    47  						}
    48  					},
    49  					"uaa": {
    50  						"href": "https://uaa.bosh-lite.com"
    51  					}
    52  				}
    53  			}`, serverURL, serverURL, serverURL)
    54  
    55  			server.AppendHandlers(
    56  				CombineHandlers(
    57  					VerifyRequest(http.MethodGet, "/"),
    58  					RespondWith(
    59  						http.StatusOK,
    60  						rootResponse,
    61  						http.Header{"X-Cf-Warnings": {"warning 1"}}),
    62  				),
    63  			)
    64  
    65  			v3Response := fmt.Sprintf(`{
    66  				"links": {
    67  					"self": {
    68  						"href": "%s/v3"
    69  					},
    70  					"tasks": {
    71  						"href": "%s/v3/tasks"
    72  					}
    73  				}
    74  			}`, serverURL, serverURL)
    75  
    76  			server.AppendHandlers(
    77  				CombineHandlers(
    78  					VerifyRequest(http.MethodGet, "/v3"),
    79  					RespondWith(
    80  						http.StatusOK,
    81  						v3Response,
    82  						http.Header{"X-Cf-Warnings": {"warning 2"}}),
    83  				),
    84  			)
    85  		})
    86  
    87  		When("client has wrappers", func() {
    88  			var fakeWrapper1 *ccv3fakes.FakeConnectionWrapper
    89  			var fakeWrapper2 *ccv3fakes.FakeConnectionWrapper
    90  
    91  			BeforeEach(func() {
    92  				fakeWrapper1 = new(ccv3fakes.FakeConnectionWrapper)
    93  				fakeWrapper1.WrapReturns(fakeWrapper1)
    94  				fakeWrapper2 = new(ccv3fakes.FakeConnectionWrapper)
    95  				fakeWrapper2.WrapReturns(fakeWrapper2)
    96  
    97  				fakeWrapper2.MakeStub = func(request *cloudcontroller.Request, passedResponse *cloudcontroller.Response) error {
    98  					apiInfo, ok := passedResponse.DecodeJSONResponseInto.(*Info)
    99  					if ok { // Only caring about the first time Make is called, ignore all others
   100  						apiInfo.Links.CCV3.HREF = server.URL() + "/v3"
   101  					}
   102  					return nil
   103  				}
   104  
   105  				client = NewClient(Config{
   106  					AppName:    "CF CLI API Target Test",
   107  					AppVersion: "Unknown",
   108  					Wrappers:   []ConnectionWrapper{fakeWrapper1, fakeWrapper2},
   109  				})
   110  			})
   111  
   112  			It("calls wrap on all the wrappers", func() {
   113  				_, _, err := client.TargetCF(TargetSettings{
   114  					SkipSSLValidation: true,
   115  					URL:               server.URL(),
   116  				})
   117  				Expect(err).NotTo(HaveOccurred())
   118  
   119  				Expect(fakeWrapper1.WrapCallCount()).To(Equal(1))
   120  				Expect(fakeWrapper2.WrapCallCount()).To(Equal(1))
   121  				Expect(fakeWrapper2.WrapArgsForCall(0)).To(Equal(fakeWrapper1))
   122  			})
   123  		})
   124  
   125  		When("passed a valid API URL", func() {
   126  			When("the server has unverified SSL", func() {
   127  				When("setting the skip ssl flag", func() {
   128  					It("sets all the endpoints on the client and returns all warnings", func() {
   129  						rootInfo, warnings, err := client.TargetCF(TargetSettings{
   130  							SkipSSLValidation: true,
   131  							URL:               server.URL(),
   132  						})
   133  						Expect(err).NotTo(HaveOccurred())
   134  						Expect(warnings).To(ConsistOf("warning 1", "warning 2"))
   135  
   136  						Expect(client.UAA()).To(Equal("https://uaa.bosh-lite.com"))
   137  						Expect(client.CloudControllerAPIVersion()).To(Equal("3.0.0-alpha.5"))
   138  						Expect(rootInfo.Links.CCV3.HREF).To(Equal(fmt.Sprintf("%s/v3", serverURL)))
   139  					})
   140  				})
   141  			})
   142  		})
   143  
   144  		When("the cloud controller encounters an error", func() {
   145  			BeforeEach(func() {
   146  				server.SetHandler(1,
   147  					CombineHandlers(
   148  						VerifyRequest(http.MethodGet, "/v3"),
   149  						RespondWith(
   150  							http.StatusNotFound,
   151  							`{"errors": [{}]}`,
   152  							http.Header{"X-Cf-Warnings": {"this is a warning"}}),
   153  					),
   154  				)
   155  			})
   156  
   157  			It("returns the same error", func() {
   158  				rootInfo, warnings, err := client.TargetCF(TargetSettings{
   159  					SkipSSLValidation: true,
   160  					URL:               server.URL(),
   161  				})
   162  				Expect(err).To(MatchError(ccerror.ResourceNotFoundError{}))
   163  				Expect(warnings).To(ConsistOf("warning 1", "this is a warning"))
   164  				Expect(rootInfo).To(Equal(Info{}))
   165  			})
   166  		})
   167  	})
   168  })