github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/igm/sockjs-go.v2/sockjs/eventsource_test.gon-place (about) 1 package sockjs 2 3 import ( 4 "net/http" 5 "net/http/httptest" 6 "testing" 7 "time" 8 ) 9 10 func TestHandler_EventSource(t *testing.T) { 11 rw := httptest.NewRecorder() 12 req, _ := http.NewRequest("POST", "/server/session/eventsource", nil) 13 h := newTestHandler() 14 h.options.ResponseLimit = 1024 15 go func() { 16 time.Sleep(1 * time.Millisecond) 17 h.sessionsMux.Lock() 18 defer h.sessionsMux.Unlock() 19 sess := h.sessions["session"] 20 sess.Lock() 21 defer sess.Unlock() 22 recv := sess.recv 23 recv.close() 24 }() 25 h.eventSource(rw, req) 26 contentType := rw.Header().Get("content-type") 27 expected := "text/event-stream; charset=UTF-8" 28 if contentType != expected { 29 t.Errorf("Unexpected content type, got '%s', extected '%s'", contentType, expected) 30 } 31 if rw.Code != http.StatusOK { 32 t.Errorf("Unexpected response code, got '%d', expected '%d'", rw.Code, http.StatusOK) 33 } 34 35 if rw.Body.String() != "\r\ndata: o\r\n\r\n" { 36 t.Errorf("Event stream prelude, got '%s'", rw.Body) 37 } 38 } 39 40 func TestHandler_EventSourceMultipleConnections(t *testing.T) { 41 h := newTestHandler() 42 h.options.ResponseLimit = 1024 43 rw := httptest.NewRecorder() 44 req, _ := http.NewRequest("POST", "/server/sess/eventsource", nil) 45 go func() { 46 rw := &ClosableRecorder{httptest.NewRecorder(), nil} 47 h.eventSource(rw, req) 48 if rw.Body.String() != "\r\ndata: c[2010,\"Another connection still open\"]\r\n\r\n" { 49 t.Errorf("wrong, got '%v'", rw.Body) 50 } 51 h.sessionsMux.Lock() 52 sess := h.sessions["sess"] 53 sess.close() 54 h.sessionsMux.Unlock() 55 }() 56 h.eventSource(rw, req) 57 } 58 59 func TestHandler_EventSourceConnectionInterrupted(t *testing.T) { 60 h := newTestHandler() 61 sess := newTestSession() 62 sess.state = sessionActive 63 h.sessions["session"] = sess 64 req, _ := http.NewRequest("POST", "/server/session/eventsource", nil) 65 rw := newClosableRecorder() 66 close(rw.closeNotifCh) 67 h.eventSource(rw, req) 68 time.Sleep(1 * time.Millisecond) 69 sess.Lock() 70 if sess.state != sessionClosed { 71 t.Errorf("Session should be closed") 72 } 73 }