mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-04 09:49:50 +00:00
let DirectEncoder take a hint of what gvk to set during its construction
This commit is contained in:
parent
66f5d07e05
commit
8af15f4d30
@ -220,9 +220,10 @@ type DirectCodecFactory struct {
|
|||||||
CodecFactory
|
CodecFactory
|
||||||
}
|
}
|
||||||
|
|
||||||
// EncoderForVersion returns an encoder that does not do conversion. gv is ignored.
|
// EncoderForVersion returns an encoder that does not do conversion.
|
||||||
func (f DirectCodecFactory) EncoderForVersion(serializer runtime.Encoder, _ runtime.GroupVersioner) runtime.Encoder {
|
func (f DirectCodecFactory) EncoderForVersion(serializer runtime.Encoder, version runtime.GroupVersioner) runtime.Encoder {
|
||||||
return versioning.DirectEncoder{
|
return versioning.DirectEncoder{
|
||||||
|
Version: version,
|
||||||
Encoder: serializer,
|
Encoder: serializer,
|
||||||
ObjectTyper: f.CodecFactory.scheme,
|
ObjectTyper: f.CodecFactory.scheme,
|
||||||
}
|
}
|
||||||
|
@ -227,6 +227,7 @@ func (c *codec) Encode(obj runtime.Object, w io.Writer) error {
|
|||||||
|
|
||||||
// DirectEncoder serializes an object and ensures the GVK is set.
|
// DirectEncoder serializes an object and ensures the GVK is set.
|
||||||
type DirectEncoder struct {
|
type DirectEncoder struct {
|
||||||
|
Version runtime.GroupVersioner
|
||||||
runtime.Encoder
|
runtime.Encoder
|
||||||
runtime.ObjectTyper
|
runtime.ObjectTyper
|
||||||
}
|
}
|
||||||
@ -242,7 +243,14 @@ func (e DirectEncoder) Encode(obj runtime.Object, stream io.Writer) error {
|
|||||||
}
|
}
|
||||||
kind := obj.GetObjectKind()
|
kind := obj.GetObjectKind()
|
||||||
oldGVK := kind.GroupVersionKind()
|
oldGVK := kind.GroupVersionKind()
|
||||||
kind.SetGroupVersionKind(gvks[0])
|
gvk := gvks[0]
|
||||||
|
if e.Version != nil {
|
||||||
|
preferredGVK, ok := e.Version.KindForGroupVersionKinds(gvks)
|
||||||
|
if ok {
|
||||||
|
gvk = preferredGVK
|
||||||
|
}
|
||||||
|
}
|
||||||
|
kind.SetGroupVersionKind(gvk)
|
||||||
err = e.Encoder.Encode(obj, stream)
|
err = e.Encoder.Encode(obj, stream)
|
||||||
kind.SetGroupVersionKind(oldGVK)
|
kind.SetGroupVersionKind(oldGVK)
|
||||||
return err
|
return err
|
||||||
|
@ -329,8 +329,9 @@ func (c *checkConvertor) ConvertFieldLabel(version, kind, label, value string) (
|
|||||||
}
|
}
|
||||||
|
|
||||||
type mockSerializer struct {
|
type mockSerializer struct {
|
||||||
err error
|
err error
|
||||||
obj runtime.Object
|
obj runtime.Object
|
||||||
|
encodingObjGVK schema.GroupVersionKind
|
||||||
|
|
||||||
defaults, actual *schema.GroupVersionKind
|
defaults, actual *schema.GroupVersionKind
|
||||||
into runtime.Object
|
into runtime.Object
|
||||||
@ -344,6 +345,7 @@ func (s *mockSerializer) Decode(data []byte, defaults *schema.GroupVersionKind,
|
|||||||
|
|
||||||
func (s *mockSerializer) Encode(obj runtime.Object, w io.Writer) error {
|
func (s *mockSerializer) Encode(obj runtime.Object, w io.Writer) error {
|
||||||
s.obj = obj
|
s.obj = obj
|
||||||
|
s.encodingObjGVK = obj.GetObjectKind().GroupVersionKind()
|
||||||
return s.err
|
return s.err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -369,3 +371,29 @@ func (t *mockTyper) ObjectKinds(obj runtime.Object) ([]schema.GroupVersionKind,
|
|||||||
func (t *mockTyper) Recognizes(_ schema.GroupVersionKind) bool {
|
func (t *mockTyper) Recognizes(_ schema.GroupVersionKind) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDirectCodecEncode(t *testing.T) {
|
||||||
|
serializer := mockSerializer{}
|
||||||
|
typer := mockTyper{
|
||||||
|
gvks: []schema.GroupVersionKind{
|
||||||
|
{
|
||||||
|
Group: "wrong_group",
|
||||||
|
Kind: "some_kind",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Group: "expected_group",
|
||||||
|
Kind: "some_kind",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
c := DirectEncoder{
|
||||||
|
Version: schema.GroupVersion{Group: "expected_group"},
|
||||||
|
Encoder: &serializer,
|
||||||
|
ObjectTyper: &typer,
|
||||||
|
}
|
||||||
|
c.Encode(&testDecodable{}, ioutil.Discard)
|
||||||
|
if e, a := "expected_group", serializer.encodingObjGVK.Group; e != a {
|
||||||
|
t.Errorf("expected group to be %v, got %v", e, a)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user