@@ -7,25 +7,25 @@ import (
77 log "github.com/Sirupsen/logrus"
88 "github.com/qa-dev/jsonwire-grid/jsonwire"
99 "github.com/qa-dev/jsonwire-grid/pool"
10+ "github.com/qa-dev/jsonwire-grid/pool/capabilities"
1011 "github.com/qa-dev/jsonwire-grid/proxy"
11- "github.com/qa-dev/jsonwire-grid/selenium"
12- "github.com/qa-dev/jsonwire-grid/wda"
1312 "io/ioutil"
1413 "net/http"
1514 "net/http/httputil"
1615 "net/url"
1716)
1817
1918type CreateSession struct {
20- Pool * pool.Pool
19+ Pool * pool.Pool
20+ ClientFactory jsonwire.ClientFactoryInterface
2121}
2222
2323func (h * CreateSession ) ServeHTTP (rw http.ResponseWriter , r * http.Request ) {
2424 if r .Method != http .MethodPost {
2525 http .Error (rw , "Method Not Allowed" , http .StatusMethodNotAllowed )
2626 return
2727 }
28- var capabilities map [string ]jsonwire.Capabilities
28+ var caps map [string ]jsonwire.Capabilities
2929 body , err := ioutil .ReadAll (r .Body )
3030 if err != nil {
3131 errorMessage := "Error reading request: " + err .Error ()
@@ -42,21 +42,21 @@ func (h *CreateSession) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
4242 rc := ioutil .NopCloser (bytes .NewReader (body ))
4343 r .Body = rc
4444 log .Infof ("requested session with params: %s" , string (body ))
45- err = json .Unmarshal (body , & capabilities )
45+ err = json .Unmarshal (body , & caps )
4646 if err != nil {
4747 errorMessage := "Error unmarshal json: " + err .Error ()
4848 log .Error (errorMessage )
4949 http .Error (rw , errorMessage , http .StatusInternalServerError )
5050 return
5151 }
52- desiredCapabilities , ok := capabilities ["desiredCapabilities" ]
52+ desiredCapabilities , ok := caps ["desiredCapabilities" ]
5353 if ! ok {
5454 errorMessage := "Not passed 'desiredCapabilities'"
5555 log .Error (errorMessage )
5656 http .Error (rw , errorMessage , http .StatusInternalServerError )
5757 return
5858 }
59- poolCapabilities := pool .Capabilities (desiredCapabilities )
59+ poolCapabilities := capabilities .Capabilities (desiredCapabilities )
6060 tw , err := h .tryCreateSession (r , & poolCapabilities )
6161 if err != nil {
6262 http .Error (rw , "Can't create session: " + err .Error (), http .StatusInternalServerError )
@@ -66,7 +66,7 @@ func (h *CreateSession) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
6666 rw .Write (tw .Output )
6767}
6868
69- func (h * CreateSession ) tryCreateSession (r * http.Request , capabilities * pool .Capabilities ) (* proxy.ResponseWriter , error ) {
69+ func (h * CreateSession ) tryCreateSession (r * http.Request , capabilities * capabilities .Capabilities ) (* proxy.ResponseWriter , error ) {
7070 select {
7171 case <- r .Context ().Done ():
7272 err := errors .New ("Request cancelled by client, " + r .Context ().Err ().Error ())
@@ -79,16 +79,11 @@ func (h *CreateSession) tryCreateSession(r *http.Request, capabilities *pool.Cap
7979 return nil , errors .New ("reserve node error: " + err .Error ())
8080 }
8181 //todo: посылать в мониторинг событие, если вернулся не 0
82- seleniumClient , err := createClient (node .Address , capabilities )
83- if err != nil {
84- return nil , errors .New ("create Client error: " + err .Error ())
85- }
82+ seleniumClient := h .ClientFactory .Create (node .Address )
8683 seleniumNode := jsonwire .NewNode (seleniumClient )
8784 _ , err = seleniumNode .RemoveAllSessions ()
8885 if err != nil {
89- log .Warn ("Can't remove all sessions from node: " + err .Error () + ", go to next available node: " + node .String ())
90- h .Pool .Remove (node )
91- return h .tryCreateSession (r , capabilities )
86+ return nil , errors .New ("Can't remove all sessions from node: " + err .Error () + ", go to next available node: " + node .String ())
9287 }
9388 reverseProxy := httputil .NewSingleHostReverseProxy (& url.URL {
9489 Scheme : "http" ,
@@ -100,23 +95,8 @@ func (h *CreateSession) tryCreateSession(r *http.Request, capabilities *pool.Cap
10095 reverseProxy .ServeHTTP (tw , r )
10196
10297 if ! transport .IsSuccess {
103- log .Warn ("Failure proxy request on node " + node .String () + ": " + string (tw .Output ))
104- h .Pool .Remove (node )
105- return h .tryCreateSession (r , capabilities )
98+ return nil , errors .New ("Failure proxy request on node " + node .String () + ": " + string (tw .Output ))
10699 }
107100
108101 return tw , nil
109102}
110-
111- func createClient (addr string , capabilities * pool.Capabilities ) (jsonwire.ClientInterface , error ) {
112- if capabilities == nil {
113- return nil , errors .New ("capabilities must be not nil" )
114- }
115- platformName := (* capabilities )["platformName" ]
116- switch platformName {
117- case "WDA" :
118- return wda .NewClient (addr ), nil
119- default :
120- return selenium .NewClient (addr ), nil
121- }
122- }
0 commit comments