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  }