@@ -3,6 +3,7 @@ package ps
33import (
44 "fmt"
55 "io/ioutil"
6+ "log"
67 "net/http"
78 "net/http/httptest"
89 "reflect"
@@ -11,6 +12,7 @@ import (
1112 drycc "github.com/drycc/controller-sdk-go"
1213 "github.com/drycc/controller-sdk-go/api"
1314 "github.com/drycc/controller-sdk-go/pkg/time"
15+ "github.com/gorilla/websocket"
1416)
1517
1618const processesFixture string = `
@@ -64,6 +66,8 @@ const restartWebTwoFixture string = `[
6466
6567const scaleExpected string = `{"web":2}`
6668
69+ var upgrader = websocket.Upgrader {} // use default options
70+
6771type fakeHTTPServer struct {}
6872
6973func (fakeHTTPServer ) ServeHTTP (res http.ResponseWriter , req * http.Request ) {
@@ -74,6 +78,29 @@ func (fakeHTTPServer) ServeHTTP(res http.ResponseWriter, req *http.Request) {
7478 return
7579 }
7680
81+ if req .URL .Path == "/v2/apps/example-go/pods/example-go-web-111/exec/" {
82+ c , err := upgrader .Upgrade (res , req , nil )
83+ if err != nil {
84+ log .Print ("upgrade:" , err )
85+ return
86+ }
87+ defer c .Close ()
88+ for {
89+ messageType , message , err := c .ReadMessage ()
90+ if err != nil {
91+ log .Println ("read:" , err )
92+ break
93+ }
94+
95+ log .Printf ("recv: %s" , message )
96+ err = c .WriteMessage (messageType , []byte ("# " + "\n " ))
97+ if err != nil {
98+ log .Println ("write:" , err )
99+ break
100+ }
101+ }
102+ }
103+
77104 if req .URL .Path == "/v2/apps/example-go/pods/restart/" && req .Method == "POST" {
78105 res .Write ([]byte (restartAllFixture ))
79106 return
@@ -155,6 +182,30 @@ func TestProcessesList(t *testing.T) {
155182 }
156183}
157184
185+ func TestExec (t * testing.T ) {
186+ handler := fakeHTTPServer {}
187+ server := httptest .NewServer (& handler )
188+ defer server .Close ()
189+
190+ drycc , err := drycc .New (false , server .URL , "abc" )
191+ if err != nil {
192+ t .Fatal (err )
193+ }
194+ conn , err := Exec (drycc , "example-go" , "example-go-web-111" , true , true , []string {"/bin/sh" })
195+ if err != nil {
196+ t .Fatal (err )
197+ }
198+ expected := []byte ("# " + "\n " )
199+ _ , actual , err := conn .ReadMessage ()
200+ if err != nil {
201+ t .Fatal (err )
202+ }
203+
204+ if ! reflect .DeepEqual (actual , expected ) {
205+ t .Errorf ("Expected: %v, Got %v" , expected , actual )
206+ }
207+ }
208+
158209type testExpected struct {
159210 Name string
160211 Type string
0 commit comments