mirror of
https://github.com/soheilhy/cmux.git
synced 2024-09-20 02:55:46 +08:00
58 lines
1.4 KiB
Go
58 lines
1.4 KiB
Go
|
package cmux
|
||
|
|
||
|
import (
|
||
|
"net"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestMuxConn_CheckPrefix(t *testing.T) {
|
||
|
// Create a listener on a random port
|
||
|
listener, err := net.Listen("tcp", "127.0.0.1:0")
|
||
|
if err != nil {
|
||
|
t.Fatalf("failed to create listener: %v", err)
|
||
|
}
|
||
|
|
||
|
go func() {
|
||
|
// Accept a connection from the listener
|
||
|
conn, err := listener.Accept()
|
||
|
if err != nil {
|
||
|
t.Errorf("failed to accept connection: %v", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// Write a PROXY header to the connection
|
||
|
_, err = conn.Write([]byte("PROXY TCP4 192.168.1.1 192.168.1.2 1234 5678\r\n"))
|
||
|
if err != nil {
|
||
|
t.Errorf("failed to write PROXY header: %v", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// Close the connection
|
||
|
conn.Close()
|
||
|
}()
|
||
|
|
||
|
// Dial the listener with a MuxConn
|
||
|
conn, err := net.Dial("tcp", listener.Addr().String())
|
||
|
if err != nil {
|
||
|
t.Fatalf("failed to dial listener: %v", err)
|
||
|
}
|
||
|
|
||
|
muxConn := newMuxConn(conn)
|
||
|
|
||
|
// Call checkPrefix to parse the PROXY header
|
||
|
err = muxConn.checkPrefix()
|
||
|
if err != nil {
|
||
|
t.Errorf("checkPrefix returned error: %v", err)
|
||
|
}
|
||
|
|
||
|
// Verify the source and destination addresses were parsed correctly
|
||
|
expectedSrc := "192.168.1.1:1234"
|
||
|
expectedDst := "192.168.1.2:5678"
|
||
|
if muxConn.RemoteAddr().String() != expectedSrc {
|
||
|
t.Errorf("RemoteAddr() returned %s, expected %s", muxConn.RemoteAddr().String(), expectedSrc)
|
||
|
}
|
||
|
if muxConn.LocalAddr().String() != expectedDst {
|
||
|
t.Errorf("LocalAddr() returned %s, expected %s", muxConn.LocalAddr().String(), expectedDst)
|
||
|
}
|
||
|
}
|