Skip to content

Commit f3ac3a8

Browse files
committed
Add tcp echo server test
1 parent 66155b9 commit f3ac3a8

File tree

3 files changed

+136
-0
lines changed

3 files changed

+136
-0
lines changed

tests/concurrent_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ func TestProxy_Concurrency(t *testing.T) {
2222
defer close(stopCh)
2323

2424
proxy, cleanup, err := runGRPCProxyServer()
25+
if err != nil {
26+
t.Fatal(err)
27+
}
2528
defer cleanup()
2629

2730
if err := runAgent(proxy.agent, stopCh); err != nil {

tests/proxy_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,9 @@ func TestProxy_LargeResponse(t *testing.T) {
102102
defer close(stopCh)
103103

104104
proxy, cleanup, err := runGRPCProxyServer()
105+
if err != nil {
106+
t.Fatal(err)
107+
}
105108
defer cleanup()
106109

107110
if err := runAgent(proxy.agent, stopCh); err != nil {

tests/tcp_server_test.go

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
package tests
2+
3+
import (
4+
"net"
5+
"testing"
6+
"time"
7+
8+
"google.golang.org/grpc"
9+
"k8s.io/klog"
10+
"sigs.k8s.io/apiserver-network-proxy/pkg/agent/client"
11+
)
12+
13+
func echo(conn net.Conn) {
14+
var data [256]byte
15+
16+
for {
17+
n, err := conn.Read(data[:])
18+
if err != nil {
19+
klog.Info(err)
20+
return
21+
}
22+
23+
_, err = conn.Write(data[:n])
24+
if err != nil {
25+
klog.Info(err)
26+
return
27+
}
28+
}
29+
}
30+
31+
func TestEchoServer(t *testing.T) {
32+
ln, err := net.Listen("tcp", "")
33+
if err != nil {
34+
t.Error(err)
35+
}
36+
37+
go func() {
38+
for {
39+
conn, err := ln.Accept()
40+
if err != nil {
41+
klog.Info(err)
42+
break
43+
}
44+
go echo(conn)
45+
}
46+
}()
47+
48+
stopCh := make(chan struct{})
49+
defer close(stopCh)
50+
51+
proxy, cleanup, err := runGRPCProxyServer()
52+
if err != nil {
53+
t.Fatal(err)
54+
}
55+
defer cleanup()
56+
57+
if err := runAgent(proxy.agent, stopCh); err != nil {
58+
t.Fatal(err)
59+
}
60+
61+
// Wait for agent to register on proxy server
62+
time.Sleep(time.Second)
63+
64+
// run test client
65+
tunnel, err := client.CreateGrpcTunnel(proxy.front, grpc.WithInsecure())
66+
if err != nil {
67+
t.Fatal(err)
68+
}
69+
70+
conn, err := tunnel.Dial("tcp", ln.Addr().String())
71+
if err != nil {
72+
t.Error(err)
73+
}
74+
75+
msg := "1234567890123456789012345"
76+
n, err := conn.Write([]byte(msg))
77+
if err != nil {
78+
t.Error(err)
79+
}
80+
if n != len(msg) {
81+
t.Errorf("expect write %d; got %d", len(msg), n)
82+
}
83+
84+
var data [10]byte
85+
86+
n, err = conn.Read(data[:])
87+
if err != nil {
88+
t.Error(err)
89+
}
90+
if string(data[:n]) != msg[:10] {
91+
t.Errorf("expect %s; got %s", msg[:10], string(data[:n]))
92+
}
93+
94+
n, err = conn.Read(data[:])
95+
if err != nil {
96+
t.Error(err)
97+
}
98+
if string(data[:n]) != msg[10:20] {
99+
t.Errorf("expect %s; got %s", msg[10:20], string(data[:n]))
100+
}
101+
102+
msg2 := "1234567"
103+
n, err = conn.Write([]byte(msg2))
104+
if err != nil {
105+
t.Error(err)
106+
}
107+
if n != len(msg2) {
108+
t.Errorf("expect write %d; got %d", len(msg2), n)
109+
}
110+
111+
n, err = conn.Read(data[:])
112+
if err != nil {
113+
t.Error(err)
114+
}
115+
if string(data[:n]) != msg[20:] {
116+
t.Errorf("expect %s; got %s", msg[20:], string(data[:n]))
117+
}
118+
119+
n, err = conn.Read(data[:])
120+
if err != nil {
121+
t.Error(err)
122+
}
123+
if string(data[:n]) != msg2 {
124+
t.Errorf("expect %s; got %s", msg, string(data[:n]))
125+
}
126+
127+
if err := conn.Close(); err != nil {
128+
t.Error(err)
129+
}
130+
}

0 commit comments

Comments
 (0)