From c797efac046a69d2f66832e0e4f75e2a739c5eee Mon Sep 17 00:00:00 2001 From: Antoine Pelisse Date: Wed, 2 Nov 2022 09:05:28 -0700 Subject: [PATCH] Use Swagger#MarshalNext where possible --- pkg/aggregator/aggregator_test.go | 6 +++--- pkg/builder/openapi_test.go | 9 ++++++--- pkg/handler/handler.go | 3 +-- pkg/handler/handler_test.go | 2 +- pkg/openapiconv/convert_test.go | 9 +++++---- pkg/schemamutation/walker_test.go | 10 +++++----- pkg/validation/spec/gnostic_test.go | 19 ++++++++++--------- pkg/validation/spec/swagger_test.go | 4 ++-- 8 files changed, 33 insertions(+), 29 deletions(-) diff --git a/pkg/aggregator/aggregator_test.go b/pkg/aggregator/aggregator_test.go index d9241afec..cb961ddd7 100644 --- a/pkg/aggregator/aggregator_test.go +++ b/pkg/aggregator/aggregator_test.go @@ -35,7 +35,7 @@ type DebugSpec struct { } func (d DebugSpec) String() string { - bytes, err := json.MarshalIndent(d.Swagger, "", " ") + bytes, err := d.Swagger.MarshalNext() if err != nil { return fmt.Sprintf("DebugSpec.String failed: %s", err) } @@ -1762,7 +1762,7 @@ func BenchmarkMergeSpecsIgnorePathConflictsWithKubeSpec(b *testing.B) { } } - specBytes, _ := json.Marshal(sp) + specBytes, _ := sp.MarshalNext() handler.ToProtoBinary(specBytes) b.StopTimer() @@ -2003,7 +2003,7 @@ func TestCloneSpec(t *testing.T) { } func cloneSpec(source *spec.Swagger) (*spec.Swagger, error) { - bytes, err := json.Marshal(source) + bytes, err := source.MarshalNext() if err != nil { return nil, err } diff --git a/pkg/builder/openapi_test.go b/pkg/builder/openapi_test.go index e71a49e49..3ce3e6af1 100644 --- a/pkg/builder/openapi_test.go +++ b/pkg/builder/openapi_test.go @@ -26,6 +26,7 @@ import ( "github.com/emicklei/go-restful/v3" "github.com/stretchr/testify/assert" openapi "k8s.io/kube-openapi/pkg/common" + "k8s.io/kube-openapi/pkg/util/jsontesting" "k8s.io/kube-openapi/pkg/validation/spec" ) @@ -467,15 +468,17 @@ func TestBuildOpenAPISpec(t *testing.T) { if !assert.NoError(err) { return } - expected_json, err := json.Marshal(expected) + expected_json, err := expected.MarshalNext() if !assert.NoError(err) { return } - actual_json, err := json.Marshal(swagger) + actual_json, err := swagger.MarshalNext() if !assert.NoError(err) { return } - assert.Equal(string(expected_json), string(actual_json)) + if err := jsontesting.JsonCompare(expected_json, actual_json); err != nil { + t.Error(err) + } } func TestBuildOpenAPIDefinitionsForResource(t *testing.T) { diff --git a/pkg/handler/handler.go b/pkg/handler/handler.go index 7a2590dcb..04be9f580 100644 --- a/pkg/handler/handler.go +++ b/pkg/handler/handler.go @@ -20,7 +20,6 @@ import ( "bytes" "compress/gzip" "crypto/sha512" - "encoding/json" "fmt" "mime" "net/http" @@ -117,7 +116,7 @@ func (o *OpenAPIService) UpdateSpec(openapiSpec *spec.Swagger) (err error) { o.rwMutex.Lock() defer o.rwMutex.Unlock() o.jsonCache = o.jsonCache.New(func() ([]byte, error) { - return json.Marshal(openapiSpec) + return openapiSpec.MarshalNext() }) o.protoCache = o.protoCache.New(func() ([]byte, error) { json, err := o.jsonCache.Get() diff --git a/pkg/handler/handler_test.go b/pkg/handler/handler_test.go index 7f614c2df..6d4328837 100644 --- a/pkg/handler/handler_test.go +++ b/pkg/handler/handler_test.go @@ -25,7 +25,7 @@ func TestRegisterOpenAPIVersionedService(t *testing.T) { t.Errorf("Unexpected error in unmarshalling SwaggerJSON: %v", err) } - returnedJSON, err := json.Marshal(s) + returnedJSON, err := s.MarshalNext() if err != nil { t.Errorf("Unexpected error in preparing returnedJSON: %v", err) } diff --git a/pkg/openapiconv/convert_test.go b/pkg/openapiconv/convert_test.go index 1fae7b9a8..ecfea0481 100644 --- a/pkg/openapiconv/convert_test.go +++ b/pkg/openapiconv/convert_test.go @@ -24,6 +24,7 @@ import ( "testing" "k8s.io/kube-openapi/pkg/spec3" + "k8s.io/kube-openapi/pkg/util/jsontesting" "k8s.io/kube-openapi/pkg/validation/spec" ) @@ -51,19 +52,19 @@ func TestConvert(t *testing.T) { t.Fatal(err) } - openAPIV2JSONBeforeConversion, err := json.Marshal(swaggerSpec) + openAPIV2JSONBeforeConversion, err := swaggerSpec.MarshalNext() if err != nil { t.Fatal(err) } convertedV3Spec := ConvertV2ToV3(&swaggerSpec) - openAPIV2JSONAfterConversion, err := json.Marshal(swaggerSpec) + openAPIV2JSONAfterConversion, err := swaggerSpec.MarshalNext() if err != nil { t.Fatal(err) } - if !reflect.DeepEqual(openAPIV2JSONBeforeConversion, openAPIV2JSONAfterConversion) { - t.Errorf("Expected OpenAPI V2 to be untouched before and after conversion") + if err := jsontesting.JsonCompare(openAPIV2JSONBeforeConversion, openAPIV2JSONAfterConversion); err != nil { + t.Errorf("Expected OpenAPI V2 to be untouched before and after conversion: %v", err) } spec3JSON, err := ioutil.ReadFile(filepath.Join("testdata_generated_from_k8s/v3_" + tc.groupVersion + ".json")) diff --git a/pkg/schemamutation/walker_test.go b/pkg/schemamutation/walker_test.go index 410b30f7e..bf5f86ba0 100644 --- a/pkg/schemamutation/walker_test.go +++ b/pkg/schemamutation/walker_test.go @@ -220,7 +220,7 @@ func TestReplaceReferences(t *testing.T) { } // find refs - bs, err := json.Marshal(s) + bs, err := s.MarshalNext() if err != nil { t.Fatalf("failed to marshal swagger: %v", err) } @@ -244,7 +244,7 @@ func TestReplaceReferences(t *testing.T) { } } - origString, err := json.Marshal(s) + origString, err := s.MarshalNext() if err != nil { t.Fatalf("failed to marshal swagger: %v", err) } @@ -390,13 +390,13 @@ func TestReplaceSchema(t *testing.T) { } func cloneSwagger(orig *spec.Swagger) (*spec.Swagger, error) { - bs, err := json.Marshal(orig) + bs, err := orig.MarshalNext() if err != nil { - return nil, err + return nil, fmt.Errorf("error marshaling: %v", err) } s := &spec.Swagger{} if err := json.Unmarshal(bs, s); err != nil { - return nil, err + return nil, fmt.Errorf("error unmarshaling: %v", err) } return s, nil } diff --git a/pkg/validation/spec/gnostic_test.go b/pkg/validation/spec/gnostic_test.go index e23e199da..af31e5b91 100644 --- a/pkg/validation/spec/gnostic_test.go +++ b/pkg/validation/spec/gnostic_test.go @@ -31,6 +31,7 @@ import ( "github.com/stretchr/testify/require" "google.golang.org/protobuf/proto" "gopkg.in/yaml.v3" + jsontesting "k8s.io/kube-openapi/pkg/util/jsontesting" . "k8s.io/kube-openapi/pkg/validation/spec" ) @@ -43,7 +44,7 @@ func gnosticCommonTest(t testing.TB, fuzzer *fuzz.Fuzzer) { fuzzer.Fuzz(&expected) // Convert to gnostic via JSON to compare - jsonBytes, err := json.Marshal(expected) + jsonBytes, err := expected.MarshalNext() require.NoError(t, err) t.Log("Specimen", string(jsonBytes)) @@ -59,10 +60,10 @@ func gnosticCommonTest(t testing.TB, fuzzer *fuzz.Fuzzer) { t.Fatal(cmp.Diff(expected, actual, SwaggerDiffOptions...)) } - newJsonBytes, err := json.Marshal(actual) + newJsonBytes, err := actual.MarshalNext() require.NoError(t, err) - if !reflect.DeepEqual(jsonBytes, newJsonBytes) { - t.Fatal(cmp.Diff(string(jsonBytes), string(newJsonBytes), SwaggerDiffOptions...)) + if err := jsontesting.JsonCompare(jsonBytes, newJsonBytes); err != nil { + t.Fatal(err) } } @@ -518,19 +519,19 @@ func TestCommonDataLoss(t *testing.T) { // Make sure that they were exactly the same, except for the data loss // by checking JSON encodes the some - badConvertedJSON, err := json.Marshal(badConverted) + badConvertedJSON, err := badConverted.MarshalNext() if err != nil { t.Error(err) return } - fixedConvertedJSON, err := json.Marshal(fixedConverted) + fixedConvertedJSON, err := fixedConverted.MarshalNext() if err != nil { t.Error(err) return } - fixedDirectJSON, err := json.Marshal(fixedDirect) + fixedDirectJSON, err := fixedDirect.MarshalNext() if err != nil { t.Error(err) return @@ -580,13 +581,13 @@ func TestBadStatusCode(t *testing.T) { // Make sure that they were exactly the same, except for the data loss // by checking JSON encodes the some - badConvertedJSON, err := json.Marshal(badConverted) + badConvertedJSON, err := badConverted.MarshalNext() if err != nil { t.Error(err) return } - droppedConvertedJSON, err := json.Marshal(droppedConverted) + droppedConvertedJSON, err := droppedConverted.MarshalNext() if err != nil { t.Error(err) return diff --git a/pkg/validation/spec/swagger_test.go b/pkg/validation/spec/swagger_test.go index db41ccf4e..5ed07cd4b 100644 --- a/pkg/validation/spec/swagger_test.go +++ b/pkg/validation/spec/swagger_test.go @@ -119,7 +119,7 @@ const specJSON = `{ func TestSwaggerSpec_Serialize(t *testing.T) { expected := make(map[string]interface{}) _ = json.Unmarshal([]byte(specJSON), &expected) - b, err := json.MarshalIndent(spec, "", " ") + b, err := spec.MarshalNext() if assert.NoError(t, err) { var actual map[string]interface{} err := json.Unmarshal(b, &actual) @@ -220,7 +220,7 @@ func TestSwaggerSpec_ExperimentalUnmarshal(t *testing.T) { internal.UseOptimizedJSONUnmarshaling = true // Serialize into JSON again - jsonBytesV2, err := json.Marshal(expected) + jsonBytesV2, err := expected.MarshalNext() require.NoError(t, err) t.Log("Specimen V2", string(jsonBytes))