/
handler.go
101 lines (95 loc) · 2.96 KB
/
handler.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package gobistest
import (
"github.com/orange-cloudfoundry/gobis"
"net/http"
"strings"
)
type GobisHandlerTest struct {
routes []gobis.ProxyRoute
servers []*PackServer
gobisHandler gobis.GobisHandler
}
func generateRoutesAndServers(routes []gobis.ProxyRoute, inSsl bool) ([]gobis.ProxyRoute, []*PackServer) {
servers := make([]*PackServer, 0)
finalRoutes := make([]gobis.ProxyRoute, 0)
for i, route := range routes {
route.NoBuffer = true
servers = append(servers, CreateBackendServer(route.Name))
if len(route.Routes) > 0 {
subRoutes, subServers := generateRoutesAndServers(route.Routes, inSsl)
servers = append(servers, subServers...)
route.Routes = subRoutes
}
routeUrl := servers[i].Server.URL
if inSsl {
routeUrl = strings.TrimPrefix(routeUrl, "http")
routeUrl = "https" + routeUrl
}
if route.ForwardedHeader == "" {
route.Url = routeUrl
}
finalRoutes = append(finalRoutes, route)
}
return finalRoutes, servers
}
func NewSimpleGobisHandlerTest(routes ...gobis.ProxyRoute) *GobisHandlerTest {
return NewGobisHandlerTest(routes)
}
func NewSimpleGobisHandlerTestInSsl(routes ...gobis.ProxyRoute) *GobisHandlerTest {
return NewGobisHandlerTestSsl(routes, true)
}
func NewGobisHandlerTest(routes []gobis.ProxyRoute, middlewareHandlers ...gobis.MiddlewareHandler) *GobisHandlerTest {
return NewGobisHandlerTestSsl(routes, false, middlewareHandlers...)
}
func NewGobisHandlerTestSsl(routes []gobis.ProxyRoute, inSsl bool, middlewareHandlers ...gobis.MiddlewareHandler) *GobisHandlerTest {
finalRoutes, servers := generateRoutesAndServers(routes, inSsl)
config := gobis.DefaultHandlerConfig{
Routes: finalRoutes,
}
gobisHandler, err := gobis.NewDefaultHandler(config, middlewareHandlers...)
if err != nil {
panic(err)
}
return &GobisHandlerTest{
routes: finalRoutes,
servers: servers,
gobisHandler: gobisHandler,
}
}
func (h GobisHandlerTest) ServerFirst() *PackServer {
return h.servers[0]
}
func (h GobisHandlerTest) Server(route gobis.ProxyRoute) *PackServer {
return h.ServerByName(route.Name)
}
func (h GobisHandlerTest) ServerByName(name string) *PackServer {
for _, server := range h.servers {
if server.Name == name {
return server
}
}
panic("Can't found server " + name)
return nil
}
func (h *GobisHandlerTest) SetBackendHandlerByName(name string, handler http.Handler) {
server := h.ServerByName(name)
server.SetHandler(handler)
}
func (h *GobisHandlerTest) SetBackendHandler(route gobis.ProxyRoute, handler http.Handler) {
h.SetBackendHandlerByName(route.Name, handler)
}
func (h *GobisHandlerTest) SetBackendHandlerFirst(handler http.Handler) {
server := h.ServerFirst()
server.SetHandler(handler)
}
func (h GobisHandlerTest) Close() {
for _, server := range h.servers {
server.Server.Close()
}
}
func (h GobisHandlerTest) GetServerAddr() string {
return h.gobisHandler.GetServerAddr()
}
func (h GobisHandlerTest) ServeHTTP(w http.ResponseWriter, req *http.Request) {
h.gobisHandler.ServeHTTP(w, req)
}