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  }