131 lines
3.3 KiB
Go
131 lines
3.3 KiB
Go
/*
|
|
Copyright IBM Corp. 2017 All Rights Reserved.
|
|
|
|
SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
package server
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/golang/protobuf/proto"
|
|
"github.com/hyperledger/fabric-protos-go/common"
|
|
"github.com/hyperledger/fabric/bccsp/sw"
|
|
"github.com/hyperledger/fabric/common/metrics/disabled"
|
|
"github.com/hyperledger/fabric/core/config/configtest"
|
|
config "github.com/hyperledger/fabric/orderer/common/localconfig"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestCreateLedgerFactory(t *testing.T) {
|
|
configtest.SetDevFabricConfigPath(t)
|
|
|
|
testCases := []struct {
|
|
name string
|
|
ledgerDir string
|
|
expectPanic bool
|
|
}{
|
|
{
|
|
name: "PathSet",
|
|
ledgerDir: filepath.Join(os.TempDir(), "test-dir"),
|
|
expectPanic: false,
|
|
},
|
|
{
|
|
name: "PathUnset",
|
|
ledgerDir: "",
|
|
expectPanic: true,
|
|
},
|
|
}
|
|
|
|
conf, err := config.Load()
|
|
if err != nil {
|
|
t.Fatal("failed to load config")
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
conf.FileLedger.Location = tc.ledgerDir
|
|
if tc.expectPanic {
|
|
require.PanicsWithValue(t, "Orderer.FileLedger.Location must be set", func() { createLedgerFactory(conf, &disabled.Provider{}) })
|
|
} else {
|
|
lf, err := createLedgerFactory(conf, &disabled.Provider{})
|
|
require.NoError(t, err)
|
|
defer os.RemoveAll(tc.ledgerDir)
|
|
require.Equal(t, []string{}, lf.ChannelIDs())
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestValidateBootstrapBlock(t *testing.T) {
|
|
tempDir := t.TempDir()
|
|
copyYamlFiles("testdata", tempDir)
|
|
cryptoPath := generateCryptoMaterials(t, cryptogen, tempDir)
|
|
defer os.RemoveAll(cryptoPath)
|
|
|
|
systemChannelBlockPath, _ := produceGenesisFileEtcdRaft(t, "system", tempDir)
|
|
systemChannelBlockBytes, err := ioutil.ReadFile(systemChannelBlockPath)
|
|
require.NoError(t, err)
|
|
|
|
applicationChannelBlockPath, _ := produceGenesisFileEtcdRaftAppChannel(t, "mychannel", tempDir)
|
|
applicationChannelBlockBytes, err := ioutil.ReadFile(applicationChannelBlockPath)
|
|
require.NoError(t, err)
|
|
|
|
appBlock := &common.Block{}
|
|
require.NoError(t, proto.Unmarshal(applicationChannelBlockBytes, appBlock))
|
|
|
|
systemBlock := &common.Block{}
|
|
require.NoError(t, proto.Unmarshal(systemChannelBlockBytes, systemBlock))
|
|
|
|
cryptoProvider, err := sw.NewDefaultSecurityLevelWithKeystore(sw.NewDummyKeyStore())
|
|
require.NoError(t, err)
|
|
|
|
for _, testCase := range []struct {
|
|
description string
|
|
block *common.Block
|
|
expectedError string
|
|
}{
|
|
{
|
|
description: "nil block",
|
|
expectedError: "nil block",
|
|
},
|
|
{
|
|
description: "empty block",
|
|
block: &common.Block{},
|
|
expectedError: "empty block data",
|
|
},
|
|
{
|
|
description: "bad envelope",
|
|
block: &common.Block{
|
|
Data: &common.BlockData{
|
|
Data: [][]byte{{1, 2, 3}},
|
|
},
|
|
},
|
|
expectedError: "failed extracting envelope from block",
|
|
},
|
|
{
|
|
description: "application channel block",
|
|
block: appBlock,
|
|
expectedError: "the block isn't a system channel block because it lacks ConsortiumsConfig",
|
|
},
|
|
{
|
|
description: "system channel block",
|
|
block: systemBlock,
|
|
},
|
|
} {
|
|
t.Run(testCase.description, func(t *testing.T) {
|
|
err := validateBootstrapBlock(testCase.block, cryptoProvider)
|
|
if testCase.expectedError == "" {
|
|
require.NoError(t, err)
|
|
return
|
|
}
|
|
require.Error(t, err)
|
|
require.Contains(t, err.Error(), testCase.expectedError)
|
|
})
|
|
}
|
|
}
|