github.com/sleungcy-sap/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 })