diff --git a/cache/cache_test.go b/cache/cache_test.go index f813f6cf..a77eecc2 100644 --- a/cache/cache_test.go +++ b/cache/cache_test.go @@ -1,12 +1,12 @@ package cache import ( - "encoding/json" "fmt" "math/rand" "testing" "github.com/go-logr/logr" + "github.com/ovn-kubernetes/libovsdb/internal/json" "github.com/ovn-kubernetes/libovsdb/model" "github.com/ovn-kubernetes/libovsdb/ovsdb" "github.com/ovn-kubernetes/libovsdb/test" diff --git a/client/api_test_model.go b/client/api_test_model.go index 9f692e4e..8829fd3c 100644 --- a/client/api_test_model.go +++ b/client/api_test_model.go @@ -1,10 +1,10 @@ package client import ( - "encoding/json" "testing" "github.com/ovn-kubernetes/libovsdb/cache" + "github.com/ovn-kubernetes/libovsdb/internal/json" "github.com/ovn-kubernetes/libovsdb/model" "github.com/ovn-kubernetes/libovsdb/ovsdb" "github.com/stretchr/testify/require" diff --git a/client/client.go b/client/client.go index c1f4720b..3934adc5 100644 --- a/client/client.go +++ b/client/client.go @@ -3,7 +3,6 @@ package client import ( "context" "crypto/tls" - "encoding/json" "errors" "fmt" "net" @@ -18,6 +17,7 @@ import ( "github.com/cenkalti/rpc2/jsonrpc" "github.com/go-logr/logr" "github.com/ovn-kubernetes/libovsdb/cache" + "github.com/ovn-kubernetes/libovsdb/internal/json" "github.com/ovn-kubernetes/libovsdb/mapper" "github.com/ovn-kubernetes/libovsdb/model" "github.com/ovn-kubernetes/libovsdb/ovsdb" diff --git a/client/client_test.go b/client/client_test.go index 71a0ca19..f6c61575 100644 --- a/client/client_test.go +++ b/client/client_test.go @@ -3,7 +3,6 @@ package client import ( "bytes" "context" - "encoding/json" "fmt" "log" "math/rand" @@ -21,6 +20,7 @@ import ( "github.com/google/uuid" "github.com/ovn-kubernetes/libovsdb/cache" "github.com/ovn-kubernetes/libovsdb/database/inmemory" + "github.com/ovn-kubernetes/libovsdb/internal/json" "github.com/ovn-kubernetes/libovsdb/mapper" "github.com/ovn-kubernetes/libovsdb/model" "github.com/ovn-kubernetes/libovsdb/ovsdb" diff --git a/client/monitor_test.go b/client/monitor_test.go index 695cada9..094d5634 100644 --- a/client/monitor_test.go +++ b/client/monitor_test.go @@ -1,9 +1,9 @@ package client import ( - "encoding/json" "testing" + "github.com/ovn-kubernetes/libovsdb/internal/json" "github.com/ovn-kubernetes/libovsdb/model" "github.com/ovn-kubernetes/libovsdb/ovsdb" "github.com/stretchr/testify/assert" diff --git a/cmd/modelgen/main.go b/cmd/modelgen/main.go index fa793739..01fa9757 100644 --- a/cmd/modelgen/main.go +++ b/cmd/modelgen/main.go @@ -1,7 +1,6 @@ package main import ( - "encoding/json" "flag" "fmt" "io" @@ -9,6 +8,7 @@ import ( "os" "path/filepath" + "github.com/ovn-kubernetes/libovsdb/internal/json" "github.com/ovn-kubernetes/libovsdb/modelgen" "github.com/ovn-kubernetes/libovsdb/ovsdb" ) diff --git a/cmd/print_schema/print_schema.go b/cmd/print_schema/print_schema.go index 72a9bae8..415d8ffb 100644 --- a/cmd/print_schema/print_schema.go +++ b/cmd/print_schema/print_schema.go @@ -1,7 +1,6 @@ package main import ( - "encoding/json" "flag" "fmt" "io" @@ -10,6 +9,7 @@ import ( "runtime" "runtime/pprof" + "github.com/ovn-kubernetes/libovsdb/internal/json" "github.com/ovn-kubernetes/libovsdb/ovsdb" ) diff --git a/go.mod b/go.mod index d3ba0c2f..1c045fa1 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module github.com/ovn-kubernetes/libovsdb go 1.23.0 require ( + github.com/bytedance/sonic v1.14.0 github.com/cenkalti/backoff/v4 v4.3.0 github.com/cenkalti/rpc2 v1.0.4 github.com/go-logr/logr v1.4.3 @@ -21,8 +22,10 @@ require ( github.com/Microsoft/go-winio v0.6.2 // indirect github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 // indirect github.com/beorn7/perks v1.0.1 // indirect + github.com/bytedance/sonic/loader v0.3.0 // indirect github.com/cenkalti/hub v1.0.2 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/cloudwego/base64x v0.1.5 // indirect github.com/containerd/continuity v0.4.5 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/docker/cli v27.4.1+incompatible // indirect @@ -35,6 +38,7 @@ require ( github.com/go-viper/mapstructure/v2 v2.1.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect + github.com/klauspost/cpuid/v2 v2.0.9 // indirect github.com/kr/text v0.2.0 // indirect github.com/leodido/go-urn v1.4.0 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect @@ -50,9 +54,11 @@ require ( github.com/prometheus/common v0.65.0 // indirect github.com/prometheus/procfs v0.16.1 // indirect github.com/sirupsen/logrus v1.9.3 // indirect + github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xeipuuv/gojsonschema v1.2.0 // indirect + golang.org/x/arch v0.0.0-20210923205945-b76863e36670 // indirect golang.org/x/crypto v0.38.0 // indirect golang.org/x/net v0.40.0 // indirect golang.org/x/sys v0.33.0 // indirect diff --git a/go.sum b/go.sum index 5b237561..0dfd0507 100644 --- a/go.sum +++ b/go.sum @@ -10,6 +10,11 @@ github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEV github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bytedance/sonic v1.14.0 h1:/OfKt8HFw0kh2rj8N0F6C/qPGRESq0BbaNZgcNXXzQQ= +github.com/bytedance/sonic v1.14.0/go.mod h1:WoEbx8WTcFJfzCe0hbmyTGrfjt8PzNEBdxlNUO24NhA= +github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= +github.com/bytedance/sonic/loader v0.3.0 h1:dskwH8edlzNMctoruo8FPTJDF3vLtDT0sXZwvZJyqeA= +github.com/bytedance/sonic/loader v0.3.0/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/cenkalti/hub v1.0.2 h1:Nqv9TNaA9boeO2wQFW8o87BY3zKthtnzXmWGmJqhAV8= @@ -18,6 +23,9 @@ github.com/cenkalti/rpc2 v1.0.4 h1:MJWmm7mbt8r/ZkQS+qr/e2KMMrhMLPr/62CYZIHybdI= github.com/cenkalti/rpc2 v1.0.4/go.mod h1:2yfU5b86vOr16+iY1jN3MvT6Kxc9Nf8j5iZWwUf7iaw= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cloudwego/base64x v0.1.5 h1:XPciSp1xaq2VCSt6lF0phncD4koWyULpl5bUxbfCyP4= +github.com/cloudwego/base64x v0.1.5/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= +github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= github.com/containerd/continuity v0.4.5 h1:ZRoN1sXq9u7V6QoHMcVWGhOwDFqZ4B9i5H6un1Wh0x4= github.com/containerd/continuity v0.4.5/go.mod h1:/lNJvtJKUQStBzpVQ1+rasXO1LAWtUQssk28EZvJ3nE= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= @@ -63,6 +71,9 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -104,10 +115,17 @@ github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncj github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= @@ -119,6 +137,8 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +golang.org/x/arch v0.0.0-20210923205945-b76863e36670 h1:18EFjUmQOcUvxNYSkA6jO9VAiXCnxFY6NyDX0bHDmkU= +golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -166,3 +186,4 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= +nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= diff --git a/internal/json/bench_test.go b/internal/json/bench_test.go new file mode 100644 index 00000000..b50bbc11 --- /dev/null +++ b/internal/json/bench_test.go @@ -0,0 +1,67 @@ +package json_test + +import ( + "testing" + + "github.com/ovn-kubernetes/libovsdb/internal/json" + "github.com/ovn-kubernetes/libovsdb/ovsdb" +) + +func benchmarkSetMarshalJSON(s []ovsdb.Operation, b *testing.B) { + for n := 0; n < b.N; n++ { + _, err := json.Marshal(s) + if err != nil { + b.Fatal(err) + } + } +} + +func operationDataset(n int) []ovsdb.Operation { + var result []ovsdb.Operation + oSet, _ := ovsdb.NewOvsSet([]string{"1.1.1.1"}) + var testOperations = []ovsdb.Operation{ + { + Op: ovsdb.OperationMutate, + Table: "Logical_Switch_Port", + Mutations: []ovsdb.Mutation{{Column: "addresses", Mutator: ovsdb.MutateOperationInsert, Value: oSet}}, + Where: []ovsdb.Condition{{Column: "_uuid", Function: ovsdb.ConditionEqual, Value: ovsdb.UUID{GoUUID: "9ea1d0f7-e389-48a3-9563-fcf1a80fdb1e"}}}, + }, + } + for range n { + result = append(result, testOperations...) + } + return result +} + +func BenchmarkSetMarshalJSONOperations1(b *testing.B) { + benchmarkSetMarshalJSON(operationDataset(1), b) +} +func BenchmarkSetMarshalJSONOperations2(b *testing.B) { + benchmarkSetMarshalJSON(operationDataset(2), b) +} +func BenchmarkSetMarshalJSONOperations3(b *testing.B) { + benchmarkSetMarshalJSON(operationDataset(3), b) +} +func BenchmarkSetMarshalJSONOperations5(b *testing.B) { + benchmarkSetMarshalJSON(operationDataset(5), b) +} +func BenchmarkSetMarshalJSONOperations8(b *testing.B) { + benchmarkSetMarshalJSON(operationDataset(8), b) +} + +func benchmarkSetUnmarshalJSON(data []byte, b *testing.B) { + for n := 0; n < b.N; n++ { + var s ovsdb.TableUpdate2 + err := json.Unmarshal(data, &s) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkSetUnmarshalJSONTableUpdate1(b *testing.B) { + benchmarkSetUnmarshalJSON([]byte(`{"Port_Binding":{"77189bff-b4e3-4c15-9967-4518036b9a11":{"modify":{"virtual_parent":"06:73:24:4c:a3:97~2024-09-25 08:02:04.295"}}}}`), b) +} +func BenchmarkSetUnmarshalJSONTableUpdate2(b *testing.B) { + benchmarkSetUnmarshalJSON([]byte(`{"Port_Binding":{"77189bff-b4e3-4c15-9967-4518036b9a11":{"modify":{"virtual_parent":"06:73:24:4c:a3:97~2024-09-25 08:02:04.295","tag":["set",[]]}}}}`), b) +} diff --git a/internal/json/sonic_json.go b/internal/json/sonic_json.go new file mode 100644 index 00000000..dacdda81 --- /dev/null +++ b/internal/json/sonic_json.go @@ -0,0 +1,12 @@ +package json + +import ( + "github.com/bytedance/sonic" +) + +var ( + Marshal = sonic.Marshal + Unmarshal = sonic.Unmarshal +) + +type RawMessage = sonic.NoCopyRawMessage diff --git a/mapper/info_test.go b/mapper/info_test.go index c825e838..46883bd1 100644 --- a/mapper/info_test.go +++ b/mapper/info_test.go @@ -1,10 +1,10 @@ package mapper import ( - "encoding/json" "fmt" "testing" + "github.com/ovn-kubernetes/libovsdb/internal/json" "github.com/ovn-kubernetes/libovsdb/ovsdb" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/mapper/mapper_test.go b/mapper/mapper_test.go index 150b0d77..6fa80973 100644 --- a/mapper/mapper_test.go +++ b/mapper/mapper_test.go @@ -1,10 +1,10 @@ package mapper import ( - "encoding/json" "fmt" "testing" + "github.com/ovn-kubernetes/libovsdb/internal/json" "github.com/ovn-kubernetes/libovsdb/ovsdb" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/model/model.go b/model/model.go index ea267ec5..a349e2b9 100644 --- a/model/model.go +++ b/model/model.go @@ -1,10 +1,10 @@ package model import ( - "encoding/json" "fmt" "reflect" + "github.com/ovn-kubernetes/libovsdb/internal/json" "github.com/ovn-kubernetes/libovsdb/ovsdb" ) diff --git a/model/model_test.go b/model/model_test.go index 2bf2e251..94b81a94 100644 --- a/model/model_test.go +++ b/model/model_test.go @@ -1,11 +1,11 @@ package model import ( - "encoding/json" "fmt" "reflect" "testing" + "github.com/ovn-kubernetes/libovsdb/internal/json" "github.com/ovn-kubernetes/libovsdb/ovsdb" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/modelgen/dbmodel.go b/modelgen/dbmodel.go index 7857e2b3..9337b2fc 100644 --- a/modelgen/dbmodel.go +++ b/modelgen/dbmodel.go @@ -30,7 +30,7 @@ func NewDBTemplate() *template.Template { {{- define "preDBDefinitions" }} import ( "encoding/json" - + "github.com/ovn-kubernetes/libovsdb/model" "github.com/ovn-kubernetes/libovsdb/ovsdb" ) diff --git a/modelgen/table_test.go b/modelgen/table_test.go index 345e5e4f..a856476d 100644 --- a/modelgen/table_test.go +++ b/modelgen/table_test.go @@ -1,7 +1,6 @@ package modelgen import ( - "encoding/json" "fmt" "reflect" "testing" @@ -9,6 +8,7 @@ import ( "github.com/google/uuid" "github.com/ovn-kubernetes/libovsdb/example/vswitchd" + "github.com/ovn-kubernetes/libovsdb/internal/json" "github.com/ovn-kubernetes/libovsdb/model" "github.com/ovn-kubernetes/libovsdb/ovsdb" "github.com/stretchr/testify/assert" diff --git a/ovsdb/bindings_test.go b/ovsdb/bindings_test.go index a9099593..379b9e81 100644 --- a/ovsdb/bindings_test.go +++ b/ovsdb/bindings_test.go @@ -1,11 +1,11 @@ package ovsdb import ( - "encoding/json" "fmt" "reflect" "testing" + "github.com/ovn-kubernetes/libovsdb/internal/json" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -705,7 +705,7 @@ func TestOvsToNativeErr(t *testing.T) { }, } for _, tt := range tests { - t.Run(fmt.Sprintf(tt.name), func(t *testing.T) { + t.Run(tt.name, func(t *testing.T) { var column ColumnSchema err := json.Unmarshal(tt.schema, &column) require.NoError(t, err) @@ -782,7 +782,7 @@ func TestNativeToOvsErr(t *testing.T) { }, } for _, tt := range tests { - t.Run(fmt.Sprintf(tt.name), func(t *testing.T) { + t.Run(tt.name, func(t *testing.T) { var column ColumnSchema if err := json.Unmarshal(tt.schema, &column); err != nil { t.Fatal(err) diff --git a/ovsdb/condition.go b/ovsdb/condition.go index 326e6955..5d5d744f 100644 --- a/ovsdb/condition.go +++ b/ovsdb/condition.go @@ -1,9 +1,10 @@ package ovsdb import ( - "encoding/json" "fmt" "reflect" + + "github.com/ovn-kubernetes/libovsdb/internal/json" ) type ConditionFunction string diff --git a/ovsdb/condition_test.go b/ovsdb/condition_test.go index f20d9260..cd37bc6d 100644 --- a/ovsdb/condition_test.go +++ b/ovsdb/condition_test.go @@ -1,10 +1,11 @@ package ovsdb import ( - "encoding/json" "reflect" "testing" + "github.com/ovn-kubernetes/libovsdb/internal/json" + "github.com/stretchr/testify/assert" ) diff --git a/ovsdb/encoding_test.go b/ovsdb/encoding_test.go index c436ca3a..519f1318 100644 --- a/ovsdb/encoding_test.go +++ b/ovsdb/encoding_test.go @@ -1,10 +1,10 @@ package ovsdb import ( - "encoding/json" "fmt" "testing" + "github.com/ovn-kubernetes/libovsdb/internal/json" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/ovsdb/map.go b/ovsdb/map.go index a80bfa16..ad8d016d 100644 --- a/ovsdb/map.go +++ b/ovsdb/map.go @@ -1,9 +1,10 @@ package ovsdb import ( - "encoding/json" "fmt" "reflect" + + "github.com/ovn-kubernetes/libovsdb/internal/json" ) // OvsMap is the JSON map structure used for OVSDB @@ -47,7 +48,8 @@ func (o *OvsMap) UnmarshalJSON(b []byte) (err error) { case []any: vSet := f[0].([]any) if len(vSet) != 2 || vSet[0] == "map" { - return &json.UnmarshalTypeError{Value: reflect.ValueOf(oMap).String(), Type: reflect.TypeOf(*o)} + return fmt.Errorf("json: cannot unmarshal %s into Go value of type %s", + reflect.ValueOf(oMap).String(), reflect.TypeOf(*o).String()) } goSlice, err := ovsSliceToGoNotation(vSet) if err != nil { @@ -61,7 +63,8 @@ func (o *OvsMap) UnmarshalJSON(b []byte) (err error) { case []any: vSet := f[1].([]any) if len(vSet) != 2 || vSet[0] == "map" { - return &json.UnmarshalTypeError{Value: reflect.ValueOf(oMap).String(), Type: reflect.TypeOf(*o)} + return fmt.Errorf("json: cannot unmarshal %s into Go value of type %s", + reflect.ValueOf(oMap).String(), reflect.TypeOf(*o).String()) } goSlice, err := ovsSliceToGoNotation(vSet) if err != nil { diff --git a/ovsdb/map_test.go b/ovsdb/map_test.go index 16907c64..8eb5b9ae 100644 --- a/ovsdb/map_test.go +++ b/ovsdb/map_test.go @@ -1,8 +1,9 @@ package ovsdb import ( - "encoding/json" "testing" + + "github.com/ovn-kubernetes/libovsdb/internal/json" ) func benchmarkMap(m map[string]string, b *testing.B) { diff --git a/ovsdb/monitor_select.go b/ovsdb/monitor_select.go index 58e57f71..b3037889 100644 --- a/ovsdb/monitor_select.go +++ b/ovsdb/monitor_select.go @@ -1,6 +1,6 @@ package ovsdb -import "encoding/json" +import "github.com/ovn-kubernetes/libovsdb/internal/json" // MonitorSelect represents a monitor select according to RFC7047 type MonitorSelect struct { diff --git a/ovsdb/monitor_select_test.go b/ovsdb/monitor_select_test.go index ef0e3992..24572101 100644 --- a/ovsdb/monitor_select_test.go +++ b/ovsdb/monitor_select_test.go @@ -1,9 +1,10 @@ package ovsdb import ( - "encoding/json" "testing" + "github.com/ovn-kubernetes/libovsdb/internal/json" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/ovsdb/mutation.go b/ovsdb/mutation.go index 66f8f047..1bb386fd 100644 --- a/ovsdb/mutation.go +++ b/ovsdb/mutation.go @@ -1,8 +1,9 @@ package ovsdb import ( - "encoding/json" "fmt" + + "github.com/ovn-kubernetes/libovsdb/internal/json" ) type Mutator string diff --git a/ovsdb/mutation_test.go b/ovsdb/mutation_test.go index cf9479a1..a94d95b2 100644 --- a/ovsdb/mutation_test.go +++ b/ovsdb/mutation_test.go @@ -1,10 +1,11 @@ package ovsdb import ( - "encoding/json" "reflect" "testing" + "github.com/ovn-kubernetes/libovsdb/internal/json" + "github.com/stretchr/testify/assert" ) diff --git a/ovsdb/named_uuid_test.go b/ovsdb/named_uuid_test.go index 9f94c31c..c7397431 100644 --- a/ovsdb/named_uuid_test.go +++ b/ovsdb/named_uuid_test.go @@ -1,10 +1,11 @@ package ovsdb import ( - "encoding/json" "fmt" "testing" + "github.com/ovn-kubernetes/libovsdb/internal/json" + "github.com/google/uuid" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/ovsdb/notation.go b/ovsdb/notation.go index c4beafaf..c6f74116 100644 --- a/ovsdb/notation.go +++ b/ovsdb/notation.go @@ -1,7 +1,7 @@ package ovsdb import ( - "encoding/json" + "github.com/ovn-kubernetes/libovsdb/internal/json" ) const ( diff --git a/ovsdb/notation_test.go b/ovsdb/notation_test.go index d64b62c2..b1f579f5 100644 --- a/ovsdb/notation_test.go +++ b/ovsdb/notation_test.go @@ -1,12 +1,13 @@ package ovsdb import ( - "encoding/json" "fmt" "log" "reflect" "testing" + "github.com/ovn-kubernetes/libovsdb/internal/json" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -84,9 +85,7 @@ func TestOpRowsSerialization(t *testing.T) { expected := `{"op":"insert","table":"Interface","rows":[{"mac":"0000ffaaaa","name":"test-iface1","ofport":1},{"mac":"0000ffaabb","name":"test-iface2","ofport":2}]}` - if string(str) != expected { - t.Error("Expected: ", expected, "Got", string(str)) - } + require.JSONEq(t, expected, string(str)) } func TestValidateOvsSet(t *testing.T) { diff --git a/ovsdb/row.go b/ovsdb/row.go index 809045ea..5fa67a68 100644 --- a/ovsdb/row.go +++ b/ovsdb/row.go @@ -1,6 +1,6 @@ package ovsdb -import "encoding/json" +import "github.com/ovn-kubernetes/libovsdb/internal/json" // Row is a table Row according to RFC7047 type Row map[string]any diff --git a/ovsdb/rpc_test.go b/ovsdb/rpc_test.go index c6f338a0..e02239ef 100644 --- a/ovsdb/rpc_test.go +++ b/ovsdb/rpc_test.go @@ -1,8 +1,9 @@ package ovsdb import ( - "encoding/json" "testing" + + "github.com/ovn-kubernetes/libovsdb/internal/json" ) func TestNewGetSchemaArgs(t *testing.T) { diff --git a/ovsdb/schema.go b/ovsdb/schema.go index 66fa4428..71beccf3 100644 --- a/ovsdb/schema.go +++ b/ovsdb/schema.go @@ -1,12 +1,13 @@ package ovsdb import ( - "encoding/json" "fmt" "io" "math" "os" "strings" + + "github.com/ovn-kubernetes/libovsdb/internal/json" ) // DatabaseSchema is a database schema according to RFC7047 diff --git a/ovsdb/schema_test.go b/ovsdb/schema_test.go index 1dd6f451..8e1142f4 100644 --- a/ovsdb/schema_test.go +++ b/ovsdb/schema_test.go @@ -1,12 +1,13 @@ package ovsdb import ( - "encoding/json" "fmt" "math" "reflect" "testing" + "github.com/ovn-kubernetes/libovsdb/internal/json" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/ovsdb/set.go b/ovsdb/set.go index 07dafaa6..8425cff0 100644 --- a/ovsdb/set.go +++ b/ovsdb/set.go @@ -1,9 +1,10 @@ package ovsdb import ( - "encoding/json" "fmt" "reflect" + + "github.com/ovn-kubernetes/libovsdb/internal/json" ) // OvsSet is an OVSDB style set @@ -92,7 +93,8 @@ func (o *OvsSet) UnmarshalJSON(b []byte) (err error) { } if oSet[0] != "set" { // it is a slice, but is not a set - return &json.UnmarshalTypeError{Value: reflect.ValueOf(inter).String(), Type: reflect.TypeOf(*o)} + return fmt.Errorf("json: cannot unmarshal %s into Go value of type %s", + reflect.ValueOf(inter).String(), reflect.TypeOf(*o).String()) } innerSet := oSet[1].([]any) for _, val := range innerSet { diff --git a/ovsdb/set_test.go b/ovsdb/set_test.go index 51acf38e..659def58 100644 --- a/ovsdb/set_test.go +++ b/ovsdb/set_test.go @@ -1,11 +1,12 @@ package ovsdb import ( - "encoding/json" "fmt" "reflect" "strings" "testing" + + "github.com/ovn-kubernetes/libovsdb/internal/json" ) var testUUIDs = []string{ diff --git a/ovsdb/update3.go b/ovsdb/update3.go index 0766fda0..a58989da 100644 --- a/ovsdb/update3.go +++ b/ovsdb/update3.go @@ -1,8 +1,9 @@ package ovsdb import ( - "encoding/json" "fmt" + + "github.com/ovn-kubernetes/libovsdb/internal/json" ) type MonitorCondSinceReply struct { diff --git a/ovsdb/uuid.go b/ovsdb/uuid.go index 6bc46365..52649ca2 100644 --- a/ovsdb/uuid.go +++ b/ovsdb/uuid.go @@ -1,9 +1,10 @@ package ovsdb import ( - "encoding/json" "fmt" "regexp" + + "github.com/ovn-kubernetes/libovsdb/internal/json" ) var validUUID = regexp.MustCompile(`^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$`) diff --git a/server/monitor.go b/server/monitor.go index 16c17376..b8aaf82f 100644 --- a/server/monitor.go +++ b/server/monitor.go @@ -1,13 +1,13 @@ package server import ( - "encoding/json" "log" "sync" "github.com/cenkalti/rpc2" "github.com/google/uuid" "github.com/ovn-kubernetes/libovsdb/database" + "github.com/ovn-kubernetes/libovsdb/internal/json" "github.com/ovn-kubernetes/libovsdb/ovsdb" ) diff --git a/server/server.go b/server/server.go index 3496c149..b13ad8c2 100644 --- a/server/server.go +++ b/server/server.go @@ -1,7 +1,6 @@ package server import ( - "encoding/json" "errors" "fmt" "net" @@ -14,6 +13,7 @@ import ( "github.com/go-logr/stdr" "github.com/google/uuid" "github.com/ovn-kubernetes/libovsdb/database" + "github.com/ovn-kubernetes/libovsdb/internal/json" "github.com/ovn-kubernetes/libovsdb/model" "github.com/ovn-kubernetes/libovsdb/ovsdb" ) diff --git a/server/server_test.go b/server/server_test.go index 804ed7d3..5b99f0c8 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -1,12 +1,12 @@ package server import ( - "encoding/json" "testing" "github.com/go-logr/logr" "github.com/google/uuid" "github.com/ovn-kubernetes/libovsdb/database/inmemory" + "github.com/ovn-kubernetes/libovsdb/internal/json" "github.com/ovn-kubernetes/libovsdb/model" "github.com/ovn-kubernetes/libovsdb/ovsdb" "github.com/ovn-kubernetes/libovsdb/test" diff --git a/test/test_data.go b/test/test_data.go index df5abdea..4c2d5acb 100644 --- a/test/test_data.go +++ b/test/test_data.go @@ -1,9 +1,9 @@ package test import ( - "encoding/json" "fmt" + "github.com/ovn-kubernetes/libovsdb/internal/json" "github.com/ovn-kubernetes/libovsdb/model" "github.com/ovn-kubernetes/libovsdb/ovsdb" )