Skip to content

Commit

Permalink
Introduce FetchDetails for Fetch Instance/Binding APIs(#147)
Browse files Browse the repository at this point in the history
Co-authored-by: NickyMateev <[email protected]>
  • Loading branch information
FelisiaM and NickyMateev authored Mar 31, 2021
1 parent ab86339 commit 2f60389
Show file tree
Hide file tree
Showing 9 changed files with 251 additions and 60 deletions.
130 changes: 129 additions & 1 deletion api_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -537,7 +537,7 @@ var _ = Describe("Service Broker API", func() {
})

Describe("instance lifecycle endpoint", func() {
makeGetInstanceRequest := func(instanceID string) *testflight.Response {
makeGetInstanceWithQueryParamsRequest := func(instanceID string, params map[string]string) *testflight.Response {
response := &testflight.Response{}
testflight.WithServer(brokerAPI, func(r *testflight.Requester) {
path := fmt.Sprintf("/v2/service_instances/%s", instanceID)
Expand All @@ -546,11 +546,20 @@ var _ = Describe("Service Broker API", func() {
request.Header.Add("X-Broker-API-Version", apiVersion)
request.Header.Add("X-Broker-API-Request-Identity", requestIdentity)
request.SetBasicAuth("username", "password")
q := request.URL.Query()
for query, value := range params {
q.Add(query, value)
}
request.URL.RawQuery = q.Encode()
response = r.Do(request)
})
return response
}

makeGetInstanceRequest := func(instanceID string) *testflight.Response {
return makeGetInstanceWithQueryParamsRequest(instanceID, map[string]string{})
}

makeInstanceDeprovisioningRequestFull := func(instanceID, serviceID, planID, queryString string) *testflight.Response {
response := &testflight.Response{}
testflight.WithServer(brokerAPI, func(r *testflight.Requester) {
Expand Down Expand Up @@ -1642,6 +1651,53 @@ var _ = Describe("Service Broker API", func() {
Expect(response.StatusCode).To(Equal(404))
})
})

Context("fetch details", func() {
It("returns 200 when service_id and plan_id are not provided", func() {
response := makeGetInstanceWithQueryParamsRequest("instance-id", map[string]string{})

Expect(response.StatusCode).To(Equal(http.StatusOK))
Expect(fakeServiceBroker.InstanceFetchDetails.ServiceID).To(Equal(""))
Expect(fakeServiceBroker.InstanceFetchDetails.PlanID).To(Equal(""))
})

It("returns 200 when service_id and plan_id are provided", func() {
params := map[string]string{
"service_id": "e1307a5f-c54d-4f5d-924e-e5618c52ac0a",
"plan_id": "c6b2db23-60bf-4613-a91c-687372da42a5",
}

response := makeGetInstanceWithQueryParamsRequest("instance-id", params)

Expect(response.StatusCode).To(Equal(http.StatusOK))
Expect(fakeServiceBroker.InstanceFetchDetails.ServiceID).To(Equal(params["service_id"]))
Expect(fakeServiceBroker.InstanceFetchDetails.PlanID).To(Equal(params["plan_id"]))
})

It("returns 200 when only service_id is provided", func() {
params := map[string]string{
"service_id": "e1307a5f-c54d-4f5d-924e-e5618c52ac0a",
}

response := makeGetInstanceWithQueryParamsRequest("instance-id", params)

Expect(response.StatusCode).To(Equal(http.StatusOK))
Expect(fakeServiceBroker.InstanceFetchDetails.ServiceID).To(Equal(params["service_id"]))
Expect(fakeServiceBroker.InstanceFetchDetails.PlanID).To(Equal(""))
})

It("returns 200 when only plan_id is provided", func() {
params := map[string]string{
"plan_id": "c6b2db23-60bf-4613-a91c-687372da42a5",
}

response := makeGetInstanceWithQueryParamsRequest("instance-id", params)

Expect(response.StatusCode).To(Equal(http.StatusOK))
Expect(fakeServiceBroker.InstanceFetchDetails.ServiceID).To(Equal(""))
Expect(fakeServiceBroker.InstanceFetchDetails.PlanID).To(Equal(params["plan_id"]))
})
})
})
})

Expand Down Expand Up @@ -1669,6 +1725,31 @@ var _ = Describe("Service Broker API", func() {
return response
}

makeGetBindingWithQueryParamsRequest := func(instanceID, bindingID string, params map[string]string) *testflight.Response {
response := &testflight.Response{}
testflight.WithServer(brokerAPI, func(r *testflight.Requester) {
path := fmt.Sprintf("/v2/service_instances/%s/service_bindings/%s", instanceID, bindingID)

buffer := &bytes.Buffer{}

request, err := http.NewRequest("GET", path, buffer)

Expect(err).NotTo(HaveOccurred())

request.Header.Add("X-Broker-Api-Version", "2.14")
request.Header.Add("Content-Type", "application/json")
request.SetBasicAuth("username", "password")

q := request.URL.Query()
for query, value := range params {
q.Add(query, value)
}
request.URL.RawQuery = q.Encode()
response = r.Do(request)
})
return response
}

makeGetBindingRequestWithSpecificAPIVersion := func(instanceID, bindingID string, apiVersion string) *testflight.Response {
response := &testflight.Response{}
testflight.WithServer(brokerAPI, func(r *testflight.Requester) {
Expand Down Expand Up @@ -2504,5 +2585,52 @@ var _ = Describe("Service Broker API", func() {
Expect(lastLogLine().Data["error"]).To(ContainSubstring("some error"))
})
})

Context("fetch details", func() {
It("returns 200 when service_id and plan_id are not provided", func() {
response := makeGetBindingWithQueryParamsRequest("instance-id", "binding-id", map[string]string{})

Expect(response.StatusCode).To(Equal(http.StatusOK))
Expect(fakeServiceBroker.BindingFetchDetails.ServiceID).To(Equal(""))
Expect(fakeServiceBroker.BindingFetchDetails.PlanID).To(Equal(""))
})

It("returns 200 when service_id and plan_id are provided", func() {
params := map[string]string{
"service_id": "e1307a5f-c54d-4f5d-924e-e5618c52ac0a",
"plan_id": "c6b2db23-60bf-4613-a91c-687372da42a5",
}

response := makeGetBindingWithQueryParamsRequest("instance-id", "binding-id", params)

Expect(response.StatusCode).To(Equal(http.StatusOK))
Expect(fakeServiceBroker.BindingFetchDetails.ServiceID).To(Equal(params["service_id"]))
Expect(fakeServiceBroker.BindingFetchDetails.PlanID).To(Equal(params["plan_id"]))
})

It("returns 200 when only service_id is provided", func() {
params := map[string]string{
"service_id": "e1307a5f-c54d-4f5d-924e-e5618c52ac0a",
}

response := makeGetBindingWithQueryParamsRequest("instance-id", "binding-id", params)

Expect(response.StatusCode).To(Equal(http.StatusOK))
Expect(fakeServiceBroker.BindingFetchDetails.ServiceID).To(Equal(params["service_id"]))
Expect(fakeServiceBroker.BindingFetchDetails.PlanID).To(Equal(""))
})

It("returns 200 when only plan_id is provided", func() {
params := map[string]string{
"plan_id": "c6b2db23-60bf-4613-a91c-687372da42a5",
}

response := makeGetBindingWithQueryParamsRequest("instance-id", "binding-id", params)

Expect(response.StatusCode).To(Equal(http.StatusOK))
Expect(fakeServiceBroker.BindingFetchDetails.ServiceID).To(Equal(""))
Expect(fakeServiceBroker.BindingFetchDetails.PlanID).To(Equal(params["plan_id"]))
})
})
})
})
14 changes: 12 additions & 2 deletions domain/service_broker.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ type ServiceBroker interface {

// GetInstance fetches information about a service instance
// GET /v2/service_instances/{instance_id}
GetInstance(ctx context.Context, instanceID string) (GetInstanceDetailsSpec, error)
GetInstance(ctx context.Context, instanceID string, details FetchInstanceDetails) (GetInstanceDetailsSpec, error)

// Update modifies an existing service instance
// PATCH /v2/service_instances/{instance_id}
Expand All @@ -46,7 +46,7 @@ type ServiceBroker interface {

// GetBinding fetches an existing service binding
// GET /v2/service_instances/{instance_id}/service_bindings/{binding_id}
GetBinding(ctx context.Context, instanceID, bindingID string) (GetBindingSpec, error)
GetBinding(ctx context.Context, instanceID, bindingID string, details FetchBindingDetails) (GetBindingSpec, error)

// LastBindingOperation fetches last operation state for a service binding
// GET /v2/service_instances/{instance_id}/service_bindings/{binding_id}/last_operation
Expand Down Expand Up @@ -143,6 +143,16 @@ type UpdateServiceSpec struct {
OperationData string
}

type FetchInstanceDetails struct {
ServiceID string `json:"service_id"`
PlanID string `json:"plan_id"`
}

type FetchBindingDetails struct {
ServiceID string `json:"service_id"`
PlanID string `json:"plan_id"`
}

type PollDetails struct {
ServiceID string `json:"service_id"`
PlanID string `json:"plan_id"`
Expand Down
Loading

0 comments on commit 2f60389

Please sign in to comment.