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.

85 lines
2.3 KiB
Go

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
}