From bd91854c14c3340dc87d0805abdf9ae998a346d9 Mon Sep 17 00:00:00 2001 From: eyedeekay Date: Sun, 16 Feb 2025 18:41:07 -0500 Subject: [PATCH] update dependencies and explicitly reference the tunnel in use inside of the garlic structure --- lib/tcp/tcp_test.go | 94 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 lib/tcp/tcp_test.go diff --git a/lib/tcp/tcp_test.go b/lib/tcp/tcp_test.go new file mode 100644 index 0000000..e9361b3 --- /dev/null +++ b/lib/tcp/tcp_test.go @@ -0,0 +1,94 @@ +package tcp + +import ( + "io" + "net" + "testing" + "time" + + i2pconv "github.com/go-i2p/go-i2ptunnel-config/lib" + client "github.com/go-i2p/go-i2ptunnel/lib/tcp/client" + server "github.com/go-i2p/go-i2ptunnel/lib/tcp/server" + "github.com/go-i2p/i2pkeys" +) + +func TestTCPTunnel(t *testing.T) { + // Generate test keys + //keys, err := i2pkeys.LoadKeys("i2pkeys/test-server.i2p.private") + _, err := i2pkeys.LoadKeys("i2pkeys/test-server.i2p.private") + if err != nil { + t.Fatalf("Failed to load test keys: %v", err) + } + + // Setup server config + serverConfig := i2pconv.TunnelConfig{ + Name: "test-server", + Type: "tcpserver", + Port: 8080, + Interface: "127.0.0.1", + } + + // Create and start server + srv, err := server.NewTCPServer(serverConfig, "127.0.0.1:7656") + if err != nil { + t.Fatalf("Failed to create server: %v", err) + } + + go func() { + if err := srv.Start(); err != nil { + t.Errorf("Server error: %v", err) + } + }() + defer srv.Stop() + + // Wait for server startup + time.Sleep(2 * time.Second) + + // Setup client config + clientConfig := i2pconv.TunnelConfig{ + Name: "test-client", + Type: "tcpclient", + Port: 8081, + Interface: "127.0.0.1", + Target: srv.Address(), + } + + // Create and start client + cli, err := client.NewTCPClient(clientConfig, "127.0.0.1:7656") + if err != nil { + t.Fatalf("Failed to create client: %v", err) + } + + go func() { + if err := cli.Start(); err != nil { + t.Errorf("Client error: %v", err) + } + }() + defer cli.Stop() + + // Wait for client startup + time.Sleep(2 * time.Second) + + // Test data transfer + testData := []byte("Hello I2P!") + conn, err := net.Dial("tcp", "127.0.0.1:8081") + if err != nil { + t.Fatalf("Failed to connect: %v", err) + } + defer conn.Close() + + n, err := conn.Write(testData) + if err != nil || n != len(testData) { + t.Fatalf("Failed to write test data: %v", err) + } + + buf := make([]byte, len(testData)) + n, err = io.ReadFull(conn, buf) + if err != nil || n != len(testData) { + t.Fatalf("Failed to read test data: %v", err) + } + + if string(buf) != string(testData) { + t.Errorf("Data mismatch: got %q, want %q", buf, testData) + } +}