102 lines
2.8 KiB
Go
102 lines
2.8 KiB
Go
/*
|
|
Copyright IBM Corp. All Rights Reserved.
|
|
|
|
SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
package channelconfig
|
|
|
|
import (
|
|
"testing"
|
|
|
|
cb "github.com/hyperledger/fabric-protos-go/common"
|
|
"github.com/hyperledger/fabric/protoutil"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
type foo struct {
|
|
Msg1 *cb.Envelope
|
|
Msg2 *cb.Payload
|
|
}
|
|
|
|
type bar struct {
|
|
Msg3 *cb.Header
|
|
}
|
|
|
|
type conflict struct {
|
|
Msg1 *cb.Header
|
|
}
|
|
|
|
type nonProtos struct {
|
|
Msg *cb.Envelope
|
|
Wrong string
|
|
}
|
|
|
|
type unexported struct {
|
|
msg *cb.Envelope
|
|
}
|
|
|
|
func TestSingle(t *testing.T) {
|
|
fooVal := &foo{}
|
|
sv, err := NewStandardValues(fooVal)
|
|
require.NoError(t, err, "Valid non-nested structure provided")
|
|
require.NotNil(t, fooVal.Msg1, "Should have initialized Msg1")
|
|
require.NotNil(t, fooVal.Msg2, "Should have initialized Msg2")
|
|
|
|
msg1, err := sv.Deserialize("Msg1", protoutil.MarshalOrPanic(&cb.Envelope{}))
|
|
require.NoError(t, err, "Should have found map entry")
|
|
require.Equal(t, msg1, fooVal.Msg1, "Should be same entry")
|
|
|
|
msg2, err := sv.Deserialize("Msg2", protoutil.MarshalOrPanic(&cb.Payload{}))
|
|
require.NoError(t, err, "Should have found map entry")
|
|
require.Equal(t, msg2, fooVal.Msg2, "Should be same entry")
|
|
}
|
|
|
|
func TestPair(t *testing.T) {
|
|
fooVal := &foo{}
|
|
barVal := &bar{}
|
|
sv, err := NewStandardValues(fooVal, barVal)
|
|
require.NoError(t, err, "Valid non-nested structure provided")
|
|
require.NotNil(t, fooVal.Msg1, "Should have initialized Msg1")
|
|
require.NotNil(t, fooVal.Msg2, "Should have initialized Msg2")
|
|
require.NotNil(t, barVal.Msg3, "Should have initialized Msg3")
|
|
|
|
msg1, err := sv.Deserialize("Msg1", protoutil.MarshalOrPanic(&cb.Envelope{}))
|
|
require.NoError(t, err, "Should have found map entry")
|
|
require.Equal(t, msg1, fooVal.Msg1, "Should be same entry")
|
|
|
|
msg2, err := sv.Deserialize("Msg2", protoutil.MarshalOrPanic(&cb.Payload{}))
|
|
require.NoError(t, err, "Should have found map entry")
|
|
require.Equal(t, msg2, fooVal.Msg2, "Should be same entry")
|
|
|
|
msg3, err := sv.Deserialize("Msg3", protoutil.MarshalOrPanic(&cb.Header{}))
|
|
require.NoError(t, err, "Should have found map entry")
|
|
require.Equal(t, msg3, barVal.Msg3, "Should be same entry")
|
|
}
|
|
|
|
func TestPairConflict(t *testing.T) {
|
|
_, err := NewStandardValues(&foo{}, &conflict{})
|
|
require.Error(t, err, "Conflicting keys provided")
|
|
}
|
|
|
|
func TestNonProtosStruct(t *testing.T) {
|
|
_, err := NewStandardValues(&nonProtos{})
|
|
require.Error(t, err, "Structure with non-struct non-proto fields provided")
|
|
}
|
|
|
|
func TestUnexportedField(t *testing.T) {
|
|
_, err := NewStandardValues(&unexported{msg: nil})
|
|
require.Error(t, err, "Structure with unexported fields")
|
|
}
|
|
|
|
func TestNonPointerParam(t *testing.T) {
|
|
_, err := NewStandardValues(foo{})
|
|
require.Error(t, err, "Parameter must be pointer")
|
|
}
|
|
|
|
func TestPointerToNonStruct(t *testing.T) {
|
|
nonStruct := "foo"
|
|
_, err := NewStandardValues(&nonStruct)
|
|
require.Error(t, err, "Pointer must be to a struct")
|
|
}
|