github.com/wanddynosios/cli/v8@v8.7.9-0.20240221182337-1a92e3a7017f/api/cloudcontroller/ccv3/resource_test.go (about) 1 package ccv3_test 2 3 import ( 4 "encoding/json" 5 "net/http" 6 "os" 7 8 "code.cloudfoundry.org/cli/api/cloudcontroller/ccerror" 9 . "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3" 10 . "github.com/onsi/ginkgo" 11 . "github.com/onsi/gomega" 12 . "github.com/onsi/gomega/ghttp" 13 ) 14 15 var _ = Describe("Resource", func() { 16 Describe("V3 formatted resource", func() { 17 Describe("MarshalJSON", func() { 18 It("marshals the json properly", func() { 19 resource := Resource{ 20 FilePath: "some-file-1", 21 Mode: os.FileMode(0744), 22 Checksum: Checksum{Value: "some-sha-1"}, 23 SizeInBytes: 1, 24 } 25 data, err := json.Marshal(resource) 26 Expect(err).ToNot(HaveOccurred()) 27 Expect(data).To(MatchJSON(`{ 28 "path": "some-file-1", 29 "mode": "744", 30 "checksum": {"value":"some-sha-1"}, 31 "size_in_bytes": 1 32 }`)) 33 }) 34 }) 35 36 Describe("UnmarshalJSON", func() { 37 It("Unmarshals the json properly", func() { 38 raw := `{ 39 "path": "some-file-1", 40 "mode": "744", 41 "checksum": {"value":"some-sha-1"}, 42 "size_in_bytes": 1 43 }` 44 45 var data Resource 46 err := json.Unmarshal([]byte(raw), &data) 47 Expect(err).ToNot(HaveOccurred()) 48 Expect(data).To(Equal(Resource{ 49 FilePath: "some-file-1", 50 Mode: os.FileMode(0744), 51 Checksum: Checksum{Value: "some-sha-1"}, 52 SizeInBytes: 1, 53 })) 54 }) 55 }) 56 }) 57 58 Describe("Resource Match", func() { 59 60 var ( 61 client *Client 62 allResources []Resource 63 matchedResources []Resource 64 warnings Warnings 65 executeErr error 66 ) 67 68 BeforeEach(func() { 69 client, _ = NewTestClient() 70 allResources = []Resource{ 71 {FilePath: "where are you", Checksum: Checksum{Value: "value1"}, SizeInBytes: 2}, 72 {FilePath: "bar", Checksum: Checksum{Value: "value2"}, SizeInBytes: 3}, 73 } 74 }) 75 76 JustBeforeEach(func() { 77 matchedResources, warnings, executeErr = client.ResourceMatch(allResources) 78 }) 79 80 When("the match is successful", func() { 81 When("the upload has application bits to upload", func() { 82 83 BeforeEach(func() { 84 85 expectedBody := `{ 86 "resources": [ 87 { 88 "path": "where are you", 89 "checksum": { 90 "value": "value1" 91 }, 92 "size_in_bytes": 2, 93 "mode": "0" 94 }, 95 { 96 "path": "bar", 97 "checksum": { 98 "value": "value2" 99 }, 100 "size_in_bytes": 3, 101 "mode": "0" 102 } 103 ] 104 }` 105 106 response := `{ 107 "resources": [ 108 { 109 "checksum": { 110 "value":"scooby dooby" 111 }, 112 "size_in_bytes": 2, 113 "path": "where are you? we got a job for you now", 114 "mode": "644" 115 } 116 ] 117 }` 118 119 server.AppendHandlers( 120 CombineHandlers( 121 VerifyRequest(http.MethodPost, "/v3/resource_matches"), 122 VerifyJSON(expectedBody), 123 RespondWith(http.StatusOK, response, http.Header{"X-Cf-Warnings": {"this is a warning"}}), 124 ), 125 ) 126 }) 127 128 It("returns the matched resources", func() { 129 Expect(executeErr).NotTo(HaveOccurred()) 130 Expect(warnings).To(ConsistOf("this is a warning")) 131 Expect(matchedResources).To(ConsistOf(Resource{ 132 Checksum: Checksum{Value: "scooby dooby"}, 133 SizeInBytes: 2, 134 FilePath: "where are you? we got a job for you now", 135 Mode: os.FileMode(0644), 136 })) 137 }) 138 }) 139 140 }) 141 142 When("the CC returns an error", func() { 143 BeforeEach(func() { 144 response := ` { 145 "errors": [ 146 { 147 "code": 10008, 148 "detail": "Banana", 149 "title": "CF-Banana" 150 } 151 ] 152 }` 153 154 server.AppendHandlers( 155 CombineHandlers( 156 VerifyRequest(http.MethodPost, "/v3/resource_matches"), 157 RespondWith(http.StatusNotFound, response, http.Header{"X-Cf-Warnings": {"this is a warning"}}), 158 ), 159 ) 160 }) 161 162 It("returns the error", func() { 163 Expect(executeErr).To(MatchError(ccerror.ResourceNotFoundError{Message: "Banana"})) 164 Expect(warnings).To(ConsistOf("this is a warning")) 165 }) 166 }) 167 }) 168 })