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.
72 lines
2.6 KiB
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 "" }
|