mirror of
https://github.com/jwetzell/showbridge-go.git
synced 2026-04-27 05:15:47 +00:00
add tests for framers
This commit is contained in:
@@ -8,6 +8,7 @@ type Framer interface {
|
|||||||
Decode([]byte) [][]byte
|
Decode([]byte) [][]byte
|
||||||
Encode([]byte) []byte
|
Encode([]byte) []byte
|
||||||
Clear()
|
Clear()
|
||||||
|
Buffer() []byte
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetFramer(framingType string) (Framer, error) {
|
func GetFramer(framingType string) (Framer, error) {
|
||||||
|
|||||||
@@ -35,3 +35,7 @@ func (bsf *ByteSeparatorFramer) Encode(data []byte) []byte {
|
|||||||
func (bsf *ByteSeparatorFramer) Clear() {
|
func (bsf *ByteSeparatorFramer) Clear() {
|
||||||
bsf.buffer = []byte{}
|
bsf.buffer = []byte{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (bsf *ByteSeparatorFramer) Buffer() []byte {
|
||||||
|
return bsf.buffer
|
||||||
|
}
|
||||||
|
|||||||
69
internal/framer/separator_test.go
Normal file
69
internal/framer/separator_test.go
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
package framer_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"slices"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/jwetzell/showbridge-go/internal/framer"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestGoodSeparatorFramer(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
framer framer.Framer
|
||||||
|
input []byte
|
||||||
|
expected [][]byte
|
||||||
|
buffer []byte
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "new line separator",
|
||||||
|
framer: framer.NewByteSeparatorFramer([]byte{0x0a}),
|
||||||
|
input: []byte("Hello\nWorld\nThis is a test\n"),
|
||||||
|
expected: [][]byte{
|
||||||
|
[]byte("Hello"),
|
||||||
|
[]byte("World"),
|
||||||
|
[]byte("This is a test"),
|
||||||
|
},
|
||||||
|
buffer: []byte{},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "CRLF separator",
|
||||||
|
framer: framer.NewByteSeparatorFramer([]byte{0x0d, 0x0a}),
|
||||||
|
input: []byte("Hello\r\nWorld\r\nThis is a test\r\n"),
|
||||||
|
expected: [][]byte{
|
||||||
|
[]byte("Hello"),
|
||||||
|
[]byte("World"),
|
||||||
|
[]byte("This is a test"),
|
||||||
|
},
|
||||||
|
buffer: []byte{},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "extra data after separator",
|
||||||
|
framer: framer.NewByteSeparatorFramer([]byte{0x0d, 0x0a}),
|
||||||
|
input: []byte("Hello\r\nWorld\r\nThis is a test\r\nextra"),
|
||||||
|
expected: [][]byte{
|
||||||
|
[]byte("Hello"),
|
||||||
|
[]byte("World"),
|
||||||
|
[]byte("This is a test"),
|
||||||
|
},
|
||||||
|
buffer: []byte("extra"),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range tests {
|
||||||
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
frames := test.framer.Decode(test.input)
|
||||||
|
if len(frames) != len(test.expected) {
|
||||||
|
t.Errorf("separator framer got %d frames, expected %d", len(frames), len(test.expected))
|
||||||
|
}
|
||||||
|
for i, frame := range frames {
|
||||||
|
if !slices.Equal(frame, test.expected[i]) {
|
||||||
|
t.Errorf("separator framer frame %d got %s, expected %s", i, frame, test.expected[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !slices.Equal(test.framer.Buffer(), test.buffer) {
|
||||||
|
t.Errorf("separator framer buffer got %s, expected %s", test.framer.Buffer(), test.buffer)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -74,3 +74,7 @@ func (sf *SlipFramer) Encode(data []byte) []byte {
|
|||||||
func (sf *SlipFramer) Clear() {
|
func (sf *SlipFramer) Clear() {
|
||||||
sf.buffer = []byte{}
|
sf.buffer = []byte{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (sf *SlipFramer) Buffer() []byte {
|
||||||
|
return sf.buffer
|
||||||
|
}
|
||||||
|
|||||||
45
internal/framer/slip_test.go
Normal file
45
internal/framer/slip_test.go
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
package framer_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"slices"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/jwetzell/showbridge-go/internal/framer"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestGoodSLIPFramer(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
framer framer.Framer
|
||||||
|
input []byte
|
||||||
|
expected [][]byte
|
||||||
|
buffer []byte
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "OSC SLIP messages",
|
||||||
|
framer: framer.NewSlipFramer(),
|
||||||
|
input: []byte{0xc0, 0x2f, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0xc0},
|
||||||
|
expected: [][]byte{
|
||||||
|
{0x2f, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00},
|
||||||
|
},
|
||||||
|
buffer: []byte{},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range tests {
|
||||||
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
frames := test.framer.Decode(test.input)
|
||||||
|
if len(frames) != len(test.expected) {
|
||||||
|
t.Errorf("SLIP framer got %d frames, expected %d", len(frames), len(test.expected))
|
||||||
|
}
|
||||||
|
for i, frame := range frames {
|
||||||
|
if !slices.Equal(frame, test.expected[i]) {
|
||||||
|
t.Errorf("SLIP framer frame %d got %s, expected %s", i, frame, test.expected[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !slices.Equal(test.framer.Buffer(), test.buffer) {
|
||||||
|
t.Errorf("SLIP framer buffer got %s, expected %s", test.framer.Buffer(), test.buffer)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user