github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/igm/sockjs-go.v2/sockjs/httpreceiver_test.go (about) 1 package sockjs 2 3 import ( 4 "io" 5 "net/http/httptest" 6 "testing" 7 ) 8 9 type testFrameWriter struct { 10 frames []string 11 } 12 13 func (t *testFrameWriter) write(w io.Writer, frame string) (int, error) { 14 t.frames = append(t.frames, frame) 15 return len(frame), nil 16 } 17 18 func TestHttpReceiver_Create(t *testing.T) { 19 rec := httptest.NewRecorder() 20 recv := newHTTPReceiver(rec, 1024, new(testFrameWriter)) 21 if recv.doneCh != recv.doneNotify() { 22 t.Errorf("Calling done() must return close channel, but it does not") 23 } 24 if recv.rw != rec { 25 t.Errorf("Http.ResponseWriter not properly initialized") 26 } 27 if recv.maxResponseSize != 1024 { 28 t.Errorf("MaxResponseSize not properly initialized") 29 } 30 } 31 32 func TestHttpReceiver_SendEmptyFrames(t *testing.T) { 33 rec := httptest.NewRecorder() 34 recv := newHTTPReceiver(rec, 1024, new(testFrameWriter)) 35 recv.sendBulk() 36 if rec.Body.String() != "" { 37 t.Errorf("Incorrect body content received from receiver '%s'", rec.Body.String()) 38 } 39 } 40 41 func TestHttpReceiver_SendFrame(t *testing.T) { 42 rec := httptest.NewRecorder() 43 fw := new(testFrameWriter) 44 recv := newHTTPReceiver(rec, 1024, fw) 45 var frame = "some frame content" 46 recv.sendFrame(frame) 47 if len(fw.frames) != 1 || fw.frames[0] != frame { 48 t.Errorf("Incorrect body content received, got '%s', expected '%s'", fw.frames, frame) 49 } 50 51 } 52 53 func TestHttpReceiver_SendBulk(t *testing.T) { 54 rec := httptest.NewRecorder() 55 fw := new(testFrameWriter) 56 recv := newHTTPReceiver(rec, 1024, fw) 57 recv.sendBulk("message 1", "message 2", "message 3") 58 expected := "a[\"message 1\",\"message 2\",\"message 3\"]" 59 if len(fw.frames) != 1 || fw.frames[0] != expected { 60 t.Errorf("Incorrect body content received from receiver, got '%s' expected '%s'", fw.frames, expected) 61 } 62 } 63 64 func TestHttpReceiver_MaximumResponseSize(t *testing.T) { 65 rec := httptest.NewRecorder() 66 recv := newHTTPReceiver(rec, 52, new(testFrameWriter)) 67 recv.sendBulk("message 1", "message 2") // produces 26 bytes of response in 1 frame 68 if recv.currentResponseSize != 26 { 69 t.Errorf("Incorrect response size calcualated, got '%d' expected '%d'", recv.currentResponseSize, 26) 70 } 71 select { 72 case <-recv.doneNotify(): 73 t.Errorf("Receiver should not be done yet") 74 default: // ok 75 } 76 recv.sendBulk("message 1", "message 2") // produces another 26 bytes of response in 1 frame to go over max resposne size 77 select { 78 case <-recv.doneNotify(): // ok 79 default: 80 t.Errorf("Receiver closed channel did not close") 81 } 82 } 83 84 func TestHttpReceiver_Close(t *testing.T) { 85 rec := httptest.NewRecorder() 86 recv := newHTTPReceiver(rec, 1024, nil) 87 recv.close() 88 if recv.state != stateHTTPReceiverClosed { 89 t.Errorf("Unexpected state, got '%d', expected '%d'", recv.state, stateHTTPReceiverClosed) 90 } 91 } 92 93 func TestHttpReceiver_ConnectionInterrupt(t *testing.T) { 94 rw := newClosableRecorder() 95 recv := newHTTPReceiver(rw, 1024, nil) 96 rw.closeNotifCh <- true 97 recv.Lock() 98 if recv.state != stateHTTPReceiverClosed { 99 t.Errorf("Unexpected state, got '%d', expected '%d'", recv.state, stateHTTPReceiverClosed) 100 } 101 }