mosn

Форк
0
/
tproxy_test.go 
161 строка · 3.7 Кб
1
//go:build Skip
2
// +build Skip
3

4
package tproxy
5

6
import (
7
	"io/ioutil"
8
	"net/http"
9
	"os/exec"
10
	"testing"
11

12
	. "mosn.io/mosn/test/framework"
13
	"mosn.io/mosn/test/lib"
14
)
15

16
func request(t *testing.T, url string) []byte {
17
	resp, err := http.Get(url)
18
	if err != nil {
19
		t.Fatalf("request failed: %v", err)
20
	}
21
	defer resp.Body.Close()
22
	b, _ := ioutil.ReadAll(resp.Body)
23
	return b
24
}
25

26
func testEnvScript(path string) error {
27
	runCmd := exec.Command("sudo", "/bin/bash", path)
28
	_, err := runCmd.CombinedOutput()
29
	if err != nil {
30
		return err
31
	}
32
	return nil
33
}
34

35
// TODO Execute this test using a docker image containing iptables and sudo
36
func TestSimpleTProxy(t *testing.T) {
37

38
	err := testEnvScript("./setup.sh")
39

40
	defer testEnvScript("./cleanup.sh")
41

42
	if err != nil {
43
		t.Fatal(err)
44
	}
45

46
	Scenario(t, "test transparent proxy egress", func() {
47
		lib.InitMosn(ConfigTProxy)
48
		Case("general listener", func() {
49
			Equal(t, request(t, "http://2.2.2.2:80"), []byte("this is general_server"))
50
		})
51
		Case("proxy listener", func() {
52
			Equal(t, request(t, "http://2.2.2.2:12345"), []byte("this is tproxy_server"))
53
		})
54
	})
55
}
56

57
const ConfigTProxy = `{
58
	"servers":[
59
		{
60
			"default_log_path":"stdout",
61
			"routers": [
62
				{
63
                    "router_config_name": "tproxy_router",
64
                    "virtual_hosts": [
65
						{
66
							"name": "tproxy_server",
67
							"domains": [
68
								"*"
69
							],
70
							"routers": [
71
								{
72
									"direct_response": {
73
										"status": 200,
74
										"body": "this is tproxy_server"
75
									}
76
								}
77
							]
78
						}
79
                    ]
80
                },
81
				{
82
                    "router_config_name": "general_router",
83
                    "virtual_hosts": [
84
						{
85
							"name": "general_server",
86
							"domains": [
87
								"*"
88
							],
89
							"routers": [
90
								{
91
									"direct_response": {
92
										"status": 200,
93
										"body": "this is general_server"
94
									}
95
								}
96
							]
97
						}
98
                    ]
99
                }
100
			],
101
			"listeners":[
102
				{
103
					"name":"tproxy_listener",
104
					"address": "0.0.0.0:16000",
105
                    "bind_port": true,
106
					"use_original_dst": "tproxy",
107
					"listener_filters": [
108
						{
109
							"type": "original_dst",
110
							"config":{
111
								"type": "tproxy"
112
							}
113
						}
114
					],
115
					"filter_chains": [
116
                        {
117
                            "filters": [
118
                                {
119
                                    "type": "proxy",
120
                                    "config": {
121
                                        "downstream_protocol": "Auto",
122
                                        "upstream_protocol": "Auto",
123
                                        "router_config_name": "tproxy_router"
124
                                    }
125
                                }
126
                            ]
127
                        }
128
                    ]
129
				},
130
				{
131
					"name": "general_listener",
132
                    "address": "0.0.0.0:80",
133
                    "bind_port": false,
134
                    "filter_chains": [
135
                        {
136
                            "filters": [
137
                                {
138
                                    "type": "proxy",
139
                                    "config": {
140
                                        "downstream_protocol": "Auto",
141
                                        "upstream_protocol": "Auto",
142
                                        "router_config_name": "general_router"
143
                                    }
144
                                }
145
                            ]
146
                        }
147
                    ]
148
				}
149
			]
150
		}
151
	],
152
	"admin": {
153
		"address": {
154
			"socket_address": {
155
				"address": "0.0.0.0",
156
				"port_value": 34901
157
			}
158
		}
159
	}
160
}
161
`
162

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.