github.com/yacovm/fabric@v2.0.0-alpha.0.20191128145320-c5d4087dc723+incompatible/common/channelconfig/standardvalues_test.go (about) 1 /* 2 Copyright IBM Corp. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package channelconfig 8 9 import ( 10 "testing" 11 12 cb "github.com/hyperledger/fabric-protos-go/common" 13 "github.com/hyperledger/fabric/protoutil" 14 "github.com/stretchr/testify/assert" 15 ) 16 17 type foo struct { 18 Msg1 *cb.Envelope 19 Msg2 *cb.Payload 20 } 21 22 type bar struct { 23 Msg3 *cb.Header 24 } 25 26 type conflict struct { 27 Msg1 *cb.Header 28 } 29 30 type nonProtos struct { 31 Msg *cb.Envelope 32 Wrong string 33 } 34 35 type unexported struct { 36 msg *cb.Envelope 37 } 38 39 func TestSingle(t *testing.T) { 40 fooVal := &foo{} 41 sv, err := NewStandardValues(fooVal) 42 assert.NoError(t, err, "Valid non-nested structure provided") 43 assert.NotNil(t, fooVal.Msg1, "Should have initialized Msg1") 44 assert.NotNil(t, fooVal.Msg2, "Should have initialized Msg2") 45 46 msg1, err := sv.Deserialize("Msg1", protoutil.MarshalOrPanic(&cb.Envelope{})) 47 assert.NoError(t, err, "Should have found map entry") 48 assert.Equal(t, msg1, fooVal.Msg1, "Should be same entry") 49 50 msg2, err := sv.Deserialize("Msg2", protoutil.MarshalOrPanic(&cb.Payload{})) 51 assert.NoError(t, err, "Should have found map entry") 52 assert.Equal(t, msg2, fooVal.Msg2, "Should be same entry") 53 } 54 55 func TestPair(t *testing.T) { 56 fooVal := &foo{} 57 barVal := &bar{} 58 sv, err := NewStandardValues(fooVal, barVal) 59 assert.NoError(t, err, "Valid non-nested structure provided") 60 assert.NotNil(t, fooVal.Msg1, "Should have initialized Msg1") 61 assert.NotNil(t, fooVal.Msg2, "Should have initialized Msg2") 62 assert.NotNil(t, barVal.Msg3, "Should have initialized Msg3") 63 64 msg1, err := sv.Deserialize("Msg1", protoutil.MarshalOrPanic(&cb.Envelope{})) 65 assert.NoError(t, err, "Should have found map entry") 66 assert.Equal(t, msg1, fooVal.Msg1, "Should be same entry") 67 68 msg2, err := sv.Deserialize("Msg2", protoutil.MarshalOrPanic(&cb.Payload{})) 69 assert.NoError(t, err, "Should have found map entry") 70 assert.Equal(t, msg2, fooVal.Msg2, "Should be same entry") 71 72 msg3, err := sv.Deserialize("Msg3", protoutil.MarshalOrPanic(&cb.Header{})) 73 assert.NoError(t, err, "Should have found map entry") 74 assert.Equal(t, msg3, barVal.Msg3, "Should be same entry") 75 } 76 77 func TestPairConflict(t *testing.T) { 78 _, err := NewStandardValues(&foo{}, &conflict{}) 79 assert.Error(t, err, "Conflicting keys provided") 80 } 81 82 func TestNonProtosStruct(t *testing.T) { 83 _, err := NewStandardValues(&nonProtos{}) 84 assert.Error(t, err, "Structure with non-struct non-proto fields provided") 85 } 86 87 func TestUnexportedField(t *testing.T) { 88 _, err := NewStandardValues(&unexported{msg: nil}) 89 assert.Error(t, err, "Structure with unexported fields") 90 } 91 92 func TestNonPointerParam(t *testing.T) { 93 _, err := NewStandardValues(foo{}) 94 assert.Error(t, err, "Parameter must be pointer") 95 } 96 97 func TestPointerToNonStruct(t *testing.T) { 98 nonStruct := "foo" 99 _, err := NewStandardValues(&nonStruct) 100 assert.Error(t, err, "Pointer must be to a struct") 101 }