package matcher import ( "testing" "github.com/noahlann/nnet/internal/codec" "github.com/noahlann/nnet/internal/request" "github.com/noahlann/nnet/internal/response" ctxpkg "github.com/noahlann/nnet/pkg/context" routerpkg "github.com/noahlann/nnet/pkg/router" "github.com/stretchr/testify/assert" ) func TestFrameHeaderMatcher(t *testing.T) { // 创建测试Context conn := &mockConnection{id: "test-conn"} req := request.New([]byte("test"), nil) header := request.NewFrameHeader() header.Set("message_type", "request") // 使用AsRequestSetter来设置header if setter := request.AsRequestSetter(req); setter != nil { setter.SetHeader(header) } codecRegistry := codec.NewRegistry() resp := response.New(conn, nil, codecRegistry, "json") ctx := ctxpkg.New(nil, conn, req, resp) // 创建匹配器 matcher := NewFrameHeaderMatcher("message_type", "==", "request") // 测试匹配 input := routerpkg.MatchInput{Raw: []byte("test"), Header: header} assert.True(t, matcher.Match(input, ctx), "Expected match for message_type == request") } func TestFrameHeaderMatcherNotMatch(t *testing.T) { conn := &mockConnection{id: "test-conn"} req := request.New([]byte("test"), nil) header := request.NewFrameHeader() header.Set("message_type", "response") if setter := request.AsRequestSetter(req); setter != nil { setter.SetHeader(header) } codecRegistry := codec.NewRegistry() resp := response.New(conn, nil, codecRegistry, "json") ctx := ctxpkg.New(nil, conn, req, resp) matcher := NewFrameHeaderMatcher("message_type", "==", "request") input := routerpkg.MatchInput{Raw: []byte("test"), Header: header} assert.False(t, matcher.Match(input, ctx), "Expected no match") } func TestFrameHeaderMatcherPriority(t *testing.T) { matcher := NewFrameHeaderMatcher("field", "==", "value") assert.Equal(t, 200, matcher.Priority(), "Expected priority to be 200") matcher.WithPriority(300) assert.Equal(t, 300, matcher.Priority(), "Expected priority to be 300") } // mockConnection 模拟连接 type mockConnection struct { id string } func (m *mockConnection) ID() string { return m.id } func (m *mockConnection) RemoteAddr() string { return "127.0.0.1:6995" } func (m *mockConnection) LocalAddr() string { return "127.0.0.1:6995" } func (m *mockConnection) Write(data []byte) error { return nil } func (m *mockConnection) Close() error { return nil }