go_study/fabric-main/core/chaincode/config_test.go

134 lines
3.9 KiB
Go

/*
Copyright IBM Corp. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/
package chaincode_test
import (
"time"
"github.com/hyperledger/fabric/core/chaincode"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
"github.com/spf13/viper"
)
var _ = Describe("Config", func() {
var restore func()
BeforeEach(func() {
restore = capture()
})
AfterEach(func() {
restore()
})
Describe("GlobalConfig", func() {
It("captures the configuration from viper", func() {
viper.Set("peer.tls.enabled", "true")
viper.Set("chaincode.keepalive", "50")
viper.Set("chaincode.executetimeout", "20h")
viper.Set("chaincode.installTimeout", "30m")
viper.Set("chaincode.startuptimeout", "30h")
viper.Set("chaincode.logging.format", "test-chaincode-logging-format")
viper.Set("chaincode.logging.level", "warning")
viper.Set("chaincode.logging.shim", "warning")
viper.Set("chaincode.system.somecc", true)
config := chaincode.GlobalConfig()
Expect(config.TLSEnabled).To(BeTrue())
Expect(config.Keepalive).To(Equal(50 * time.Second))
Expect(config.ExecuteTimeout).To(Equal(20 * time.Hour))
Expect(config.InstallTimeout).To(Equal(30 * time.Minute))
Expect(config.StartupTimeout).To(Equal(30 * time.Hour))
Expect(config.LogFormat).To(Equal("test-chaincode-logging-format"))
Expect(config.LogLevel).To(Equal("warn"))
Expect(config.ShimLogLevel).To(Equal("warn"))
Expect(config.SCCAllowlist).To(Equal(map[string]bool{"somecc": true}))
})
Context("when an invalid keepalive is configured", func() {
BeforeEach(func() {
viper.Set("chaincode.keepalive", "abc")
})
It("falls back to no keepalive", func() {
config := chaincode.GlobalConfig()
Expect(config.Keepalive).To(Equal(time.Duration(0)))
})
})
Context("when the execute timeout is less than the minimum", func() {
BeforeEach(func() {
viper.Set("chaincode.executetimeout", "15")
})
It("falls back to the minimum start timeout", func() {
config := chaincode.GlobalConfig()
Expect(config.ExecuteTimeout).To(Equal(30 * time.Second))
})
})
Context("when the startup timeout is less than the minimum", func() {
BeforeEach(func() {
viper.Set("chaincode.startuptimeout", "15")
})
It("falls back to the minimum start timeout", func() {
config := chaincode.GlobalConfig()
Expect(config.StartupTimeout).To(Equal(5 * time.Second))
})
})
Context("when an invalid log level is configured", func() {
BeforeEach(func() {
viper.Set("chaincode.logging.level", "foo")
viper.Set("chaincode.logging.shim", "bar")
})
It("falls back to info", func() {
config := chaincode.GlobalConfig()
Expect(config.LogLevel).To(Equal("info"))
Expect(config.ShimLogLevel).To(Equal("info"))
})
})
})
Describe("IsDevMode", func() {
It("returns true when iff the mode equals 'dev'", func() {
viper.Set("chaincode.mode", chaincode.DevModeUserRunsChaincode)
Expect(chaincode.IsDevMode()).To(BeTrue())
viper.Set("chaincode.mode", "dev")
Expect(chaincode.IsDevMode()).To(BeTrue())
viper.Set("chaincode.mode", "empty")
Expect(chaincode.IsDevMode()).To(BeFalse())
viper.Set("chaincode.mode", "nonsense")
Expect(chaincode.IsDevMode()).To(BeFalse())
})
})
})
func capture() (restore func()) {
viper.SetEnvPrefix("CORE")
viper.AutomaticEnv()
config := map[string]string{
"peer.tls.enabled": viper.GetString("peer.tls.enabled"),
"chaincode.keepalive": viper.GetString("chaincode.keepalive"),
"chaincode.executetimeout": viper.GetString("chaincode.executetimeout"),
"chaincode.startuptimeout": viper.GetString("chaincode.startuptimeout"),
"chaincode.logging.format": viper.GetString("chaincode.logging.format"),
"chaincode.logging.level": viper.GetString("chaincode.logging.level"),
"chaincode.logging.shim": viper.GetString("chaincode.logging.shim"),
}
return func() {
for k, val := range config {
viper.Set(k, val)
}
}
}