github.com/pvitto98/fabric@v2.1.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  }