github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/igm/sockjs-go.v2/sockjs/handler_test.go (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 }