Skip to content

Commit 5ed1b8f

Browse files
committed
check pod name with that in binding object
1 parent 34cab8f commit 5ed1b8f

File tree

2 files changed

+32
-12
lines changed

2 files changed

+32
-12
lines changed

pkg/registry/core/pod/storage/storage.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,11 +148,18 @@ func (r *BindingREST) New() runtime.Object {
148148
return &api.Binding{}
149149
}
150150

151-
var _ = rest.Creater(&BindingREST{})
151+
var _ = rest.NamedCreater(&BindingREST{})
152152

153153
// Create ensures a pod is bound to a specific host.
154-
func (r *BindingREST) Create(ctx context.Context, obj runtime.Object, createValidation rest.ValidateObjectFunc, options *metav1.CreateOptions) (out runtime.Object, err error) {
155-
binding := obj.(*api.Binding)
154+
func (r *BindingREST) Create(ctx context.Context, name string, obj runtime.Object, createValidation rest.ValidateObjectFunc, options *metav1.CreateOptions) (out runtime.Object, err error) {
155+
binding, ok := obj.(*api.Binding)
156+
if !ok {
157+
return nil, errors.NewBadRequest(fmt.Sprintf("not a Binding object: %#v", obj))
158+
}
159+
160+
if name != binding.Name {
161+
return nil, errors.NewBadRequest("name in URL does not match name in Binding object")
162+
}
156163

157164
// TODO: move me to a binding strategy
158165
if errs := validation.ValidatePodBinding(binding); len(errs) != 0 {

pkg/registry/core/pod/storage/storage_test.go

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -587,7 +587,7 @@ func TestEtcdCreate(t *testing.T) {
587587
}
588588

589589
// Suddenly, a wild scheduler appears:
590-
_, err = bindingStorage.Create(ctx, &api.Binding{
590+
_, err = bindingStorage.Create(ctx, "foo", &api.Binding{
591591
ObjectMeta: metav1.ObjectMeta{Namespace: metav1.NamespaceDefault, Name: "foo"},
592592
Target: api.ObjectReference{Name: "machine"},
593593
}, rest.ValidateAllObjectFunc, &metav1.CreateOptions{})
@@ -613,7 +613,7 @@ func TestEtcdCreateBindingNoPod(t *testing.T) {
613613
// - Create (apiserver)
614614
// - Schedule (scheduler)
615615
// - Delete (apiserver)
616-
_, err := bindingStorage.Create(ctx, &api.Binding{
616+
_, err := bindingStorage.Create(ctx, "foo", &api.Binding{
617617
ObjectMeta: metav1.ObjectMeta{Namespace: metav1.NamespaceDefault, Name: "foo"},
618618
Target: api.ObjectReference{Name: "machine"},
619619
}, rest.ValidateAllObjectFunc, &metav1.CreateOptions{})
@@ -657,7 +657,7 @@ func TestEtcdCreateWithContainersNotFound(t *testing.T) {
657657
}
658658

659659
// Suddenly, a wild scheduler appears:
660-
_, err = bindingStorage.Create(ctx, &api.Binding{
660+
_, err = bindingStorage.Create(ctx, "foo", &api.Binding{
661661
ObjectMeta: metav1.ObjectMeta{
662662
Namespace: metav1.NamespaceDefault,
663663
Name: "foo",
@@ -700,12 +700,12 @@ func TestEtcdCreateWithConflict(t *testing.T) {
700700
},
701701
Target: api.ObjectReference{Name: "machine"},
702702
}
703-
_, err = bindingStorage.Create(ctx, &binding, rest.ValidateAllObjectFunc, &metav1.CreateOptions{})
703+
_, err = bindingStorage.Create(ctx, binding.Name, &binding, rest.ValidateAllObjectFunc, &metav1.CreateOptions{})
704704
if err != nil {
705705
t.Fatalf("unexpected error: %v", err)
706706
}
707707

708-
_, err = bindingStorage.Create(ctx, &binding, rest.ValidateAllObjectFunc, &metav1.CreateOptions{})
708+
_, err = bindingStorage.Create(ctx, binding.Name, &binding, rest.ValidateAllObjectFunc, &metav1.CreateOptions{})
709709
if err == nil || !errors.IsConflict(err) {
710710
t.Fatalf("expected resource conflict error, not: %v", err)
711711
}
@@ -722,7 +722,7 @@ func TestEtcdCreateWithExistingContainers(t *testing.T) {
722722
}
723723

724724
// Suddenly, a wild scheduler appears:
725-
_, err = bindingStorage.Create(ctx, &api.Binding{
725+
_, err = bindingStorage.Create(ctx, "foo", &api.Binding{
726726
ObjectMeta: metav1.ObjectMeta{Namespace: metav1.NamespaceDefault, Name: "foo"},
727727
Target: api.ObjectReference{Name: "machine"},
728728
}, rest.ValidateAllObjectFunc, &metav1.CreateOptions{})
@@ -740,8 +740,9 @@ func TestEtcdCreateBinding(t *testing.T) {
740740
ctx := genericapirequest.NewDefaultContext()
741741

742742
testCases := map[string]struct {
743-
binding api.Binding
744-
errOK func(error) bool
743+
binding api.Binding
744+
badNameInURL bool
745+
errOK func(error) bool
745746
}{
746747
"noName": {
747748
binding: api.Binding{
@@ -750,6 +751,14 @@ func TestEtcdCreateBinding(t *testing.T) {
750751
},
751752
errOK: func(err error) bool { return err != nil },
752753
},
754+
"badNameInURL": {
755+
binding: api.Binding{
756+
ObjectMeta: metav1.ObjectMeta{Namespace: metav1.NamespaceDefault, Name: "foo"},
757+
Target: api.ObjectReference{},
758+
},
759+
badNameInURL: true,
760+
errOK: func(err error) bool { return err != nil },
761+
},
753762
"badKind": {
754763
binding: api.Binding{
755764
ObjectMeta: metav1.ObjectMeta{Namespace: metav1.NamespaceDefault, Name: "foo"},
@@ -778,7 +787,11 @@ func TestEtcdCreateBinding(t *testing.T) {
778787
if _, err := storage.Create(ctx, validNewPod(), rest.ValidateAllObjectFunc, &metav1.CreateOptions{}); err != nil {
779788
t.Fatalf("%s: unexpected error: %v", k, err)
780789
}
781-
if _, err := bindingStorage.Create(ctx, &test.binding, rest.ValidateAllObjectFunc, &metav1.CreateOptions{}); !test.errOK(err) {
790+
name := test.binding.Name
791+
if test.badNameInURL {
792+
name += "badNameInURL"
793+
}
794+
if _, err := bindingStorage.Create(ctx, name, &test.binding, rest.ValidateAllObjectFunc, &metav1.CreateOptions{}); !test.errOK(err) {
782795
t.Errorf("%s: unexpected error: %v", k, err)
783796
} else if err == nil {
784797
// If bind succeeded, verify Host field in pod's Spec.

0 commit comments

Comments
 (0)