mosn

Форк
0
/
subset_test.go 
248 строк · 5.1 Кб
1
//go:build MOSNTest
2
// +build MOSNTest
3

4
package loadbalancer
5

6
import (
7
	"testing"
8

9
	. "mosn.io/mosn/test/framework"
10
	"mosn.io/mosn/test/lib"
11
	"mosn.io/mosn/test/lib/xprotocol/boltv1"
12
)
13

14
func TestSubsetLoadBalancer(t *testing.T) {
15
	Scenario(t, "request with subset", func() {
16
		_, _ = lib.InitMosn(ConfigSubsetLoadBalancer, lib.CreateConfig(GreenServerConfig), lib.CreateConfig(BlueServerConfig))
17
		Case("request green server", func() {
18
			client := lib.CreateClient("bolt", &boltv1.BoltClientConfig{
19
				TargetAddr: "127.0.0.1:2045",
20
				Request: &boltv1.RequestConfig{
21
					Header: map[string]string{
22
						"service": "service.green",
23
					},
24
				},
25
				Verify: &boltv1.VerifyConfig{
26
					ExpectedStatusCode: 0,
27
					ExpectedHeader: map[string]string{
28
						"server_flag": "green",
29
					},
30
				},
31
			})
32
			Verify(client.SyncCall(), Equal, true)
33
		})
34
		Case("request blue server", func() {
35
			client := lib.CreateClient("bolt", &boltv1.BoltClientConfig{
36
				TargetAddr: "127.0.0.1:2045",
37
				Request: &boltv1.RequestConfig{
38
					Header: map[string]string{
39
						"service": "service.blue",
40
					},
41
				},
42
				Verify: &boltv1.VerifyConfig{
43
					ExpectedStatusCode: 0,
44
					ExpectedHeader: map[string]string{
45
						"server_flag": "blue",
46
					},
47
				},
48
			})
49
			Verify(client.SyncCall(), Equal, true)
50
		})
51
		Case("request fail server", func() {
52
			client := lib.CreateClient("bolt", &boltv1.BoltClientConfig{
53
				TargetAddr: "127.0.0.1:2045",
54
				Request: &boltv1.RequestConfig{
55
					Header: map[string]string{
56
						"service": "service.fail",
57
					},
58
				},
59
				Verify: &boltv1.VerifyConfig{
60
					ExpectedStatusCode: 6, // expected got a ResponseStatusNoProcessor
61
				},
62
			})
63
			Verify(client.SyncCall(), Equal, true)
64
		})
65
		Case("request default server", func() {
66
			client := lib.CreateClient("bolt", &boltv1.BoltClientConfig{
67
				TargetAddr: "127.0.0.1:2045",
68
				Request: &boltv1.RequestConfig{
69
					Header: map[string]string{
70
						"service": "service.any",
71
					},
72
				},
73
				Verify: &boltv1.VerifyConfig{
74
					ExpectedStatusCode: 0,
75
				},
76
			})
77
			Verify(client.SyncCall(), Equal, true)
78
		})
79

80
	})
81
}
82

83
const GreenServerConfig = `{
84
	"protocol":"bolt",
85
	"config": {
86
		"address": "127.0.0.1:8080",
87
		"mux_config": {
88
			".*":{
89
				"common_builder": {
90
					"status_code": 0,
91
					"header": {
92
						"server_flag": "green"
93
					}
94
				},
95
				"error_buidler": {
96
					"status_code": 16
97
				}
98
			}
99
		}
100
	}
101
}`
102

103
const BlueServerConfig = `{
104
	"protocol":"bolt",
105
	"config": {
106
		"address": "127.0.0.1:8081",
107
		"mux_config": {
108
			".*":{
109
				"common_builder": {
110
					"status_code": 0,
111
					"header": {
112
						"server_flag": "blue"
113
					}
114
				},
115
				"error_buidler": {
116
					"status_code": 16
117
				}
118
			}
119
		}
120
	}
121
}`
122

123
const ConfigSubsetLoadBalancer = `{
124
	"servers":[
125
		{
126
			"default_log_path":"stdout",
127
			"default_log_level": "ERROR",
128
			"routers":[
129
				{
130
					"router_config_name":"router_to_server",
131
					"virtual_hosts":[{
132
						"name":"subset",
133
						"domains": ["*"],
134
						"routers": [
135
							{
136
								 "match":{"headers":[{"name":"service","value":"service.green"}]},
137
								 "route":{
138
									 "cluster_name": "cluster_subset",
139
									 "metadata_match": {
140
										 "filter_metadata": {
141
											 "mosn.lb": {
142
												 "subset":"green"
143
											 }
144
										 }
145
									 }
146
								 }
147
							},
148
							{
149
								 "match":{"headers":[{"name":"service","value":"service.blue"}]},
150
								 "route":{
151
									 "cluster_name": "cluster_subset",
152
									 "metadata_match": {
153
										 "filter_metadata": {
154
											 "mosn.lb": {
155
												 "subset":"blue"
156
											 }
157
										 }
158
									 }
159
								 }
160
							},
161
							{
162
								 "match":{"headers":[{"name":"service","value":"service.fail"}]},
163
								 "route":{
164
									 "cluster_name": "cluster_subset",
165
									 "metadata_match": {
166
										 "filter_metadata": {
167
											 "mosn.lb": {
168
												 "subset":"fail"
169
											 }
170
										 }
171
									 }
172
								 }
173
							},
174
							{
175
								 "match":{"headers":[{"name":"service","value":".*"}]},
176
								 "route":{
177
									 "cluster_name": "cluster_subset"
178
								 }
179
							}
180

181

182
						]
183
					}]
184
				}
185
			],
186
			"listeners":[
187
				{
188
					"address":"127.0.0.1:2045",
189
					"bind_port": true,
190
					"filter_chains": [{
191
						"filters": [
192
							{
193
								"type": "proxy",
194
								"config": {
195
									"downstream_protocol": "X",
196
									"upstream_protocol": "X",
197
									"extend_config": {
198
										"sub_protocol": "bolt"
199
									},
200
									"router_config_name":"router_to_server"
201
								}
202
							}
203
						]
204
					}]
205
				}
206
			]
207
		}
208
	],
209
	"cluster_manager":{
210
		"clusters":[
211
			{
212
				"name":"cluster_subset",
213
				"type": "SIMPLE",
214
				"lb_type": "LB_RANDOM",
215
				"lb_subset_config": {
216
					"fall_back_policy": 0,
217
					"subset_selectors": [
218
						[
219
							"subset"
220
						]
221
					]
222
				},
223
				"hosts": [
224
					{
225
						"address": "127.0.0.1:8080",
226
						"metadata": {
227
							"filter_metadata": {
228
								"mosn.lb": {
229
									"subset": "green"
230
								}
231
							}
232
						}
233
					},
234
					{
235
						"address": "127.0.0.1:8081",
236
						"metadata": {
237
							"filter_metadata": {
238
								"mosn.lb": {
239
									"subset": "blue"
240
								}
241
							}
242
						}
243
					}
244
				]
245
			}
246
		]
247
	}
248
}`
249

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

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

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

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