11package apps
22
33import (
4+ "encoding/json"
45 "fmt"
56 "io/ioutil"
7+ "log"
68 "net/http"
79 "net/http/httptest"
810 "reflect"
911 "testing"
1012
1113 drycc "github.com/drycc/controller-sdk-go"
1214 "github.com/drycc/controller-sdk-go/api"
15+ "github.com/gorilla/websocket"
1316)
1417
1518const appFixture string = `
@@ -43,11 +46,19 @@ const appCreateExpected string = `{"id":"example-go"}`
4346const appRunExpected string = `{"command":"echo hi"}`
4447const appTransferExpected string = `{"owner":"test"}`
4548
49+ var upgrader = websocket.Upgrader {} // use default options
50+
4651type fakeHTTPServer struct {
4752 createID bool
4853 createWithoutID bool
4954}
5055
56+ type fakeLogReqMessage struct {
57+ Lines int `json:"lines"`
58+ Timeout int `json:"timeout"`
59+ Follow bool `json:"follow"`
60+ }
61+
5162func (f * fakeHTTPServer ) ServeHTTP (res http.ResponseWriter , req * http.Request ) {
5263 res .Header ().Add ("DRYCC_API_VERSION" , drycc .APIVersion )
5364
@@ -96,15 +107,23 @@ func (f *fakeHTTPServer) ServeHTTP(res http.ResponseWriter, req *http.Request) {
96107
97108 // The entire log message is prefixed and suffixed with a few characters (not entirely sure why)
98109 // We mimic those here
99- if req .URL .Path == "/v2/apps/example-go/logs" && req .URL .RawQuery == "" && req .Method == "GET" {
100- res .Write ([]byte (`test\nfoo\nbar` ))
101- return
102- }
103-
104- // The entire log message is prefixed and suffixed with a few characters (not entirely sure why)
105- // We mimic those here
106- if req .URL .Path == "/v2/apps/example-go/logs" && req .URL .RawQuery == "log_lines=1" && req .Method == "GET" {
107- res .Write ([]byte ("test" ))
110+ if req .URL .Path == "/v2/apps/example-go/logs" {
111+ c , err := upgrader .Upgrade (res , req , nil )
112+ if err != nil {
113+ log .Print ("upgrade:" , err )
114+ return
115+ }
116+ defer c .Close ()
117+ _ , message , err := c .ReadMessage ()
118+ if err != nil {
119+ log .Print ("upgrade:" , err )
120+ return
121+ }
122+ reqJSON := fakeLogReqMessage {}
123+ json .Unmarshal ([]byte (message ), & reqJSON )
124+ for i := 0 ; i < reqJSON .Lines ; i ++ {
125+ c .WriteMessage (websocket .TextMessage , []byte (fmt .Sprintf ("test %d" , i )))
126+ }
108127 return
109128 }
110129
@@ -296,25 +315,9 @@ func TestAppsList(t *testing.T) {
296315 }
297316}
298317
299- type testExpected struct {
300- Input int
301- Expected string
302- }
303-
304318func TestAppsLogs (t * testing.T ) {
305319 t .Parallel ()
306320
307- tests := []testExpected {
308- {
309- Input : - 1 ,
310- Expected : `test\nfoo\nbar` ,
311- },
312- {
313- Input : 1 ,
314- Expected : "test" ,
315- },
316- }
317-
318321 handler := fakeHTTPServer {}
319322 server := httptest .NewServer (& handler )
320323 defer server .Close ()
@@ -324,16 +327,16 @@ func TestAppsLogs(t *testing.T) {
324327 t .Fatal (err )
325328 }
326329
327- for _ , test := range tests {
328- actual , err := Logs ( drycc , "example-go" , test . Input )
329-
330- if err != nil {
331- t . Error ( err )
332- }
333-
334- if actual != test . Expected {
335- t . Errorf ( "Expected %s, Got %s" , test . Expected , actual )
336- }
330+ conn , err := Logs ( drycc , "example-go" , 1 , false , 300 )
331+ if err != nil {
332+ t . Fatal ( err )
333+ }
334+ _ , message , err := conn . ReadMessage ( )
335+ if err != nil {
336+ t . Fatal ( err )
337+ }
338+ if string ( message ) != " test 0" {
339+ t . Errorf ( "Expected %s, Got %s" , "test 0" , message )
337340 }
338341}
339342
0 commit comments