github.com/dominant-strategies/go-quai@v0.28.2/p2p/transport_test.go (about)

     1  // Copyright 2015 The go-ethereum Authors
     2  // This file is part of the go-ethereum library.
     3  //
     4  // The go-ethereum library is free software: you can redistribute it and/or modify
     5  // it under the terms of the GNU Lesser General Public License as published by
     6  // the Free Software Foundation, either version 3 of the License, or
     7  // (at your option) any later version.
     8  //
     9  // The go-ethereum library is distributed in the hope that it will be useful,
    10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    12  // GNU Lesser General Public License for more details.
    13  //
    14  // You should have received a copy of the GNU Lesser General Public License
    15  // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
    16  
    17  package p2p
    18  
    19  import (
    20  	"errors"
    21  	"reflect"
    22  	"testing"
    23  )
    24  
    25  func TestProtocolHandshakeErrors(t *testing.T) {
    26  	tests := []struct {
    27  		code uint64
    28  		msg  interface{}
    29  		err  error
    30  	}{
    31  		{
    32  			code: discMsg,
    33  			msg:  []DiscReason{DiscQuitting},
    34  			err:  DiscQuitting,
    35  		},
    36  		{
    37  			code: 0x989898,
    38  			msg:  []byte{1},
    39  			err:  errors.New("expected handshake, got 989898"),
    40  		},
    41  		{
    42  			code: handshakeMsg,
    43  			msg:  make([]byte, baseProtocolMaxMsgSize+2),
    44  			err:  errors.New("message too big"),
    45  		},
    46  		{
    47  			code: handshakeMsg,
    48  			msg:  []byte{1, 2, 3},
    49  			err:  newPeerError(errInvalidMsg, "(code 0) (size 4) rlp: expected input list for p2p.protoHandshake"),
    50  		},
    51  		{
    52  			code: handshakeMsg,
    53  			msg:  &protoHandshake{Version: 3},
    54  			err:  DiscInvalidIdentity,
    55  		},
    56  	}
    57  
    58  	for i, test := range tests {
    59  		p1, p2 := MsgPipe()
    60  		go Send(p1, test.code, test.msg)
    61  		_, err := readProtocolHandshake(p2)
    62  		if !reflect.DeepEqual(err, test.err) {
    63  			t.Errorf("test %d: error mismatch: got %q, want %q", i, err, test.err)
    64  		}
    65  	}
    66  }