Some checks failed
CodeQL / Analyze (push) Waiting to run
golangci-lint / lint (push) Waiting to run
Tests / Code Coverage / build (amd64) (push) Waiting to run
Tests / Code Coverage / build (arm64) (push) Waiting to run
Tests / Code Coverage / unit-tests (map[additional-args:-tags="test_e2e" name:e2e path:./e2e]) (push) Waiting to run
Tests / Code Coverage / unit-tests (map[name:08-wasm path:./modules/light-clients/08-wasm]) (push) Waiting to run
Tests / Code Coverage / unit-tests (map[name:ibc-go path:.]) (push) Waiting to run
Docker Build & Push Simapp (main) / docker-build (push) Has been cancelled
115 lines
4.2 KiB
Go
115 lines
4.2 KiB
Go
package tendermint_test
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
testifysuite "github.com/stretchr/testify/suite"
|
|
|
|
"git.cw.tr/mukan-network/mukan-sdk/codec"
|
|
sdk "git.cw.tr/mukan-network/mukan-sdk/types"
|
|
|
|
cmtbytes "git.cw.tr/mukan-network/mukan-consensus/libs/bytes"
|
|
cmttypes "git.cw.tr/mukan-network/mukan-consensus/types"
|
|
|
|
clienttypes "git.cw.tr/mukan-network/mukan-ibc/modules/core/02-client/types"
|
|
ibctm "git.cw.tr/mukan-network/mukan-ibc/modules/light-clients/07-tendermint"
|
|
ibctesting "git.cw.tr/mukan-network/mukan-ibc/testing"
|
|
"git.cw.tr/mukan-network/mukan-ibc/testing/simapp"
|
|
)
|
|
|
|
const (
|
|
chainID = "gaia"
|
|
chainIDRevision0 = "gaia-revision-0"
|
|
chainIDRevision1 = "gaia-revision-1"
|
|
clientID = "gaiamainnet"
|
|
trustingPeriod time.Duration = time.Hour * 24 * 7 * 2
|
|
ubdPeriod time.Duration = time.Hour * 24 * 7 * 3
|
|
maxClockDrift time.Duration = time.Second * 10
|
|
)
|
|
|
|
var (
|
|
height = clienttypes.NewHeight(0, 4)
|
|
newClientHeight = clienttypes.NewHeight(1, 1)
|
|
upgradePath = []string{"upgrade", "upgradedIBCState"}
|
|
invalidUpgradePath = []string{"upgrade", ""}
|
|
)
|
|
|
|
type TendermintTestSuite struct {
|
|
testifysuite.Suite
|
|
|
|
coordinator *ibctesting.Coordinator
|
|
|
|
// testing chains used for convenience and readability
|
|
chainA *ibctesting.TestChain
|
|
chainB *ibctesting.TestChain
|
|
|
|
// TODO: deprecate usage in favor of testing package
|
|
ctx sdk.Context
|
|
cdc codec.Codec
|
|
privVal cmttypes.PrivValidator
|
|
valSet *cmttypes.ValidatorSet
|
|
signers map[string]cmttypes.PrivValidator
|
|
valsHash cmtbytes.HexBytes
|
|
header *ibctm.Header
|
|
now time.Time
|
|
headerTime time.Time
|
|
clientTime time.Time
|
|
}
|
|
|
|
func (suite *TendermintTestSuite) SetupTest() {
|
|
suite.coordinator = ibctesting.NewCoordinator(suite.T(), 2)
|
|
suite.chainA = suite.coordinator.GetChain(ibctesting.GetChainID(1))
|
|
suite.chainB = suite.coordinator.GetChain(ibctesting.GetChainID(2))
|
|
// commit some blocks so that QueryProof returns valid proof (cannot return valid query if height <= 1)
|
|
suite.coordinator.CommitNBlocks(suite.chainA, 2)
|
|
suite.coordinator.CommitNBlocks(suite.chainB, 2)
|
|
|
|
// TODO: deprecate usage in favor of testing package
|
|
checkTx := false
|
|
app := simapp.Setup(suite.T(), checkTx)
|
|
|
|
suite.cdc = app.AppCodec()
|
|
|
|
// now is the time of the current chain, must be after the updating header
|
|
// mocks ctx.BlockTime()
|
|
suite.now = time.Date(2020, 1, 2, 0, 0, 0, 0, time.UTC)
|
|
suite.clientTime = time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC)
|
|
// Header time is intended to be time for any new header used for updates
|
|
suite.headerTime = time.Date(2020, 1, 2, 0, 0, 0, 0, time.UTC)
|
|
|
|
suite.privVal = cmttypes.NewMockPV()
|
|
|
|
pubKey, err := suite.privVal.GetPubKey()
|
|
suite.Require().NoError(err)
|
|
|
|
heightMinus1 := clienttypes.NewHeight(0, height.RevisionHeight-1)
|
|
|
|
val := cmttypes.NewValidator(pubKey, 10)
|
|
suite.signers = make(map[string]cmttypes.PrivValidator)
|
|
suite.signers[val.Address.String()] = suite.privVal
|
|
suite.valSet = cmttypes.NewValidatorSet([]*cmttypes.Validator{val})
|
|
suite.valsHash = suite.valSet.Hash()
|
|
suite.header = suite.chainA.CreateTMClientHeader(chainID, int64(height.RevisionHeight), heightMinus1, suite.now, suite.valSet, suite.valSet, suite.valSet, suite.signers)
|
|
suite.ctx = app.NewContext(checkTx)
|
|
}
|
|
|
|
func getAltSigners(altVal *cmttypes.Validator, altPrivVal cmttypes.PrivValidator) map[string]cmttypes.PrivValidator {
|
|
return map[string]cmttypes.PrivValidator{altVal.Address.String(): altPrivVal}
|
|
}
|
|
|
|
func getBothSigners(suite *TendermintTestSuite, altVal *cmttypes.Validator, altPrivVal cmttypes.PrivValidator) (*cmttypes.ValidatorSet, map[string]cmttypes.PrivValidator) {
|
|
// Create bothValSet with both suite validator and altVal. Would be valid update
|
|
bothValSet := cmttypes.NewValidatorSet(append(suite.valSet.Validators, altVal))
|
|
// Create signer array and ensure it is in same order as bothValSet
|
|
_, suiteVal := suite.valSet.GetByIndex(0)
|
|
bothSigners := map[string]cmttypes.PrivValidator{
|
|
suiteVal.Address.String(): suite.privVal,
|
|
altVal.Address.String(): altPrivVal,
|
|
}
|
|
return bothValSet, bothSigners
|
|
}
|
|
|
|
func TestTendermintTestSuite(t *testing.T) {
|
|
testifysuite.Run(t, new(TendermintTestSuite))
|
|
}
|