Skip to content
This repository was archived by the owner on Apr 3, 2023. It is now read-only.

Commit 447823b

Browse files
committed
Add handling for method that use Pages() to retrieve results
Make functions take in *Key rather than value type.
1 parent 7dadeee commit 447823b

File tree

7 files changed

+236
-122
lines changed

7 files changed

+236
-122
lines changed

pkg/cloudprovider/providers/gce/cloud/gen/main.go

+65-49
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ type {{.WrapType}} interface {
276276
{{.WrapTypeOps}}
277277
{{- end}}
278278
{{- if .GenerateGet}}
279-
Get(ctx context.Context, key meta.Key) (*{{.FQObjectType}}, error)
279+
Get(ctx context.Context, key *meta.Key) (*{{.FQObjectType}}, error)
280280
{{- end -}}
281281
{{- if .GenerateList}}
282282
{{- if .KeyIsGlobal}}
@@ -290,10 +290,10 @@ type {{.WrapType}} interface {
290290
{{- end -}}
291291
{{- end -}}
292292
{{- if .GenerateInsert}}
293-
Insert(ctx context.Context, key meta.Key, obj *{{.FQObjectType}}) error
293+
Insert(ctx context.Context, key *meta.Key, obj *{{.FQObjectType}}) error
294294
{{- end -}}
295295
{{- if .GenerateDelete}}
296-
Delete(ctx context.Context, key meta.Key) error
296+
Delete(ctx context.Context, key *meta.Key) error
297297
{{- end -}}
298298
{{- if .AggregatedList}}
299299
AggregatedList(ctx context.Context, fl *filter.F) (map[string][]*{{.FQObjectType}}, error)
@@ -352,7 +352,7 @@ type {{.MockWrapType}} struct {
352352
// execution flow of the mock. Return (false, nil, nil) to continue with
353353
// normal mock behavior/ after the hook function executes.
354354
{{- if .GenerateGet}}
355-
GetHook func(m *{{.MockWrapType}}, ctx context.Context, key meta.Key) (bool, *{{.FQObjectType}}, error)
355+
GetHook func(m *{{.MockWrapType}}, ctx context.Context, key *meta.Key) (bool, *{{.FQObjectType}}, error)
356356
{{- end -}}
357357
{{- if .GenerateList}}
358358
{{- if .KeyIsGlobal}}
@@ -366,10 +366,10 @@ type {{.MockWrapType}} struct {
366366
{{- end}}
367367
{{- end -}}
368368
{{- if .GenerateInsert}}
369-
InsertHook func(m *{{.MockWrapType}}, ctx context.Context, key meta.Key, obj *{{.FQObjectType}}) (bool, error)
369+
InsertHook func(m *{{.MockWrapType}}, ctx context.Context, key *meta.Key, obj *{{.FQObjectType}}) (bool, error)
370370
{{- end -}}
371371
{{- if .GenerateDelete}}
372-
DeleteHook func(m *{{.MockWrapType}}, ctx context.Context, key meta.Key) (bool, error)
372+
DeleteHook func(m *{{.MockWrapType}}, ctx context.Context, key *meta.Key) (bool, error)
373373
{{- end -}}
374374
{{- if .AggregatedList}}
375375
AggregatedListHook func(m *{{.MockWrapType}}, ctx context.Context, fl *filter.F) (bool, map[string][]*{{.FQObjectType}}, error)
@@ -388,7 +388,7 @@ type {{.MockWrapType}} struct {
388388
389389
{{- if .GenerateGet}}
390390
// Get returns the object from the mock.
391-
func (m *{{.MockWrapType}}) Get(ctx context.Context, key meta.Key) (*{{.FQObjectType}}, error) {
391+
func (m *{{.MockWrapType}}) Get(ctx context.Context, key *meta.Key) (*{{.FQObjectType}}, error) {
392392
if m.GetHook != nil {
393393
if intercept, obj, err := m.GetHook(m, ctx, key); intercept {
394394
glog.V(5).Infof("{{.MockWrapType}}.Get(%v, %s) = %+v, %v", ctx, key, obj ,err)
@@ -399,11 +399,11 @@ func (m *{{.MockWrapType}}) Get(ctx context.Context, key meta.Key) (*{{.FQObject
399399
m.Lock.Lock()
400400
defer m.Lock.Unlock()
401401
402-
if err, ok := m.GetError[key]; ok {
402+
if err, ok := m.GetError[*key]; ok {
403403
glog.V(5).Infof("{{.MockWrapType}}.Get(%v, %s) = nil, %v", ctx, key, err)
404404
return nil, err
405405
}
406-
if obj, ok := m.Objects[key]; ok {
406+
if obj, ok := m.Objects[*key]; ok {
407407
typedObj := obj.To{{.VersionTitle}}()
408408
glog.V(5).Infof("{{.MockWrapType}}.Get(%v, %s) = %+v, nil", ctx, key, typedObj)
409409
return typedObj, nil
@@ -503,7 +503,7 @@ func (m *{{.MockWrapType}}) List(ctx context.Context, zone string, fl *filter.F)
503503
504504
{{- if .GenerateInsert}}
505505
// Insert is a mock for inserting/creating a new object.
506-
func (m *{{.MockWrapType}}) Insert(ctx context.Context, key meta.Key, obj *{{.FQObjectType}}) error {
506+
func (m *{{.MockWrapType}}) Insert(ctx context.Context, key *meta.Key, obj *{{.FQObjectType}}) error {
507507
if m.InsertHook != nil {
508508
if intercept, err := m.InsertHook(m, ctx, key, obj); intercept {
509509
glog.V(5).Infof("{{.MockWrapType}}.Insert(%v, %v, %+v) = %v", ctx, key, obj, err)
@@ -514,11 +514,11 @@ func (m *{{.MockWrapType}}) Insert(ctx context.Context, key meta.Key, obj *{{.FQ
514514
m.Lock.Lock()
515515
defer m.Lock.Unlock()
516516
517-
if err, ok := m.InsertError[key]; ok {
517+
if err, ok := m.InsertError[*key]; ok {
518518
glog.V(5).Infof("{{.MockWrapType}}.Insert(%v, %v, %+v) = %v", ctx, key, obj, err)
519519
return err
520520
}
521-
if _, ok := m.Objects[key]; ok {
521+
if _, ok := m.Objects[*key]; ok {
522522
err := &googleapi.Error{
523523
Code: http.StatusConflict,
524524
Message: fmt.Sprintf("{{.MockWrapType}} %v exists", key),
@@ -532,15 +532,15 @@ func (m *{{.MockWrapType}}) Insert(ctx context.Context, key meta.Key, obj *{{.FQ
532532
obj.SelfLink = SelfLink(meta.Version{{.VersionTitle}}, "mock-project", "{{.Resource}}", key)
533533
}
534534
535-
m.Objects[key] = &Mock{{.Service}}Obj{obj}
535+
m.Objects[*key] = &Mock{{.Service}}Obj{obj}
536536
glog.V(5).Infof("{{.MockWrapType}}.Insert(%v, %v, %+v) = nil", ctx, key, obj)
537537
return nil
538538
}
539539
{{- end}}
540540
541541
{{- if .GenerateDelete}}
542542
// Delete is a mock for deleting the object.
543-
func (m *{{.MockWrapType}}) Delete(ctx context.Context, key meta.Key) error {
543+
func (m *{{.MockWrapType}}) Delete(ctx context.Context, key *meta.Key) error {
544544
if m.DeleteHook != nil {
545545
if intercept, err := m.DeleteHook(m, ctx, key); intercept {
546546
glog.V(5).Infof("{{.MockWrapType}}.Delete(%v, %v) = %v", ctx, key, err)
@@ -551,11 +551,11 @@ func (m *{{.MockWrapType}}) Delete(ctx context.Context, key meta.Key) error {
551551
m.Lock.Lock()
552552
defer m.Lock.Unlock()
553553
554-
if err, ok := m.DeleteError[key]; ok {
554+
if err, ok := m.DeleteError[*key]; ok {
555555
glog.V(5).Infof("{{.MockWrapType}}.Delete(%v, %v) = %v", ctx, key, err)
556556
return err
557557
}
558-
if _, ok := m.Objects[key]; !ok {
558+
if _, ok := m.Objects[*key]; !ok {
559559
err := &googleapi.Error{
560560
Code: http.StatusNotFound,
561561
Message: fmt.Sprintf("{{.MockWrapType}} %v not found", key),
@@ -564,7 +564,7 @@ func (m *{{.MockWrapType}}) Delete(ctx context.Context, key meta.Key) error {
564564
return err
565565
}
566566
567-
delete(m.Objects, key)
567+
delete(m.Objects, *key)
568568
glog.V(5).Infof("{{.MockWrapType}}.Delete(%v, %v) = nil", ctx, key)
569569
return nil
570570
}
@@ -621,16 +621,21 @@ func (m *{{.MockWrapType}}) Obj(o *{{.FQObjectType}}) *Mock{{.Service}}Obj {
621621
{{- range .}}
622622
// {{.Name}} is a mock for the corresponding method.
623623
func (m *{{.MockWrapType}}) {{.FcnArgs}} {
624-
{{- if eq .ReturnType "Operation"}}
624+
{{- if .IsOperation }}
625625
if m.{{.MockHookName}} != nil {
626626
return m.{{.MockHookName}}(m, ctx, key {{.CallArgs}})
627627
}
628628
return nil
629-
{{- else}}
629+
{{- else if .IsGet}}
630630
if m.{{.MockHookName}} != nil {
631631
return m.{{.MockHookName}}(m, ctx, key {{.CallArgs}})
632632
}
633633
return nil, fmt.Errorf("{{.MockHookName}} must be set")
634+
{{- else if .IsPaged}}
635+
if m.{{.MockHookName}} != nil {
636+
return m.{{.MockHookName}}(m, ctx, key {{.CallArgs}}, fl)
637+
}
638+
return nil, nil
634639
{{- end}}
635640
}
636641
{{end -}}
@@ -642,7 +647,7 @@ type {{.GCEWrapType}} struct {
642647
643648
{{- if .GenerateGet}}
644649
// Get the {{.Object}} named by key.
645-
func (g *{{.GCEWrapType}}) Get(ctx context.Context, key meta.Key) (*{{.FQObjectType}}, error) {
650+
func (g *{{.GCEWrapType}}) Get(ctx context.Context, key *meta.Key) (*{{.FQObjectType}}, error) {
646651
projectID := g.s.ProjectRouter.ProjectID(ctx, "{{.Version}}", "{{.Service}}")
647652
rk := &RateLimitKey{
648653
ProjectID: projectID,
@@ -714,7 +719,7 @@ rk := &RateLimitKey{
714719
715720
{{- if .GenerateInsert}}
716721
// Insert {{.Object}} with key of value obj.
717-
func (g *{{.GCEWrapType}}) Insert(ctx context.Context, key meta.Key, obj *{{.FQObjectType}}) error {
722+
func (g *{{.GCEWrapType}}) Insert(ctx context.Context, key *meta.Key, obj *{{.FQObjectType}}) error {
718723
projectID := g.s.ProjectRouter.ProjectID(ctx, "{{.Version}}", "{{.Service}}")
719724
rk := &RateLimitKey{
720725
ProjectID: projectID,
@@ -747,7 +752,7 @@ func (g *{{.GCEWrapType}}) Insert(ctx context.Context, key meta.Key, obj *{{.FQO
747752
748753
{{- if .GenerateDelete}}
749754
// Delete the {{.Object}} referenced by key.
750-
func (g *{{.GCEWrapType}}) Delete(ctx context.Context, key meta.Key) error {
755+
func (g *{{.GCEWrapType}}) Delete(ctx context.Context, key *meta.Key) error {
751756
projectID := g.s.ProjectRouter.ProjectID(ctx, "{{.Version}}", "{{.Service}}")
752757
rk := &RateLimitKey{
753758
ProjectID: projectID,
@@ -823,7 +828,7 @@ func (g *{{.GCEWrapType}}) {{.FcnArgs}} {
823828
Service: "{{.Service}}",
824829
}
825830
if err := g.s.RateLimiter.Accept(ctx, rk); err != nil {
826-
{{- if eq .ReturnType "Operation"}}
831+
{{- if .IsOperation}}
827832
return err
828833
{{- else}}
829834
return nil, err
@@ -838,15 +843,26 @@ func (g *{{.GCEWrapType}}) {{.FcnArgs}} {
838843
{{- if .KeyIsZonal}}
839844
call := g.s.{{.VersionTitle}}.{{.Service}}.{{.Name}}(projectID, key.Zone, key.Name {{.CallArgs}})
840845
{{- end}}
846+
{{- if .IsOperation}}
841847
call.Context(ctx)
842-
{{- if eq .ReturnType "Operation"}}
843848
op, err := call.Do()
844849
if err != nil {
845850
return err
846851
}
847852
return g.s.WaitForCompletion(ctx, op)
848-
{{- else}}
853+
{{- else if .IsGet}}
854+
call.Context(ctx)
849855
return call.Do()
856+
{{- else if .IsPaged}}
857+
var all []*{{.Version}}.{{.ItemType}}
858+
f := func(l *{{.Version}}.{{.ReturnType}}) error {
859+
all = append(all, l.Items...)
860+
return nil
861+
}
862+
if err := call.Pages(ctx, f); err != nil {
863+
return nil, err
864+
}
865+
return all, nil
850866
{{- end}}
851867
}
852868
{{end -}}
@@ -933,17 +949,17 @@ func Test{{.Service}}Group(t *testing.T) {
933949
934950
// Get not found.
935951
{{- if .HasAlpha}}{{- if .Alpha.GenerateGet}}
936-
if _, err := mock.Alpha{{.Service}}().Get(ctx, *key); err == nil {
952+
if _, err := mock.Alpha{{.Service}}().Get(ctx, key); err == nil {
937953
t.Errorf("Alpha{{.Service}}().Get(%v, %v) = _, nil; want error", ctx, key)
938954
}
939955
{{- end}}{{- end}}
940956
{{- if .HasBeta}}{{- if .Beta.GenerateGet}}
941-
if _, err := mock.Beta{{.Service}}().Get(ctx, *key); err == nil {
957+
if _, err := mock.Beta{{.Service}}().Get(ctx, key); err == nil {
942958
t.Errorf("Beta{{.Service}}().Get(%v, %v) = _, nil; want error", ctx, key)
943959
}
944960
{{- end}}{{- end}}
945961
{{- if .HasGA}}{{- if .GA.GenerateGet}}
946-
if _, err := mock.{{.Service}}().Get(ctx, *key); err == nil {
962+
if _, err := mock.{{.Service}}().Get(ctx, key); err == nil {
947963
t.Errorf("{{.Service}}().Get(%v, %v) = _, nil; want error", ctx, key)
948964
}
949965
{{- end}}{{- end}}
@@ -952,41 +968,41 @@ func Test{{.Service}}Group(t *testing.T) {
952968
{{- if .HasAlpha}}{{- if .Alpha.GenerateInsert}}
953969
{
954970
obj := &alpha.{{.Alpha.Object}}{}
955-
if err := mock.Alpha{{.Service}}().Insert(ctx, *keyAlpha, obj); err != nil {
956-
t.Errorf("Alpha{{.Service}}().Insert(%v, %v, %v) = %v; want nil", ctx, key, obj, err)
971+
if err := mock.Alpha{{.Service}}().Insert(ctx, keyAlpha, obj); err != nil {
972+
t.Errorf("Alpha{{.Service}}().Insert(%v, %v, %v) = %v; want nil", ctx, keyAlpha, obj, err)
957973
}
958974
}
959975
{{- end}}{{- end}}
960976
{{- if .HasBeta}}{{- if .Beta.GenerateInsert}}
961977
{
962978
obj := &beta.{{.Beta.Object}}{}
963-
if err := mock.Beta{{.Service}}().Insert(ctx, *keyBeta, obj); err != nil {
964-
t.Errorf("Beta{{.Service}}().Insert(%v, %v, %v) = %v; want nil", ctx, key, obj, err)
979+
if err := mock.Beta{{.Service}}().Insert(ctx, keyBeta, obj); err != nil {
980+
t.Errorf("Beta{{.Service}}().Insert(%v, %v, %v) = %v; want nil", ctx, keyBeta, obj, err)
965981
}
966982
}
967983
{{- end}}{{- end}}
968984
{{- if .HasGA}}{{- if .GA.GenerateInsert}}
969985
{
970986
obj := &ga.{{.GA.Object}}{}
971-
if err := mock.{{.Service}}().Insert(ctx, *keyGA, obj); err != nil {
972-
t.Errorf("{{.Service}}().Insert(%v, %v, %v) = %v; want nil", ctx, key, obj, err)
987+
if err := mock.{{.Service}}().Insert(ctx, keyGA, obj); err != nil {
988+
t.Errorf("{{.Service}}().Insert(%v, %v, %v) = %v; want nil", ctx, keyGA, obj, err)
973989
}
974990
}
975991
{{- end}}{{- end}}
976992
977993
// Get across versions.
978994
{{- if .HasAlpha}}{{- if .Alpha.GenerateInsert}}
979-
if obj, err := mock.Alpha{{.Service}}().Get(ctx, *key); err != nil {
995+
if obj, err := mock.Alpha{{.Service}}().Get(ctx, key); err != nil {
980996
t.Errorf("Alpha{{.Service}}().Get(%v, %v) = %v, %v; want nil", ctx, key, obj, err)
981997
}
982998
{{- end}}{{- end}}
983999
{{- if .HasBeta}}{{- if .Beta.GenerateInsert}}
984-
if obj, err := mock.Beta{{.Service}}().Get(ctx, *key); err != nil {
1000+
if obj, err := mock.Beta{{.Service}}().Get(ctx, key); err != nil {
9851001
t.Errorf("Beta{{.Service}}().Get(%v, %v) = %v, %v; want nil", ctx, key, obj, err)
9861002
}
9871003
{{- end}}{{- end}}
9881004
{{- if .HasGA}}{{- if .GA.GenerateInsert}}
989-
if obj, err := mock.{{.Service}}().Get(ctx, *key); err != nil {
1005+
if obj, err := mock.{{.Service}}().Get(ctx, key); err != nil {
9901006
t.Errorf("{{.Service}}().Get(%v, %v) = %v, %v; want nil", ctx, key, obj, err)
9911007
}
9921008
{{- end}}{{- end}}
@@ -1077,35 +1093,35 @@ func Test{{.Service}}Group(t *testing.T) {
10771093
10781094
// Delete across versions.
10791095
{{- if .HasAlpha}}{{- if .Alpha.GenerateDelete}}
1080-
if err := mock.Alpha{{.Service}}().Delete(ctx, *keyAlpha); err != nil {
1081-
t.Errorf("Alpha{{.Service}}().Delete(%v, %v) = %v; want nil", ctx, key, err)
1096+
if err := mock.Alpha{{.Service}}().Delete(ctx, keyAlpha); err != nil {
1097+
t.Errorf("Alpha{{.Service}}().Delete(%v, %v) = %v; want nil", ctx, keyAlpha, err)
10821098
}
10831099
{{- end}}{{- end}}
10841100
{{- if .HasBeta}}{{- if .Beta.GenerateDelete}}
1085-
if err := mock.Beta{{.Service}}().Delete(ctx, *keyBeta); err != nil {
1086-
t.Errorf("Beta{{.Service}}().Delete(%v, %v) = %v; want nil", ctx, key, err)
1101+
if err := mock.Beta{{.Service}}().Delete(ctx, keyBeta); err != nil {
1102+
t.Errorf("Beta{{.Service}}().Delete(%v, %v) = %v; want nil", ctx, keyBeta, err)
10871103
}
10881104
{{- end}}{{- end}}
10891105
{{- if .HasGA}}{{- if .GA.GenerateDelete}}
1090-
if err := mock.{{.Service}}().Delete(ctx, *keyGA); err != nil {
1091-
t.Errorf("{{.Service}}().Delete(%v, %v) = %v; want nil", ctx, key, err)
1106+
if err := mock.{{.Service}}().Delete(ctx, keyGA); err != nil {
1107+
t.Errorf("{{.Service}}().Delete(%v, %v) = %v; want nil", ctx, keyGA, err)
10921108
}
10931109
{{- end}}{{- end}}
10941110
10951111
// Delete not found.
10961112
{{- if .HasAlpha}}{{- if .Alpha.GenerateDelete}}
1097-
if err := mock.Alpha{{.Service}}().Delete(ctx, *keyAlpha); err == nil {
1098-
t.Errorf("Alpha{{.Service}}().Delete(%v, %v) = nil; want error", ctx, key)
1113+
if err := mock.Alpha{{.Service}}().Delete(ctx, keyAlpha); err == nil {
1114+
t.Errorf("Alpha{{.Service}}().Delete(%v, %v) = nil; want error", ctx, keyAlpha)
10991115
}
11001116
{{- end}}{{- end}}
11011117
{{- if .HasBeta}}{{- if .Beta.GenerateDelete}}
1102-
if err := mock.Beta{{.Service}}().Delete(ctx, *keyBeta); err == nil {
1103-
t.Errorf("Beta{{.Service}}().Delete(%v, %v) = nil; want error", ctx, key)
1118+
if err := mock.Beta{{.Service}}().Delete(ctx, keyBeta); err == nil {
1119+
t.Errorf("Beta{{.Service}}().Delete(%v, %v) = nil; want error", ctx, keyBeta)
11041120
}
11051121
{{- end}}{{- end}}
11061122
{{- if .HasGA}}{{- if .GA.GenerateDelete}}
1107-
if err := mock.{{.Service}}().Delete(ctx, *keyGA); err == nil {
1108-
t.Errorf("{{.Service}}().Delete(%v, %v) = nil; want error", ctx, key)
1123+
if err := mock.{{.Service}}().Delete(ctx, keyGA); err == nil {
1124+
t.Errorf("{{.Service}}().Delete(%v, %v) = nil; want error", ctx, keyGA)
11091125
}
11101126
{{- end}}{{- end}}
11111127
}

pkg/cloudprovider/providers/gce/cloud/meta/BUILD

-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ go_library(
1212
importpath = "k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta",
1313
visibility = ["//visibility:public"],
1414
deps = [
15-
"//vendor/github.com/golang/glog:go_default_library",
1615
"//vendor/google.golang.org/api/compute/v0.alpha:go_default_library",
1716
"//vendor/google.golang.org/api/compute/v0.beta:go_default_library",
1817
"//vendor/google.golang.org/api/compute/v1:go_default_library",

pkg/cloudprovider/providers/gce/cloud/meta/meta.go

+13
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,18 @@ var AllServices = []*ServiceInfo{
115115
serviceType: reflect.TypeOf(&alpha.BackendServicesService{}),
116116
additionalMethods: []string{"Update"},
117117
},
118+
{
119+
Object: "BackendService",
120+
Service: "RegionBackendServices",
121+
Resource: "backendServices",
122+
version: VersionGA,
123+
keyType: Regional,
124+
serviceType: reflect.TypeOf(&ga.RegionBackendServicesService{}),
125+
additionalMethods: []string{
126+
"GetHealth",
127+
"Update",
128+
},
129+
},
118130
{
119131
Object: "BackendService",
120132
Service: "RegionBackendServices",
@@ -285,6 +297,7 @@ var AllServices = []*ServiceInfo{
285297
additionalMethods: []string{
286298
"AttachNetworkEndpoints",
287299
"DetachNetworkEndpoints",
300+
"ListNetworkEndpoints",
288301
},
289302
options: AggregatedList,
290303
},

0 commit comments

Comments
 (0)