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