@@ -18,7 +18,7 @@ import (
18
18
"github.com/stretchr/testify/assert"
19
19
)
20
20
21
- //Assert expected with url.EscapedPath method to obtain the path.
21
+ // Assert expected with url.EscapedPath method to obtain the path.
22
22
func TestProxy (t * testing.T ) {
23
23
// Setup
24
24
t1 := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
@@ -31,7 +31,6 @@ func TestProxy(t *testing.T) {
31
31
}))
32
32
defer t2 .Close ()
33
33
url2 , _ := url .Parse (t2 .URL )
34
-
35
34
targets := []* ProxyTarget {
36
35
{
37
36
Name : "target 1" ,
@@ -122,6 +121,55 @@ func TestProxy(t *testing.T) {
122
121
e .ServeHTTP (rec , req )
123
122
}
124
123
124
+ type testProvider struct {
125
+ * commonBalancer
126
+ target * ProxyTarget
127
+ err error
128
+ }
129
+
130
+ func (p * testProvider ) Next (c echo.Context ) * ProxyTarget {
131
+ return & ProxyTarget {}
132
+ }
133
+
134
+ func (p * testProvider ) NextTarget (c echo.Context ) (* ProxyTarget , error ) {
135
+ return p .target , p .err
136
+ }
137
+
138
+ func TestTargetProvider (t * testing.T ) {
139
+ t1 := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
140
+ fmt .Fprint (w , "target 1" )
141
+ }))
142
+ defer t1 .Close ()
143
+ url1 , _ := url .Parse (t1 .URL )
144
+
145
+ e := echo .New ()
146
+ tp := & testProvider {commonBalancer : new (commonBalancer )}
147
+ tp .target = & ProxyTarget {Name : "target 1" , URL : url1 }
148
+ e .Use (Proxy (tp ))
149
+ rec := httptest .NewRecorder ()
150
+ req := httptest .NewRequest (http .MethodGet , "/" , nil )
151
+ e .ServeHTTP (rec , req )
152
+ body := rec .Body .String ()
153
+ assert .Equal (t , "target 1" , body )
154
+ }
155
+
156
+ func TestFailNextTarget (t * testing.T ) {
157
+ url1 , err := url .Parse ("http://dummy:8080" )
158
+ assert .Nil (t , err )
159
+
160
+ e := echo .New ()
161
+ tp := & testProvider {commonBalancer : new (commonBalancer )}
162
+ tp .target = & ProxyTarget {Name : "target 1" , URL : url1 }
163
+ tp .err = echo .NewHTTPError (http .StatusInternalServerError , "method could not select target" )
164
+
165
+ e .Use (Proxy (tp ))
166
+ rec := httptest .NewRecorder ()
167
+ req := httptest .NewRequest (http .MethodGet , "/" , nil )
168
+ e .ServeHTTP (rec , req )
169
+ body := rec .Body .String ()
170
+ assert .Equal (t , "{\" message\" :\" method could not select target\" }\n " , body )
171
+ }
172
+
125
173
func TestProxyRealIPHeader (t * testing.T ) {
126
174
// Setup
127
175
upstream := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {}))
0 commit comments