mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 13:37:30 +00:00
add asserts for RecognizingDecoder and update protobuf serializer to implement interface
This commit is contained in:
parent
6b523ce6db
commit
f51c1301f2
@ -25,6 +25,7 @@ import (
|
|||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
|
"k8s.io/kubernetes/pkg/runtime/serializer/recognizer"
|
||||||
"k8s.io/kubernetes/pkg/util/framer"
|
"k8s.io/kubernetes/pkg/util/framer"
|
||||||
utilyaml "k8s.io/kubernetes/pkg/util/yaml"
|
utilyaml "k8s.io/kubernetes/pkg/util/yaml"
|
||||||
)
|
)
|
||||||
@ -63,6 +64,7 @@ type Serializer struct {
|
|||||||
|
|
||||||
// Serializer implements Serializer
|
// Serializer implements Serializer
|
||||||
var _ runtime.Serializer = &Serializer{}
|
var _ runtime.Serializer = &Serializer{}
|
||||||
|
var _ recognizer.RecognizingDecoder = &Serializer{}
|
||||||
|
|
||||||
// Decode attempts to convert the provided data into YAML or JSON, extract the stored schema kind, apply the provided default gvk, and then
|
// Decode attempts to convert the provided data into YAML or JSON, extract the stored schema kind, apply the provided default gvk, and then
|
||||||
// load that data into an object matching the desired schema kind or the provided into. If into is *runtime.Unknown, the raw data will be
|
// load that data into an object matching the desired schema kind or the provided into. If into is *runtime.Unknown, the raw data will be
|
||||||
|
@ -26,6 +26,7 @@ import (
|
|||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
|
"k8s.io/kubernetes/pkg/runtime/serializer/recognizer"
|
||||||
"k8s.io/kubernetes/pkg/util/framer"
|
"k8s.io/kubernetes/pkg/util/framer"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -76,6 +77,7 @@ type Serializer struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var _ runtime.Serializer = &Serializer{}
|
var _ runtime.Serializer = &Serializer{}
|
||||||
|
var _ recognizer.RecognizingDecoder = &Serializer{}
|
||||||
|
|
||||||
// Decode attempts to convert the provided data into a protobuf message, extract the stored schema kind, apply the provided default
|
// Decode attempts to convert the provided data into a protobuf message, extract the stored schema kind, apply the provided default
|
||||||
// gvk, and then load that data into an object matching the desired schema kind or the provided into. If into is *runtime.Unknown,
|
// gvk, and then load that data into an object matching the desired schema kind or the provided into. If into is *runtime.Unknown,
|
||||||
@ -124,7 +126,7 @@ func (s *Serializer) Decode(originalData []byte, gvk *unversioned.GroupVersionKi
|
|||||||
|
|
||||||
if intoUnknown, ok := into.(*runtime.Unknown); ok && intoUnknown != nil {
|
if intoUnknown, ok := into.(*runtime.Unknown); ok && intoUnknown != nil {
|
||||||
*intoUnknown = unk
|
*intoUnknown = unk
|
||||||
if ok, _ := s.RecognizesData(bytes.NewBuffer(unk.Raw)); ok {
|
if ok, _, _ := s.RecognizesData(bytes.NewBuffer(unk.Raw)); ok {
|
||||||
intoUnknown.ContentType = s.contentType
|
intoUnknown.ContentType = s.contentType
|
||||||
}
|
}
|
||||||
return intoUnknown, &actual, nil
|
return intoUnknown, &actual, nil
|
||||||
@ -237,19 +239,19 @@ func (s *Serializer) Encode(obj runtime.Object, w io.Writer) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// RecognizesData implements the RecognizingDecoder interface.
|
// RecognizesData implements the RecognizingDecoder interface.
|
||||||
func (s *Serializer) RecognizesData(peek io.Reader) (bool, error) {
|
func (s *Serializer) RecognizesData(peek io.Reader) (bool, bool, error) {
|
||||||
prefix := make([]byte, 4)
|
prefix := make([]byte, 4)
|
||||||
n, err := peek.Read(prefix)
|
n, err := peek.Read(prefix)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err == io.EOF {
|
if err == io.EOF {
|
||||||
return false, nil
|
return false, false, nil
|
||||||
}
|
}
|
||||||
return false, err
|
return false, false, err
|
||||||
}
|
}
|
||||||
if n != 4 {
|
if n != 4 {
|
||||||
return false, nil
|
return false, false, nil
|
||||||
}
|
}
|
||||||
return bytes.Equal(s.prefix, prefix), nil
|
return bytes.Equal(s.prefix, prefix), false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// copyKindDefaults defaults dst to the value in src if dst does not have a value set.
|
// copyKindDefaults defaults dst to the value in src if dst does not have a value set.
|
||||||
|
@ -79,7 +79,7 @@ func TestRecognize(t *testing.T) {
|
|||||||
{0x6b, 0x38, 0x73, 0x01},
|
{0x6b, 0x38, 0x73, 0x01},
|
||||||
}
|
}
|
||||||
for i, data := range ignores {
|
for i, data := range ignores {
|
||||||
if ok, err := s.RecognizesData(bytes.NewBuffer(data)); err != nil || ok {
|
if ok, _, err := s.RecognizesData(bytes.NewBuffer(data)); err != nil || ok {
|
||||||
t.Errorf("%d: should not recognize data: %v", i, err)
|
t.Errorf("%d: should not recognize data: %v", i, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -88,7 +88,7 @@ func TestRecognize(t *testing.T) {
|
|||||||
{0x6b, 0x38, 0x73, 0x00, 0x01},
|
{0x6b, 0x38, 0x73, 0x00, 0x01},
|
||||||
}
|
}
|
||||||
for i, data := range recognizes {
|
for i, data := range recognizes {
|
||||||
if ok, err := s.RecognizesData(bytes.NewBuffer(data)); err != nil || !ok {
|
if ok, _, err := s.RecognizesData(bytes.NewBuffer(data)); err != nil || !ok {
|
||||||
t.Errorf("%d: should recognize data: %v", i, err)
|
t.Errorf("%d: should recognize data: %v", i, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -184,7 +184,7 @@ func TestEncode(t *testing.T) {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if ok, err := s.RecognizesData(bytes.NewBuffer(data)); !ok || err != nil {
|
if ok, _, err := s.RecognizesData(bytes.NewBuffer(data)); !ok || err != nil {
|
||||||
t.Errorf("%d: did not recognize data generated by call: %v", i, err)
|
t.Errorf("%d: did not recognize data generated by call: %v", i, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package recognizer
|
package testing
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
@ -22,6 +22,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/runtime/serializer/json"
|
"k8s.io/kubernetes/pkg/runtime/serializer/json"
|
||||||
|
"k8s.io/kubernetes/pkg/runtime/serializer/recognizer"
|
||||||
)
|
)
|
||||||
|
|
||||||
type A struct{}
|
type A struct{}
|
||||||
@ -31,7 +32,7 @@ func (A) GetObjectKind() unversioned.ObjectKind { return unversioned.EmptyObject
|
|||||||
func TestRecognizer(t *testing.T) {
|
func TestRecognizer(t *testing.T) {
|
||||||
s := runtime.NewScheme()
|
s := runtime.NewScheme()
|
||||||
s.AddKnownTypes(unversioned.GroupVersion{Version: "v1"}, &A{})
|
s.AddKnownTypes(unversioned.GroupVersion{Version: "v1"}, &A{})
|
||||||
d := NewDecoder(
|
d := recognizer.NewDecoder(
|
||||||
json.NewSerializer(json.DefaultMetaFactory, s, s, false),
|
json.NewSerializer(json.DefaultMetaFactory, s, s, false),
|
||||||
json.NewYAMLSerializer(json.DefaultMetaFactory, s, s),
|
json.NewYAMLSerializer(json.DefaultMetaFactory, s, s),
|
||||||
)
|
)
|
Loading…
Reference in New Issue
Block a user