github.com/orange-cloudfoundry/cli@v7.1.0+incompatible/api/cloudcontroller/ccv2/event_test.go (about) 1 package ccv2_test 2 3 import ( 4 "net/http" 5 "time" 6 7 "code.cloudfoundry.org/cli/api/cloudcontroller/ccerror" 8 . "code.cloudfoundry.org/cli/api/cloudcontroller/ccv2" 9 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv2/constant" 10 . "github.com/onsi/ginkgo" 11 . "github.com/onsi/gomega" 12 . "github.com/onsi/gomega/ghttp" 13 ) 14 15 var _ = Describe("Event", func() { 16 var client *Client 17 18 BeforeEach(func() { 19 client = NewTestClient() 20 }) 21 22 Describe("GetEvents", func() { 23 var ( 24 events []Event 25 warnings Warnings 26 executeErr error 27 ) 28 29 JustBeforeEach(func() { 30 events, warnings, executeErr = client.GetEvents( 31 Filter{ 32 Type: constant.TimestampFilter, 33 Operator: constant.GreaterThanOperator, 34 Values: []string{"2015-03-10T23:11:54Z"}, 35 }, 36 Filter{ 37 Type: constant.TypeFilter, 38 Operator: constant.InOperator, 39 Values: []string{"audit.app.create", "audit.app.delete-request"}, 40 }, 41 ) 42 }) 43 When("getting events errors", func() { 44 BeforeEach(func() { 45 response := `{ 46 "code": 1, 47 "description": "some error description", 48 "error_code": "CF-SomeError" 49 }` 50 server.AppendHandlers( 51 CombineHandlers( 52 VerifyRequest(http.MethodGet, "/v2/events", "q=timestamp>2015-03-10T23:11:54Z&q=type+IN+audit.app.create,audit.app.delete-request"), 53 RespondWith(http.StatusTeapot, response, http.Header{"X-Cf-Warnings": {"warning-1, warning-2"}}), 54 ), 55 ) 56 }) 57 58 It("returns the error and all warnings", func() { 59 Expect(executeErr).To(MatchError(ccerror.V2UnexpectedResponseError{ 60 V2ErrorResponse: ccerror.V2ErrorResponse{ 61 Code: 1, 62 Description: "some error description", 63 ErrorCode: "CF-SomeError", 64 }, 65 ResponseCode: http.StatusTeapot, 66 })) 67 68 Expect(warnings).To(ConsistOf("warning-1", "warning-2")) 69 }) 70 }) 71 72 When("getting events succeeds", func() { 73 BeforeEach(func() { 74 response1 := `{ 75 "next_url": "/v2/events?q=timestamp>2015-03-10T23:11:54Z&q=type+IN+audit.app.create,audit.app.delete-request&page=2", 76 "resources": [ 77 { 78 "metadata": { 79 "guid": "some-event-guid-1", 80 "updated_at": null 81 }, 82 "entity": { 83 "type": "audit.app.create", 84 "actor": "some-actor-guid", 85 "actor_type": "some-actor-type", 86 "actor_name": "some-actor-name", 87 "actee": "some-actee-guid", 88 "actee_type": "some-actee-type", 89 "actee_name": "some-actee-name", 90 "timestamp": "2015-03-10T23:11:54Z", 91 "metadata": { 92 "route_mapping_guid": "some-route-mapping-guid" 93 } 94 } 95 }, 96 { 97 "metadata": { 98 "guid": "some-event-guid-2", 99 "updated_at": null 100 }, 101 "entity": { 102 "type": "audit.app.delete-request", 103 "actor": "some-actor-guid", 104 "actor_type": "some-actor-type", 105 "actor_name": "some-actor-name", 106 "actee": "some-actee-guid", 107 "actee_type": "some-actee-type", 108 "actee_name": "some-actee-name", 109 "timestamp": "2015-03-10T23:11:54Z" 110 } 111 } 112 ] 113 }` 114 response2 := `{ 115 "next_url": null, 116 "resources": [ 117 { 118 "metadata": { 119 "guid": "some-event-guid-3", 120 "updated_at": null 121 }, 122 "entity": { 123 "type": "audit.app.create", 124 "actor": "some-actor-guid", 125 "actor_type": "some-actor-type", 126 "actor_name": "some-actor-name", 127 "actee": "some-actee-guid", 128 "actee_type": "some-actee-type", 129 "actee_name": "some-actee-name", 130 "timestamp": "2015-03-10T23:11:54Z" 131 } 132 }, 133 { 134 "metadata": { 135 "guid": "some-event-guid-4", 136 "updated_at": null 137 }, 138 "entity": { 139 "type": "audit.app.delete-request", 140 "actor": "some-actor-guid", 141 "actor_type": "some-actor-type", 142 "actor_name": "some-actor-name", 143 "actee": "some-actee-guid", 144 "actee_type": "some-actee-type", 145 "actee_name": "some-actee-name", 146 "timestamp": "2015-03-10T23:11:54Z" 147 } 148 } 149 ] 150 }` 151 server.AppendHandlers( 152 CombineHandlers( 153 VerifyRequest(http.MethodGet, "/v2/events", "q=timestamp>2015-03-10T23:11:54Z&q=type+IN+audit.app.create,audit.app.delete-request"), 154 RespondWith(http.StatusOK, response1, http.Header{"X-Cf-Warnings": {"warning-1, warning-2"}}), 155 ), 156 ) 157 server.AppendHandlers( 158 CombineHandlers( 159 VerifyRequest(http.MethodGet, "/v2/events", "q=timestamp>2015-03-10T23:11:54Z&q=type+IN+audit.app.create,audit.app.delete-request&page=2"), 160 RespondWith(http.StatusOK, response2, http.Header{"X-Cf-Warnings": {"warning-3, warning-4"}}), 161 ), 162 ) 163 }) 164 165 It("returns all the events", func() { 166 expectedTimestamp, err := time.Parse(time.RFC3339, "2015-03-10T23:11:54Z") 167 Expect(err).ToNot(HaveOccurred()) 168 169 Expect(executeErr).ToNot(HaveOccurred()) 170 Expect(warnings).To(ConsistOf("warning-1", "warning-2", "warning-3", "warning-4")) 171 Expect(events).To(Equal([]Event{ 172 { 173 GUID: "some-event-guid-1", 174 Type: constant.EventTypeAuditApplicationCreate, 175 ActorGUID: "some-actor-guid", 176 ActorType: "some-actor-type", 177 ActorName: "some-actor-name", 178 ActeeGUID: "some-actee-guid", 179 ActeeType: "some-actee-type", 180 ActeeName: "some-actee-name", 181 Timestamp: expectedTimestamp, 182 Metadata: map[string]interface{}{ 183 "route_mapping_guid": "some-route-mapping-guid", 184 }, 185 }, 186 { 187 GUID: "some-event-guid-2", 188 Type: constant.EventTypeAuditApplicationDeleteRequest, 189 ActorGUID: "some-actor-guid", 190 ActorType: "some-actor-type", 191 ActorName: "some-actor-name", 192 ActeeGUID: "some-actee-guid", 193 ActeeType: "some-actee-type", 194 ActeeName: "some-actee-name", 195 Timestamp: expectedTimestamp, 196 Metadata: nil, 197 }, 198 { 199 GUID: "some-event-guid-3", 200 Type: constant.EventTypeAuditApplicationCreate, 201 ActorGUID: "some-actor-guid", 202 ActorType: "some-actor-type", 203 ActorName: "some-actor-name", 204 ActeeGUID: "some-actee-guid", 205 ActeeType: "some-actee-type", 206 ActeeName: "some-actee-name", 207 Timestamp: expectedTimestamp, 208 Metadata: nil, 209 }, 210 { 211 GUID: "some-event-guid-4", 212 Type: constant.EventTypeAuditApplicationDeleteRequest, 213 ActorGUID: "some-actor-guid", 214 ActorType: "some-actor-type", 215 ActorName: "some-actor-name", 216 ActeeGUID: "some-actee-guid", 217 ActeeType: "some-actee-type", 218 ActeeName: "some-actee-name", 219 Timestamp: expectedTimestamp, 220 Metadata: nil, 221 }, 222 })) 223 }) 224 }) 225 }) 226 })