github.com/kaituanwang/hyperledger@v2.0.1+incompatible/common/tools/protolator/protoext/commonext/common_test.go (about) 1 /* 2 Copyright IBM Corp. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package commonext 8 9 import ( 10 "testing" 11 12 "github.com/golang/protobuf/proto" 13 "github.com/hyperledger/fabric-protos-go/common" 14 "github.com/stretchr/testify/assert" 15 ) 16 17 func TestCommonProtolator(t *testing.T) { 18 // Envelope 19 env := &Envelope{Envelope: &common.Envelope{}} 20 assert.Equal(t, []string{"payload"}, env.StaticallyOpaqueFields()) 21 msg, err := env.StaticallyOpaqueFieldProto("badproto") 22 assert.Nil(t, msg) 23 assert.Error(t, err) 24 msg, err = env.StaticallyOpaqueFieldProto("payload") 25 assert.NoError(t, err) 26 assert.Equal(t, &common.Payload{}, msg) 27 28 // Payload 29 payload := &Payload{Payload: &common.Payload{}} 30 assert.Equal(t, []string{"data"}, payload.VariablyOpaqueFields()) 31 msg, err = payload.VariablyOpaqueFieldProto("badproto") 32 assert.Nil(t, msg) 33 assert.Error(t, err) 34 msg, err = payload.VariablyOpaqueFieldProto("data") 35 assert.Nil(t, msg) 36 assert.Error(t, err) 37 38 payload = &Payload{ 39 Payload: &common.Payload{ 40 Header: &common.Header{ 41 ChannelHeader: []byte("badbytes"), 42 }, 43 }, 44 } 45 msg, err = payload.VariablyOpaqueFieldProto("data") 46 assert.Nil(t, msg) 47 assert.Error(t, err) 48 49 ch := &common.ChannelHeader{ 50 Type: int32(common.HeaderType_CONFIG), 51 } 52 chbytes, _ := proto.Marshal(ch) 53 payload = &Payload{ 54 Payload: &common.Payload{ 55 Header: &common.Header{ 56 ChannelHeader: chbytes, 57 }, 58 }, 59 } 60 msg, err = payload.VariablyOpaqueFieldProto("data") 61 assert.Equal(t, &common.ConfigEnvelope{}, msg) 62 assert.NoError(t, err) 63 64 ch = &common.ChannelHeader{ 65 Type: int32(common.HeaderType_CONFIG_UPDATE), 66 } 67 chbytes, _ = proto.Marshal(ch) 68 payload = &Payload{ 69 Payload: &common.Payload{ 70 Header: &common.Header{ 71 ChannelHeader: chbytes, 72 }, 73 }, 74 } 75 msg, err = payload.VariablyOpaqueFieldProto("data") 76 assert.Equal(t, &common.ConfigUpdateEnvelope{}, msg) 77 assert.NoError(t, err) 78 79 ch = &common.ChannelHeader{ 80 Type: int32(common.HeaderType_CHAINCODE_PACKAGE), 81 } 82 chbytes, _ = proto.Marshal(ch) 83 payload = &Payload{ 84 Payload: &common.Payload{ 85 Header: &common.Header{ 86 ChannelHeader: chbytes, 87 }, 88 }, 89 } 90 msg, err = payload.VariablyOpaqueFieldProto("data") 91 assert.Nil(t, msg) 92 assert.Error(t, err) 93 94 // Header 95 var header *Header 96 assert.Equal(t, []string{"channel_header", "signature_header"}, 97 header.StaticallyOpaqueFields()) 98 99 msg, err = header.StaticallyOpaqueFieldProto("badproto") 100 assert.Nil(t, msg) 101 assert.Error(t, err) 102 103 msg, err = header.StaticallyOpaqueFieldProto("channel_header") 104 assert.Equal(t, &common.ChannelHeader{}, msg) 105 assert.NoError(t, err) 106 107 msg, err = header.StaticallyOpaqueFieldProto("signature_header") 108 assert.Equal(t, &common.SignatureHeader{}, msg) 109 assert.NoError(t, err) 110 111 // BlockData 112 var bd *BlockData 113 assert.Equal(t, []string{"data"}, bd.StaticallyOpaqueSliceFields()) 114 115 msg, err = bd.StaticallyOpaqueSliceFieldProto("badslice", 0) 116 assert.Nil(t, msg) 117 assert.Error(t, err) 118 msg, err = bd.StaticallyOpaqueSliceFieldProto("data", 0) 119 assert.Equal(t, &common.Envelope{}, msg) 120 assert.NoError(t, err) 121 }