You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nnet/internal/server/protocol_header_parser_test.go

72 lines
2.6 KiB
Go

package server
import (
"testing"
nnetproto "github.com/noahlann/nnet/internal/protocol/nnet"
internalrequest "github.com/noahlann/nnet/internal/request"
protocolpkg "github.com/noahlann/nnet/pkg/protocol"
requestpkg "github.com/noahlann/nnet/pkg/request"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestParseProtocolHeader_WithNNet(t *testing.T) {
// Build a valid nnet packet using protocol.Encode
proto := nnetproto.NewNNetProtocol("1.0")
payload := []byte("hello")
packet, err := proto.Encode(payload, nil)
require.NoError(t, err)
require.NotEmpty(t, packet)
// Use internal request implementation
req := internalrequest.New(payload, nil)
// Before parse, header/bodyBytes should be empty
require.Nil(t, req.Header())
require.Len(t, req.DataBytes(), 0)
// Call function under test
err = parseProtocolHeader(req, packet, proto)
require.NoError(t, err)
// Validate header and bodyBytes are set
h := req.Header()
require.NotNil(t, h)
assert.Equal(t, "NNET", h.Get("magic"))
assert.NotNil(t, h.Get("version"))
assert.NotNil(t, h.Get("length"))
assert.NotNil(t, h.Get("checksum"))
assert.Equal(t, payload, req.DataBytes())
}
type fakeRequestNoSetter struct {
raw []byte
}
func (f *fakeRequestNoSetter) Raw() []byte { return f.raw }
func (f *fakeRequestNoSetter) Data() interface{} { return nil }
func (f *fakeRequestNoSetter) Bind(v interface{}) error { return nil }
func (f *fakeRequestNoSetter) Header() requestpkg.FrameHeader { return nil }
func (f *fakeRequestNoSetter) DataBytes() []byte { return nil }
func (f *fakeRequestNoSetter) Protocol() protocolpkg.Protocol { return nil }
func (f *fakeRequestNoSetter) ProtocolVersion() string { return "" }
func TestParseProtocolHeader_InvalidRequestType(t *testing.T) {
req := &fakeRequestNoSetter{raw: []byte("x")}
proto := nnetproto.NewNNetProtocol("1.0")
err := parseProtocolHeader(req, []byte("invalid"), proto)
require.Error(t, err)
}
// A full fake implementing pkg/request.Request but missing internal setter
type fakeRequestNoSetterFull struct{}
func (f *fakeRequestNoSetterFull) Raw() []byte { return nil }
func (f *fakeRequestNoSetterFull) Data() interface{} { return nil }
func (f *fakeRequestNoSetterFull) Bind(v interface{}) error { return nil }
func (f *fakeRequestNoSetterFull) Header() requestpkg.FrameHeader { return nil }
func (f *fakeRequestNoSetterFull) DataBytes() []byte { return nil }
func (f *fakeRequestNoSetterFull) Protocol() protocolpkg.Protocol { return nil }
func (f *fakeRequestNoSetterFull) ProtocolVersion() string { return "" }