github.com/nsqio/nsq@v1.3.0/nsqlookupd/lookup_protocol_v1_test.go (about)

     1  package nsqlookupd
     2  
     3  import (
     4  	"errors"
     5  	"testing"
     6  	"time"
     7  
     8  	"github.com/nsqio/nsq/internal/protocol"
     9  	"github.com/nsqio/nsq/internal/test"
    10  )
    11  
    12  func TestIOLoopReturnsClientErrWhenSendFails(t *testing.T) {
    13  	fakeConn := test.NewFakeNetConn()
    14  	fakeConn.WriteFunc = func(b []byte) (int, error) {
    15  		return 0, errors.New("write error")
    16  	}
    17  
    18  	testIOLoopReturnsClientErr(t, fakeConn)
    19  }
    20  
    21  func TestIOLoopReturnsClientErrWhenSendSucceeds(t *testing.T) {
    22  	fakeConn := test.NewFakeNetConn()
    23  	fakeConn.WriteFunc = func(b []byte) (int, error) {
    24  		return len(b), nil
    25  	}
    26  
    27  	testIOLoopReturnsClientErr(t, fakeConn)
    28  }
    29  
    30  func testIOLoopReturnsClientErr(t *testing.T, fakeConn test.FakeNetConn) {
    31  	fakeConn.ReadFunc = func(b []byte) (int, error) {
    32  		return copy(b, []byte("INVALID_COMMAND\n")), nil
    33  	}
    34  
    35  	opts := NewOptions()
    36  	opts.Logger = test.NewTestLogger(t)
    37  	opts.LogLevel = LOG_DEBUG
    38  	opts.TCPAddress = "127.0.0.1:0"
    39  	opts.HTTPAddress = "127.0.0.1:0"
    40  
    41  	nsqlookupd, err := New(opts)
    42  	test.Nil(t, err)
    43  	prot := &LookupProtocolV1{nsqlookupd: nsqlookupd}
    44  
    45  	nsqlookupd.tcpServer = &tcpServer{nsqlookupd: prot.nsqlookupd}
    46  
    47  	errChan := make(chan error)
    48  	testIOLoop := func() {
    49  		client := prot.NewClient(fakeConn)
    50  		errChan <- prot.IOLoop(client)
    51  		defer prot.nsqlookupd.Exit()
    52  	}
    53  	go testIOLoop()
    54  
    55  	var timeout bool
    56  
    57  	select {
    58  	case err = <-errChan:
    59  	case <-time.After(2 * time.Second):
    60  		timeout = true
    61  	}
    62  
    63  	test.Equal(t, false, timeout)
    64  
    65  	test.NotNil(t, err)
    66  	test.Equal(t, "E_INVALID invalid command INVALID_COMMAND", err.Error())
    67  	test.NotNil(t, err.(*protocol.FatalClientErr))
    68  }