github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/igm/sockjs-go.v2/sockjs/handler_test.gon-place (about)

     1  package sockjs
     2  
     3  import (
     4  	"net/http"
     5  	"net/http/httptest"
     6  	"net/url"
     7  	"testing"
     8  	"time"
     9  )
    10  
    11  func TestHandler_Create(t *testing.T) {
    12  	handler := newHandler("/echo", DefaultOptions, nil)
    13  	if handler.Prefix() != "/echo" {
    14  		t.Errorf("Prefix not properly set, got '%s' expected '%s'", handler.Prefix(), "/echo")
    15  	}
    16  	if handler.sessions == nil {
    17  		t.Errorf("Handler session map not made")
    18  	}
    19  	server := httptest.NewServer(handler)
    20  	defer server.Close()
    21  
    22  	resp, err := http.Get(server.URL + "/echo")
    23  	if err != nil {
    24  		t.Errorf("There should not be any error, got '%s'", err)
    25  	}
    26  	if resp.StatusCode != http.StatusOK {
    27  		t.Errorf("Unexpected status code receiver, got '%d' expected '%d'", resp.StatusCode, http.StatusOK)
    28  	}
    29  }
    30  
    31  func TestHandler_ParseSessionId(t *testing.T) {
    32  	h := handler{prefix: "/prefix"}
    33  	url, _ := url.Parse("http://server:80/prefix/server/session/whatever")
    34  	if session, err := h.parseSessionID(url); session != "session" || err != nil {
    35  		t.Errorf("Wrong session parsed, got '%s' expected '%s' with error = '%v'", session, "session", err)
    36  	}
    37  	url, _ = url.Parse("http://server:80/asdasd/server/session/whatever")
    38  	if _, err := h.parseSessionID(url); err == nil {
    39  		t.Errorf("Should return error")
    40  	}
    41  }
    42  
    43  func TestHandler_SessionByRequest(t *testing.T) {
    44  	h := newHandler("", DefaultOptions, nil)
    45  	h.options.DisconnectDelay = 10 * time.Millisecond
    46  	var handlerFuncCalled = make(chan Session)
    47  	h.handlerFunc = func(conn Session) { handlerFuncCalled <- conn }
    48  	req, _ := http.NewRequest("POST", "/server/sessionid/whatever/follows", nil)
    49  	sess, err := h.sessionByRequest(req)
    50  	if sess == nil || err != nil {
    51  		t.Errorf("Session should be returned")
    52  		// test handlerFunc was called
    53  		select {
    54  		case conn := <-handlerFuncCalled: // ok
    55  			if conn != sess {
    56  				t.Errorf("Handler was not passed correct session")
    57  			}
    58  		case <-time.After(100 * time.Millisecond):
    59  			t.Errorf("HandlerFunc was not called")
    60  		}
    61  	}
    62  	// test session is reused for multiple requests with same sessionID
    63  	req2, _ := http.NewRequest("POST", "/server/sessionid/whatever", nil)
    64  	if sess2, err := h.sessionByRequest(req2); sess2 != sess || err != nil {
    65  		t.Errorf("Expected error, got session: '%v'", sess)
    66  	}
    67  	// test session expires after timeout
    68  	time.Sleep(15 * time.Millisecond)
    69  	h.sessionsMux.Lock()
    70  	if _, exists := h.sessions["sessionid"]; exists {
    71  		t.Errorf("Session should not exist in handler after timeout")
    72  	}
    73  	h.sessionsMux.Unlock()
    74  	// test proper behaviour in case URL is not correct
    75  	req, _ = http.NewRequest("POST", "", nil)
    76  	if _, err := h.sessionByRequest(req); err == nil {
    77  		t.Errorf("Expected parser sessionID from URL error, got 'nil'")
    78  	}
    79  }