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 "" }