package main import ( "bufio" "github.com/TransX/log" "net" "os" "testing" "time" ) func server(t *testing.T) { file, _ := os.Open("test/cipher.txt") reader := bufio.NewReader(file) listener, err := net.Listen("tcp4", "127.0.0.1:1244") if err != nil { t.Fatal(err) } for { conn, err := listener.Accept() log.Info("Test Server Incoming %s", conn.RemoteAddr().String()) if err != nil { t.Fatal(err) } bytes := make([]byte, 1024*32) n, err := conn.Read(bytes) line, err := reader.ReadString('\n') if err != nil { log.Error("client read %", err) break } if string(bytes[:n]) != line { log.Error("cipher failed %s", string(bytes[:n])) log.Error("%s %s", len(bytes[:n]), len([]byte(line))) for i := 0; i < n; i++ { log.Error("%d", bytes[i]-[]byte(line)[i]) } } log.Info("Test Server Receive %s", string(bytes[:n])) _, err = conn.Write([]byte("OK")) log.Info("Test Server write") if err != nil { t.Fatal(err) } conn.Close() log.Info("Test Server closed") } } func client(t *testing.T) { file, _ := os.Open("test/cipher.txt") reader := bufio.NewReader(file) for { conn, err := net.Dial("tcp4", "127.0.0.1:1200") if err != nil { t.Fatal(err) } line, err := reader.ReadString('\n') if err != nil { log.Error("client read %", err) } bytesLine := []byte(line) n, _ := conn.Write(bytesLine) log.Info("Test Client write %s", string(bytesLine[:n])) log.Info("Test Client write") bytes := make([]byte, 1024*32) n, err = conn.Read(bytes) log.Info("Test Client read") if err != nil { t.Fatal(err) } log.Info("Test Client Receive %s", bytes[:n]) time.Sleep(time.Second * 2) conn.Close() log.Info("Test Client closed") } } func TestTunnel(t *testing.T) { log.LogTo("log.txt", "INFO") log.Info("Test Start testing.") go server(t) go client(t) trans1 := NewTransTCP() go trans1.Start("1200", "127.0.0.1", "1201", "client") trans2 := NewTransTCP() trans2.Start("1201", "127.0.0.1", "1244", "server") }