14
. "mosn.io/mosn/test/framework"
15
"mosn.io/mosn/test/lib/mosn"
18
var receiveHttpReq bool = false
19
var receiveTcpReq bool = true
21
func startTcpServer(port int) net.Listener {
22
l, err := net.Listen("tcp", "127.0.0.1:"+strconv.Itoa(port))
23
if err != nil || l == nil {
24
fmt.Println("fail to start tcp server")
30
conn, err := l.Accept()
32
fmt.Println("fail to accept tcp connection")
35
go func(conn net.Conn) {
36
fmt.Println("Accepted new connection.")
40
buf := make([]byte, 1024)
41
size, err := conn.Read(buf)
46
fmt.Println("Read new data from connection:", string(data))
56
func startHttpServer(port int) *http.Server {
57
server := &http.Server{Addr: "127.0.0.1:" + strconv.Itoa(port)}
58
http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
61
go server.ListenAndServe()
65
func TestProxyFallback(t *testing.T) {
66
Scenario(t, "proxy fallback", func() {
67
var m *mosn.MosnOperator
68
var tcpServer net.Listener
69
var httpServer *http.Server
73
m = mosn.StartMosn(ConfigFallback)
76
httpServer = startHttpServer(22164)
78
tcpServer = startTcpServer(22165)
80
time.Sleep(2 * time.Second)
83
Case("client-mosn-server", func() {
85
_, _ = http.Get("http://127.0.0.1:22163/")
88
c, err := net.Dial("tcp", "127.0.0.1:22163")
89
Verify(err, Equal, nil)
90
c.Write([]byte("hello world hello world\n"))
92
time.Sleep(time.Second)
95
buf := make([]byte, 1024)
96
size, err := c.Read(buf)
97
Verify(err, Equal, nil)
100
Verify(receiveHttpReq, Equal, true)
101
Verify(receiveTcpReq, Equal, true)
102
Verify(string(data), Equal, "hello world hello world\n")
105
_, err = net.Dial("tcp", "127.0.0.1:22163")
106
Verify(err, Equal, nil)
107
time.Sleep(18 * time.Second)
112
_ = tcpServer.Close()
113
_ = httpServer.Close()
118
const ConfigFallback = `
122
"default_log_path": "stdout",
125
"router_config_name": "router_to_http_server",
128
"name": "server_hosts",
138
"cluster_name": "server_http_cluster"
148
"address": "127.0.0.1:22163",
156
"fallback_for_unknown_protocol": true,
157
"downstream_protocol": "Auto",
158
"upstream_protocol": "Http1",
159
"router_config_name": "router_to_http_server"
165
"cluster": "server_tcp_cluster"
178
"name": "server_http_cluster",
180
"lb_type": "LB_RANDOM",
183
"address": "127.0.0.1:22164"
188
"name": "server_tcp_cluster",
190
"lb_type": "LB_RANDOM",
193
"address": "127.0.0.1:22165"