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  }