github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+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  })