github.com/hellobchain/third_party@v0.0.0-20230331131523-deb0478a2e52/hyperledger/fabric-config/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 15 . "github.com/onsi/gomega" 16 ) 17 18 func TestCommonProtolator(t *testing.T) { 19 gt := NewGomegaWithT(t) 20 21 // Envelope 22 env := &Envelope{Envelope: &common.Envelope{}} 23 gt.Expect(env.StaticallyOpaqueFields()).To(Equal([]string{"payload"})) 24 msg, err := env.StaticallyOpaqueFieldProto("badproto") 25 gt.Expect(msg).To(BeNil()) 26 gt.Expect(err).To(MatchError("not a marshaled field: badproto")) 27 msg, err = env.StaticallyOpaqueFieldProto("payload") 28 gt.Expect(err).NotTo(HaveOccurred()) 29 gt.Expect(msg).To(Equal(&common.Payload{})) 30 31 // Payload 32 payload := &Payload{Payload: &common.Payload{}} 33 gt.Expect(payload.VariablyOpaqueFields()).To(Equal([]string{"data"})) 34 msg, err = payload.VariablyOpaqueFieldProto("badproto") 35 gt.Expect(msg).To(BeNil()) 36 gt.Expect(err).To(MatchError("not a marshaled field: badproto")) 37 msg, err = payload.VariablyOpaqueFieldProto("data") 38 gt.Expect(msg).To(BeNil()) 39 gt.Expect(err).To(MatchError("cannot determine payload type when header is missing")) 40 41 payload = &Payload{ 42 Payload: &common.Payload{ 43 Header: &common.Header{ 44 ChannelHeader: []byte("badbytes"), 45 }, 46 }, 47 } 48 msg, err = payload.VariablyOpaqueFieldProto("data") 49 gt.Expect(msg).To(BeNil()) 50 gt.Expect(err).To(MatchError("corrupt channel header: unexpected EOF")) 51 52 ch := &common.ChannelHeader{ 53 Type: int32(common.HeaderType_CONFIG), 54 } 55 chbytes, _ := proto.Marshal(ch) 56 payload = &Payload{ 57 Payload: &common.Payload{ 58 Header: &common.Header{ 59 ChannelHeader: chbytes, 60 }, 61 }, 62 } 63 msg, err = payload.VariablyOpaqueFieldProto("data") 64 gt.Expect(msg).To(Equal(&common.ConfigEnvelope{})) 65 gt.Expect(err).NotTo(HaveOccurred()) 66 67 ch = &common.ChannelHeader{ 68 Type: int32(common.HeaderType_CONFIG_UPDATE), 69 } 70 chbytes, _ = proto.Marshal(ch) 71 payload = &Payload{ 72 Payload: &common.Payload{ 73 Header: &common.Header{ 74 ChannelHeader: chbytes, 75 }, 76 }, 77 } 78 msg, err = payload.VariablyOpaqueFieldProto("data") 79 gt.Expect(msg).To(Equal(&common.ConfigUpdateEnvelope{})) 80 gt.Expect(err).NotTo(HaveOccurred()) 81 82 ch = &common.ChannelHeader{ 83 Type: int32(common.HeaderType_CHAINCODE_PACKAGE), 84 } 85 chbytes, _ = proto.Marshal(ch) 86 payload = &Payload{ 87 Payload: &common.Payload{ 88 Header: &common.Header{ 89 ChannelHeader: chbytes, 90 }, 91 }, 92 } 93 msg, err = payload.VariablyOpaqueFieldProto("data") 94 gt.Expect(msg).To(BeNil()) 95 gt.Expect(err).To(MatchError("decoding type 6 is unimplemented")) 96 97 // Header 98 var header *Header 99 gt.Expect(header.StaticallyOpaqueFields()).To(Equal( 100 []string{"channel_header", "signature_header"})) 101 102 msg, err = header.StaticallyOpaqueFieldProto("badproto") 103 gt.Expect(msg).To(BeNil()) 104 gt.Expect(err).To(MatchError("unknown header field: badproto")) 105 106 msg, err = header.StaticallyOpaqueFieldProto("channel_header") 107 gt.Expect(msg).To(Equal(&common.ChannelHeader{})) 108 gt.Expect(err).NotTo(HaveOccurred()) 109 110 msg, err = header.StaticallyOpaqueFieldProto("signature_header") 111 gt.Expect(msg).To(Equal(&common.SignatureHeader{})) 112 gt.Expect(err).NotTo(HaveOccurred()) 113 114 // BlockData 115 var bd *BlockData 116 gt.Expect(bd.StaticallyOpaqueSliceFields()).To(Equal([]string{"data"})) 117 118 msg, err = bd.StaticallyOpaqueSliceFieldProto("badslice", 0) 119 gt.Expect(msg).To(BeNil()) 120 gt.Expect(err).To(MatchError("not an opaque slice field: badslice")) 121 msg, err = bd.StaticallyOpaqueSliceFieldProto("data", 0) 122 gt.Expect(msg).To(Equal(&common.Envelope{})) 123 gt.Expect(err).NotTo(HaveOccurred()) 124 }