github.com/kaituanwang/hyperledger@v2.0.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 }