mirror of
https://github.com/SunBK201/UA3F.git
synced 2025-12-16 16:57:08 +00:00
66 lines
1.7 KiB
Go
66 lines
1.7 KiB
Go
package rewrite
|
|
|
|
import (
|
|
"bytes"
|
|
"io"
|
|
"net"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/sunbk201/ua3f/internal/config"
|
|
)
|
|
|
|
type mockConn struct {
|
|
io.Reader
|
|
io.Writer
|
|
}
|
|
|
|
func (m *mockConn) Close() error { return nil }
|
|
func (m *mockConn) LocalAddr() net.Addr { return &net.IPAddr{} }
|
|
func (m *mockConn) RemoteAddr() net.Addr { return &net.IPAddr{} }
|
|
func (m *mockConn) SetDeadline(t time.Time) error { return nil }
|
|
func (m *mockConn) SetReadDeadline(t time.Time) error { return nil }
|
|
func (m *mockConn) SetWriteDeadline(t time.Time) error { return nil }
|
|
|
|
func newTestRewriter(t *testing.T) *Rewriter {
|
|
cfg := &config.Config{
|
|
UARegex: "TestUA",
|
|
PayloadUA: "MockUA/1.0",
|
|
PartialReplace: false,
|
|
}
|
|
rewriter, err := New(cfg)
|
|
assert.NoError(t, err)
|
|
return rewriter
|
|
}
|
|
|
|
func TestNewRewriter(t *testing.T) {
|
|
cfg := &config.Config{
|
|
UARegex: "TestUA",
|
|
PayloadUA: "FFF0",
|
|
PartialReplace: false,
|
|
}
|
|
rewriter, err := New(cfg)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, cfg.PayloadUA, rewriter.payloadUA)
|
|
assert.Equal(t, cfg.UARegex, rewriter.pattern)
|
|
assert.Equal(t, cfg.PartialReplace, rewriter.partialReplace)
|
|
assert.NotNil(t, rewriter.uaRegex)
|
|
assert.NotNil(t, rewriter.Cache)
|
|
}
|
|
|
|
func TestProxyHTTPOrRaw_HTTPRewrite(t *testing.T) {
|
|
r := newTestRewriter(t)
|
|
|
|
reqStr := "GET / HTTP/1.1\r\nHost: example.com\r\nUser-Agent: MyTestUA\r\n\r\n"
|
|
src := &mockConn{Reader: strings.NewReader(reqStr), Writer: &bytes.Buffer{}}
|
|
dstBuf := &bytes.Buffer{}
|
|
dst := &mockConn{Reader: nil, Writer: dstBuf}
|
|
|
|
r.Process(dst, src, "example.com:80", "srcAddr")
|
|
|
|
out := dstBuf.String()
|
|
assert.Contains(t, out, "User-Agent: MockUA/1.0")
|
|
}
|