Skip to content

Commit f9baa25

Browse files
uzabanovdanail-branekov
authored andcommitted
Implemen paging for service instances
1 parent 0d187ba commit f9baa25

13 files changed

+131
-90
lines changed

api/actions/manifest/applier.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ func (a *Applier) applyServices(ctx context.Context, authInfo authorization.Info
219219
}
220220

221221
serviceGUIDToInstanceRecord := map[string]repositories.ServiceInstanceRecord{}
222-
for _, serviceInstance := range serviceInstances {
222+
for _, serviceInstance := range serviceInstances.Records {
223223
serviceGUIDToInstanceRecord[serviceInstance.Name] = serviceInstance
224224
}
225225

api/actions/manifest/applier_test.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
apierrors "code.cloudfoundry.org/korifi/api/errors"
1111
"code.cloudfoundry.org/korifi/api/payloads"
1212
"code.cloudfoundry.org/korifi/api/repositories"
13+
"code.cloudfoundry.org/korifi/api/repositories/k8sklient/descriptors"
1314
korifiv1alpha1 "code.cloudfoundry.org/korifi/controllers/api/v1alpha1"
1415
"code.cloudfoundry.org/korifi/tools"
1516

@@ -456,9 +457,13 @@ var _ = Describe("Applier", func() {
456457

457458
Describe("applying services", func() {
458459
BeforeEach(func() {
459-
serviceInstanceRepo.ListServiceInstancesReturns([]repositories.ServiceInstanceRecord{
460-
{Name: "service-name", GUID: "service-guid"},
461-
}, nil)
460+
serviceInstanceRepo.ListServiceInstancesReturns(
461+
repositories.ListResult[repositories.ServiceInstanceRecord]{
462+
PageInfo: descriptors.PageInfo{TotalResults: 1},
463+
Records: []repositories.ServiceInstanceRecord{
464+
{Name: "service-name", GUID: "service-guid"},
465+
},
466+
}, nil)
462467

463468
appState.App.GUID = "app-guid"
464469
appState.App.SpaceGUID = "space-guid"
@@ -540,7 +545,7 @@ var _ = Describe("Applier", func() {
540545

541546
When("listing service instances fails", func() {
542547
BeforeEach(func() {
543-
serviceInstanceRepo.ListServiceInstancesReturns(nil, errors.New("list-services-err"))
548+
serviceInstanceRepo.ListServiceInstancesReturns(repositories.ListResult[repositories.ServiceInstanceRecord]{}, errors.New("list-services-err"))
544549
})
545550

546551
It("returns the error", func() {

api/actions/manifest/state_collector.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ func (s StateCollector) indexBindingsByServiceName(ctx context.Context, authInfo
134134
return nil, err
135135
}
136136

137-
appServicesByGUID := index(appServices, func(s repositories.ServiceInstanceRecord) string {
137+
appServicesByGUID := index(appServices.Records, func(s repositories.ServiceInstanceRecord) string {
138138
return s.GUID
139139
})
140140

api/actions/manifest/state_collector_test.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,12 @@ var _ = Describe("StateCollector", func() {
197197

198198
BeforeEach(func() {
199199
appRepo.ListAppsReturns(repositories.ListResult[repositories.AppRecord]{Records: []repositories.AppRecord{{GUID: "app-guid"}}}, nil)
200-
serviceInstanceRepo.ListServiceInstancesReturns([]repositories.ServiceInstanceRecord{{Name: "service-name", GUID: "s-guid"}}, nil)
200+
serviceInstanceRepo.ListServiceInstancesReturns(
201+
repositories.ListResult[repositories.ServiceInstanceRecord]{
202+
PageInfo: descriptors.PageInfo{TotalResults: 1},
203+
Records: []repositories.ServiceInstanceRecord{{Name: "service-name", GUID: "s-guid"}},
204+
}, nil)
205+
201206
serviceBindings = repositories.ListResult[repositories.ServiceBindingRecord]{
202207
PageInfo: descriptors.PageInfo{
203208
TotalResults: 2,
@@ -221,7 +226,7 @@ var _ = Describe("StateCollector", func() {
221226

222227
When("listing the services fails", func() {
223228
BeforeEach(func() {
224-
serviceInstanceRepo.ListServiceInstancesReturns(nil, errors.New("list-service-err"))
229+
serviceInstanceRepo.ListServiceInstancesReturns(repositories.ListResult[repositories.ServiceInstanceRecord]{}, errors.New("list-service-err"))
225230
})
226231

227232
It("returns the error", func() {
@@ -247,7 +252,10 @@ var _ = Describe("StateCollector", func() {
247252

248253
When("the service instance cannot be found for a binding", func() {
249254
BeforeEach(func() {
250-
serviceInstanceRepo.ListServiceInstancesReturns([]repositories.ServiceInstanceRecord{{Name: "service-name", GUID: "wrong-guid"}}, nil)
255+
serviceInstanceRepo.ListServiceInstancesReturns(repositories.ListResult[repositories.ServiceInstanceRecord]{
256+
PageInfo: descriptors.PageInfo{TotalResults: 1},
257+
Records: []repositories.ServiceInstanceRecord{{Name: "service-name", GUID: "wrong-guid"}},
258+
}, nil)
251259
})
252260

253261
It("returns an error", func() {

api/actions/shared/fake/cfservice_instance_repository.go

Lines changed: 10 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/actions/shared/shared.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,5 +51,5 @@ type CFServiceBindingRepository interface {
5151

5252
//counterfeiter:generate -o fake -fake-name CFServiceInstanceRepository . CFServiceInstanceRepository
5353
type CFServiceInstanceRepository interface {
54-
ListServiceInstances(context.Context, authorization.Info, repositories.ListServiceInstanceMessage) ([]repositories.ServiceInstanceRecord, error)
54+
ListServiceInstances(context.Context, authorization.Info, repositories.ListServiceInstanceMessage) (repositories.ListResult[repositories.ServiceInstanceRecord], error)
5555
}

api/handlers/fake/cfservice_instance_repository.go

Lines changed: 10 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/handlers/service_instance.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ type CFServiceInstanceRepository interface {
3131
CreateUserProvidedServiceInstance(context.Context, authorization.Info, repositories.CreateUPSIMessage) (repositories.ServiceInstanceRecord, error)
3232
CreateManagedServiceInstance(context.Context, authorization.Info, repositories.CreateManagedSIMessage) (repositories.ServiceInstanceRecord, error)
3333
PatchServiceInstance(context.Context, authorization.Info, repositories.PatchServiceInstanceMessage) (repositories.ServiceInstanceRecord, error)
34-
ListServiceInstances(context.Context, authorization.Info, repositories.ListServiceInstanceMessage) ([]repositories.ServiceInstanceRecord, error)
34+
ListServiceInstances(context.Context, authorization.Info, repositories.ListServiceInstanceMessage) (repositories.ListResult[repositories.ServiceInstanceRecord], error)
3535
GetServiceInstance(context.Context, authorization.Info, string) (repositories.ServiceInstanceRecord, error)
3636
GetServiceInstanceCredentials(context.Context, authorization.Info, string) (map[string]any, error)
3737
DeleteServiceInstance(context.Context, authorization.Info, repositories.DeleteServiceInstanceMessage) (repositories.ServiceInstanceRecord, error)
@@ -209,12 +209,12 @@ func (h *ServiceInstance) list(r *http.Request) (*routing.Response, error) {
209209
return nil, apierrors.LogAndReturn(logger, err, "Failed to list service instance")
210210
}
211211

212-
includedResources, err := h.includeResolver.ResolveIncludes(r.Context(), authInfo, serviceInstances, payload.IncludeResourceRules)
212+
includedResources, err := h.includeResolver.ResolveIncludes(r.Context(), authInfo, serviceInstances.Records, payload.IncludeResourceRules)
213213
if err != nil {
214214
return nil, apierrors.LogAndReturn(logger, err, "failed to build included resources")
215215
}
216216

217-
return routing.NewResponse(http.StatusOK).WithBody(presenter.ForListDeprecated(presenter.ForServiceInstance, serviceInstances, h.serverURL, *r.URL, includedResources...)), nil
217+
return routing.NewResponse(http.StatusOK).WithBody(presenter.ForList(presenter.ForServiceInstance, serviceInstances, h.serverURL, *r.URL, includedResources...)), nil
218218
}
219219

220220
func (h *ServiceInstance) delete(r *http.Request) (*routing.Response, error) {

api/handlers/service_instance_test.go

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -553,10 +553,14 @@ var _ = Describe("ServiceInstance", func() {
553553

554554
Describe("GET /v3/service_instances", func() {
555555
BeforeEach(func() {
556-
serviceInstanceRepo.ListServiceInstancesReturns([]repositories.ServiceInstanceRecord{
557-
{GUID: "service-inst-guid-1", SpaceGUID: "space-guid"},
558-
{GUID: "service-inst-guid-2", SpaceGUID: "space-guid"},
559-
}, nil)
556+
serviceInstanceRepo.ListServiceInstancesReturns(
557+
repositories.ListResult[repositories.ServiceInstanceRecord]{
558+
PageInfo: descriptors.PageInfo{TotalResults: 2},
559+
Records: []repositories.ServiceInstanceRecord{
560+
{GUID: "service-inst-guid-1", SpaceGUID: "space-guid"},
561+
{GUID: "service-inst-guid-2", SpaceGUID: "space-guid"},
562+
},
563+
}, nil)
560564

561565
requestValidator.DecodeAndValidateURLValuesStub = decodeAndValidateURLValuesStub(&payloads.ServiceInstanceList{})
562566
reqPath += "?foo=bar"
@@ -660,10 +664,14 @@ var _ = Describe("ServiceInstance", func() {
660664

661665
When("the service instance is managed", func() {
662666
BeforeEach(func() {
663-
serviceInstanceRepo.ListServiceInstancesReturns([]repositories.ServiceInstanceRecord{
664-
{GUID: "service-inst-guid-1", Type: korifiv1alpha1.ManagedType, PlanGUID: "service-plan-guid"},
665-
{GUID: "service-inst-guid-2", Type: korifiv1alpha1.ManagedType, PlanGUID: "service-plan-guid"},
666-
}, nil)
667+
serviceInstanceRepo.ListServiceInstancesReturns(
668+
repositories.ListResult[repositories.ServiceInstanceRecord]{
669+
PageInfo: descriptors.PageInfo{TotalResults: 2},
670+
Records: []repositories.ServiceInstanceRecord{
671+
{GUID: "service-inst-guid-1", Type: korifiv1alpha1.ManagedType, PlanGUID: "service-plan-guid"},
672+
{GUID: "service-inst-guid-2", Type: korifiv1alpha1.ManagedType, PlanGUID: "service-plan-guid"},
673+
},
674+
}, nil)
667675
})
668676

669677
It("includes offering fields in the response", func() {
@@ -694,10 +702,14 @@ var _ = Describe("ServiceInstance", func() {
694702

695703
When("the service instance is managed", func() {
696704
BeforeEach(func() {
697-
serviceInstanceRepo.ListServiceInstancesReturns([]repositories.ServiceInstanceRecord{
698-
{GUID: "service-inst-guid-1", Type: korifiv1alpha1.ManagedType, PlanGUID: "service-plan-guid"},
699-
{GUID: "service-inst-guid-2", Type: korifiv1alpha1.ManagedType, PlanGUID: "service-plan-guid"},
700-
}, nil)
705+
serviceInstanceRepo.ListServiceInstancesReturns(
706+
repositories.ListResult[repositories.ServiceInstanceRecord]{
707+
PageInfo: descriptors.PageInfo{TotalResults: 2},
708+
Records: []repositories.ServiceInstanceRecord{
709+
{GUID: "service-inst-guid-1", Type: korifiv1alpha1.ManagedType, PlanGUID: "service-plan-guid"},
710+
{GUID: "service-inst-guid-2", Type: korifiv1alpha1.ManagedType, PlanGUID: "service-plan-guid"},
711+
},
712+
}, nil)
701713
})
702714

703715
It("includes broker fields in the response", func() {
@@ -752,7 +764,7 @@ var _ = Describe("ServiceInstance", func() {
752764

753765
When("there is an error fetching service instances", func() {
754766
BeforeEach(func() {
755-
serviceInstanceRepo.ListServiceInstancesReturns([]repositories.ServiceInstanceRecord{}, errors.New("unknown!"))
767+
serviceInstanceRepo.ListServiceInstancesReturns(repositories.ListResult[repositories.ServiceInstanceRecord]{}, errors.New("unknown!"))
756768
})
757769

758770
It("returns an error", func() {

0 commit comments

Comments
 (0)