msgverack_test.go raw

   1  package wire
   2  
   3  import (
   4  	"bytes"
   5  	"reflect"
   6  	"testing"
   7  	
   8  	"github.com/davecgh/go-spew/spew"
   9  )
  10  
  11  // TestVerAck tests the MsgVerAck API.
  12  func TestVerAck(t *testing.T) {
  13  	pver := ProtocolVersion
  14  	// Ensure the command is expected value.
  15  	wantCmd := "verack"
  16  	msg := NewMsgVerAck()
  17  	if cmd := msg.Command(); cmd != wantCmd {
  18  		t.Errorf("NewMsgVerAck: wrong command - got %v want %v",
  19  			cmd, wantCmd,
  20  		)
  21  	}
  22  	// Ensure max payload is expected value.
  23  	wantPayload := uint32(0)
  24  	maxPayload := msg.MaxPayloadLength(pver)
  25  	if maxPayload != wantPayload {
  26  		t.Errorf("MaxPayloadLength: wrong max payload length for "+
  27  			"protocol version %d - got %v, want %v", pver,
  28  			maxPayload, wantPayload,
  29  		)
  30  	}
  31  }
  32  
  33  // TestVerAckWire tests the MsgVerAck wire encode and decode for various protocol versions.
  34  func TestVerAckWire(t *testing.T) {
  35  	msgVerAck := NewMsgVerAck()
  36  	msgVerAckEncoded := []byte{}
  37  	tests := []struct {
  38  		in   *MsgVerAck      // Message to encode
  39  		out  *MsgVerAck      // Expected decoded message
  40  		buf  []byte          // Wire encoding
  41  		pver uint32          // Protocol version for wire encoding
  42  		enc  MessageEncoding // Message encoding format
  43  	}{
  44  		// Latest protocol version.
  45  		{
  46  			msgVerAck,
  47  			msgVerAck,
  48  			msgVerAckEncoded,
  49  			ProtocolVersion,
  50  			BaseEncoding,
  51  		},
  52  		// Protocol version BIP0035Version.
  53  		{
  54  			msgVerAck,
  55  			msgVerAck,
  56  			msgVerAckEncoded,
  57  			BIP0035Version,
  58  			BaseEncoding,
  59  		},
  60  		// Protocol version BIP0031Version.
  61  		{
  62  			msgVerAck,
  63  			msgVerAck,
  64  			msgVerAckEncoded,
  65  			BIP0031Version,
  66  			BaseEncoding,
  67  		},
  68  		// Protocol version NetAddressTimeVersion.
  69  		{
  70  			msgVerAck,
  71  			msgVerAck,
  72  			msgVerAckEncoded,
  73  			NetAddressTimeVersion,
  74  			BaseEncoding,
  75  		},
  76  		// Protocol version MultipleAddressVersion.
  77  		{
  78  			msgVerAck,
  79  			msgVerAck,
  80  			msgVerAckEncoded,
  81  			MultipleAddressVersion,
  82  			BaseEncoding,
  83  		},
  84  	}
  85  	t.Logf("Running %d tests", len(tests))
  86  	for i, test := range tests {
  87  		// Encode the message to wire format.
  88  		var buf bytes.Buffer
  89  		e := test.in.BtcEncode(&buf, test.pver, test.enc)
  90  		if e != nil {
  91  			t.Errorf("BtcEncode #%d error %v", i, e)
  92  			continue
  93  		}
  94  		if !bytes.Equal(buf.Bytes(), test.buf) {
  95  			t.Errorf("BtcEncode #%d\n got: %s want: %s", i,
  96  				spew.Sdump(buf.Bytes()), spew.Sdump(test.buf),
  97  			)
  98  			continue
  99  		}
 100  		// Decode the message from wire format.
 101  		var msg MsgVerAck
 102  		rbuf := bytes.NewReader(test.buf)
 103  		e = msg.BtcDecode(rbuf, test.pver, test.enc)
 104  		if e != nil {
 105  			t.Errorf("BtcDecode #%d error %v", i, e)
 106  			continue
 107  		}
 108  		if !reflect.DeepEqual(&msg, test.out) {
 109  			t.Errorf("BtcDecode #%d\n got: %s want: %s", i,
 110  				spew.Sdump(msg), spew.Sdump(test.out),
 111  			)
 112  			continue
 113  		}
 114  	}
 115  }
 116