Refactor kafka to pure Go (franz-go), fix DBC stubs, update Dockerfile
This commit is contained in:
126
pkg/can-go/frame_json_test.go
Normal file
126
pkg/can-go/frame_json_test.go
Normal file
@@ -0,0 +1,126 @@
|
||||
package can
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"reflect"
|
||||
"testing"
|
||||
"testing/quick"
|
||||
|
||||
"gotest.tools/v3/assert"
|
||||
is "gotest.tools/v3/assert/cmp"
|
||||
)
|
||||
|
||||
func TestFrame_JSON(t *testing.T) {
|
||||
for _, tt := range []struct {
|
||||
jsonFrame string
|
||||
frame Frame
|
||||
}{
|
||||
{
|
||||
// Standard frame
|
||||
jsonFrame: `{"id":42,"data":"00010203"}`,
|
||||
frame: Frame{
|
||||
ID: 42,
|
||||
Length: 4,
|
||||
Data: Data{0x00, 0x01, 0x02, 0x03},
|
||||
},
|
||||
},
|
||||
{
|
||||
// Standard frame, no data
|
||||
jsonFrame: `{"id":42}`,
|
||||
frame: Frame{ID: 42},
|
||||
},
|
||||
{
|
||||
// Standard remote frame
|
||||
jsonFrame: `{"id":42,"remote":true,"length":4}`,
|
||||
frame: Frame{
|
||||
ID: 42,
|
||||
IsRemote: true,
|
||||
Length: 4,
|
||||
},
|
||||
},
|
||||
{
|
||||
// Extended frame
|
||||
jsonFrame: `{"id":42,"data":"0001020304050607","extended":true}`,
|
||||
frame: Frame{
|
||||
ID: 42,
|
||||
IsExtended: true,
|
||||
Length: 8,
|
||||
Data: Data{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07},
|
||||
},
|
||||
},
|
||||
{
|
||||
// Extended frame, no data
|
||||
jsonFrame: `{"id":42,"extended":true}`,
|
||||
frame: Frame{ID: 42, IsExtended: true},
|
||||
},
|
||||
{
|
||||
// Extended remote frame
|
||||
jsonFrame: `{"id":42,"extended":true,"remote":true,"length":8}`,
|
||||
frame: Frame{
|
||||
ID: 42,
|
||||
IsExtended: true,
|
||||
IsRemote: true,
|
||||
Length: 8,
|
||||
},
|
||||
},
|
||||
} {
|
||||
tt := tt
|
||||
t.Run(fmt.Sprintf("JSON|frame=%v", tt.frame), func(t *testing.T) {
|
||||
assert.Check(t, is.Equal(tt.jsonFrame, tt.frame.JSON()))
|
||||
})
|
||||
t.Run(fmt.Sprintf("UnmarshalJSON|frame=%v", tt.frame), func(t *testing.T) {
|
||||
var frame Frame
|
||||
if err := json.Unmarshal([]byte(tt.jsonFrame), &frame); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
assert.Check(t, is.DeepEqual(tt.frame, frame))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestFrame_UnmarshalJSON_Invalid(t *testing.T) {
|
||||
var f Frame
|
||||
t.Run("invalid JSON", func(t *testing.T) {
|
||||
data := `foobar`
|
||||
assert.Check(t, f.UnmarshalJSON([]uint8(data)) != nil)
|
||||
})
|
||||
t.Run("invalid payload", func(t *testing.T) {
|
||||
data := `{"id":1,"data":"foobar","extended":false,"remote":false}`
|
||||
assert.Check(t, f.UnmarshalJSON([]uint8(data)) != nil)
|
||||
})
|
||||
}
|
||||
|
||||
func (Frame) Generate(rand *rand.Rand, size int) reflect.Value {
|
||||
f := Frame{
|
||||
IsExtended: rand.Intn(2) == 0,
|
||||
IsRemote: rand.Intn(2) == 0,
|
||||
}
|
||||
if f.IsExtended {
|
||||
f.ID = rand.Uint32() & MaxExtendedID
|
||||
} else {
|
||||
f.ID = rand.Uint32() & MaxID
|
||||
}
|
||||
f.Length = uint16(rand.Intn(9))
|
||||
if !f.IsRemote {
|
||||
_, _ = rand.Read(f.Data[:f.Length])
|
||||
}
|
||||
return reflect.ValueOf(f)
|
||||
}
|
||||
|
||||
func TestPropertyFrame_MarshalUnmarshalJSON(t *testing.T) {
|
||||
f := func(f Frame) Frame {
|
||||
return f
|
||||
}
|
||||
g := func(f Frame) Frame {
|
||||
f2 := Frame{}
|
||||
if err := json.Unmarshal([]uint8(f.JSON()), &f2); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
return f2
|
||||
}
|
||||
if err := quick.CheckEqual(f, g, nil); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user