github.com/yimialmonte/fabric@v2.1.1+incompatible/common/tools/protolator/dynamic_test.go (about)

     1  /*
     2  Copyright IBM Corp. 2017 All Rights Reserved.
     3  
     4  SPDX-License-Identifier: Apache-2.0
     5  */
     6  
     7  package protolator
     8  
     9  import (
    10  	"bytes"
    11  	"testing"
    12  
    13  	"github.com/hyperledger/fabric/common/tools/protolator/testprotos"
    14  	"github.com/hyperledger/fabric/protoutil"
    15  	"github.com/stretchr/testify/assert"
    16  )
    17  
    18  func TestPlainDynamicMsg(t *testing.T) {
    19  	fromPrefix := "from"
    20  	toPrefix := "to"
    21  	tppff := &testProtoPlainFieldFactory{
    22  		fromPrefix: fromPrefix,
    23  		toPrefix:   toPrefix,
    24  	}
    25  
    26  	fieldFactories = []protoFieldFactory{tppff, variablyOpaqueFieldFactory{}}
    27  
    28  	pfValue := "foo"
    29  	startMsg := &testprotos.DynamicMsg{
    30  		DynamicType: "SimpleMsg",
    31  		PlainDynamicField: &testprotos.ContextlessMsg{
    32  			OpaqueField: protoutil.MarshalOrPanic(&testprotos.SimpleMsg{
    33  				PlainField: pfValue,
    34  			}),
    35  		},
    36  	}
    37  
    38  	var buffer bytes.Buffer
    39  	assert.NoError(t, DeepMarshalJSON(&buffer, startMsg))
    40  	newMsg := &testprotos.DynamicMsg{}
    41  	assert.NoError(t, DeepUnmarshalJSON(bytes.NewReader(buffer.Bytes()), newMsg))
    42  	assert.NotEqual(t, fromPrefix+toPrefix+extractSimpleMsgPlainField(startMsg.PlainDynamicField.OpaqueField), extractSimpleMsgPlainField(newMsg.PlainDynamicField.OpaqueField))
    43  
    44  	fieldFactories = []protoFieldFactory{tppff, variablyOpaqueFieldFactory{}, dynamicFieldFactory{}}
    45  
    46  	buffer.Reset()
    47  	assert.NoError(t, DeepMarshalJSON(&buffer, startMsg))
    48  	assert.NoError(t, DeepUnmarshalJSON(bytes.NewReader(buffer.Bytes()), newMsg))
    49  	assert.Equal(t, fromPrefix+toPrefix+extractSimpleMsgPlainField(startMsg.PlainDynamicField.OpaqueField), extractSimpleMsgPlainField(newMsg.PlainDynamicField.OpaqueField))
    50  }
    51  
    52  func TestMapDynamicMsg(t *testing.T) {
    53  	fromPrefix := "from"
    54  	toPrefix := "to"
    55  	tppff := &testProtoPlainFieldFactory{
    56  		fromPrefix: fromPrefix,
    57  		toPrefix:   toPrefix,
    58  	}
    59  
    60  	fieldFactories = []protoFieldFactory{tppff, variablyOpaqueFieldFactory{}}
    61  
    62  	pfValue := "foo"
    63  	mapKey := "bar"
    64  	startMsg := &testprotos.DynamicMsg{
    65  		DynamicType: "SimpleMsg",
    66  		MapDynamicField: map[string]*testprotos.ContextlessMsg{
    67  			mapKey: {
    68  				OpaqueField: protoutil.MarshalOrPanic(&testprotos.SimpleMsg{
    69  					PlainField: pfValue,
    70  				}),
    71  			},
    72  		},
    73  	}
    74  
    75  	var buffer bytes.Buffer
    76  	assert.NoError(t, DeepMarshalJSON(&buffer, startMsg))
    77  	newMsg := &testprotos.DynamicMsg{}
    78  	assert.NoError(t, DeepUnmarshalJSON(bytes.NewReader(buffer.Bytes()), newMsg))
    79  	assert.NotEqual(t, fromPrefix+toPrefix+extractSimpleMsgPlainField(startMsg.MapDynamicField[mapKey].OpaqueField), extractSimpleMsgPlainField(newMsg.MapDynamicField[mapKey].OpaqueField))
    80  
    81  	fieldFactories = []protoFieldFactory{tppff, variablyOpaqueFieldFactory{}, dynamicMapFieldFactory{}}
    82  
    83  	buffer.Reset()
    84  	assert.NoError(t, DeepMarshalJSON(&buffer, startMsg))
    85  	assert.NoError(t, DeepUnmarshalJSON(bytes.NewReader(buffer.Bytes()), newMsg))
    86  	assert.Equal(t, fromPrefix+toPrefix+extractSimpleMsgPlainField(startMsg.MapDynamicField[mapKey].OpaqueField), extractSimpleMsgPlainField(newMsg.MapDynamicField[mapKey].OpaqueField))
    87  }
    88  
    89  func TestSliceDynamicMsg(t *testing.T) {
    90  	fromPrefix := "from"
    91  	toPrefix := "to"
    92  	tppff := &testProtoPlainFieldFactory{
    93  		fromPrefix: fromPrefix,
    94  		toPrefix:   toPrefix,
    95  	}
    96  
    97  	fieldFactories = []protoFieldFactory{tppff, variablyOpaqueFieldFactory{}}
    98  
    99  	pfValue := "foo"
   100  	startMsg := &testprotos.DynamicMsg{
   101  		DynamicType: "SimpleMsg",
   102  		SliceDynamicField: []*testprotos.ContextlessMsg{
   103  			{
   104  				OpaqueField: protoutil.MarshalOrPanic(&testprotos.SimpleMsg{
   105  					PlainField: pfValue,
   106  				}),
   107  			},
   108  		},
   109  	}
   110  
   111  	var buffer bytes.Buffer
   112  	assert.NoError(t, DeepMarshalJSON(&buffer, startMsg))
   113  	newMsg := &testprotos.DynamicMsg{}
   114  	assert.NoError(t, DeepUnmarshalJSON(bytes.NewReader(buffer.Bytes()), newMsg))
   115  	assert.NotEqual(t, fromPrefix+toPrefix+extractSimpleMsgPlainField(startMsg.SliceDynamicField[0].OpaqueField), extractSimpleMsgPlainField(newMsg.SliceDynamicField[0].OpaqueField))
   116  
   117  	fieldFactories = []protoFieldFactory{tppff, variablyOpaqueFieldFactory{}, dynamicSliceFieldFactory{}}
   118  
   119  	buffer.Reset()
   120  	assert.NoError(t, DeepMarshalJSON(&buffer, startMsg))
   121  	assert.NoError(t, DeepUnmarshalJSON(bytes.NewReader(buffer.Bytes()), newMsg))
   122  	assert.Equal(t, fromPrefix+toPrefix+extractSimpleMsgPlainField(startMsg.SliceDynamicField[0].OpaqueField), extractSimpleMsgPlainField(newMsg.SliceDynamicField[0].OpaqueField))
   123  }