Skip to content

Commit

Permalink
x/chainlet: extend version loading tests
Browse files Browse the repository at this point in the history
  • Loading branch information
rkollar committed Nov 20, 2024
1 parent 9901806 commit 691043b
Show file tree
Hide file tree
Showing 3 changed files with 149 additions and 54 deletions.
99 changes: 45 additions & 54 deletions x/chainlet/keeper/msg_server_disable_stack_version_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,63 +112,54 @@ func (s *TestSuite) TestDisabledVersionAutoUpgrade() {
}

for i, tt := range tests {
tt := tt
fn := func(loaded bool) func() {
return func() {
s.SetupTest()

if loaded {
panic("not implemented")
}

var err error
// Add all stack versions
for j, ver := range tt.addedVersions {
if j == 0 {
_, err = s.msgServer.CreateChainletStack(s.ctx, types.NewMsgCreateChainletStack(
creator.String(), "test", "test", "test/test:"+ver, ver, "abcd"+ver, fees,
))
s.Require().NoError(err)
} else {
_, err = s.msgServer.UpdateChainletStack(s.ctx, types.NewMsgUpdateChainletStack(
creator.String(), "test", "test/test:"+ver, ver, "abcd"+ver,
))
s.Require().NoError(err)
}
}
// Launch a testing chainlet
s.escrowKeeper.EXPECT().
NewChainletAccount(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).
Return(nil)
s.billingKeeper.EXPECT().
BillAccount(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).
Return(nil)
chainId := "test_12345-42"
_, err = s.msgServer.LaunchChainlet(s.ctx, types.NewMsgLaunchChainlet(
creator.String(), nil, "test", tt.current, "test_chainlet", chainId, "asaga", types.ChainletParams{},
))
s.Require().NoError(err)

// Disable specified stack versions
for _, ver := range tt.disabledVersions {
_, err = s.msgServer.DisableChainletStackVersion(s.ctx, types.NewMsgDisableChainletStackVersion(creator.String(), "test", ver))
s.Run(fmt.Sprintf("%d: %s -> %s", i, tt.current, tt.expectedLatest), func() {
s.SetupTest()

var err error
// Add all stack versions
for j, ver := range tt.addedVersions {
if j == 0 {
_, err = s.msgServer.CreateChainletStack(s.ctx, types.NewMsgCreateChainletStack(
creator.String(), "test", "test", "test/test:"+ver, ver, "abcd"+ver, fees,
))
s.Require().NoError(err)
} else {
_, err = s.msgServer.UpdateChainletStack(s.ctx, types.NewMsgUpdateChainletStack(
creator.String(), "test", "test/test:"+ver, ver, "abcd"+ver,
))
s.Require().NoError(err)
}

// Check it directly
lv, err := s.chainletKeeper.LatestVersion(s.ctx, "test", tt.current)
s.Require().NoError(err)
s.Require().Equal(tt.expectedLatest, lv)

// Check it with a chainlet auto-upgrade
err = s.chainletKeeper.AutoUpgradeChainlets(s.ctx)
s.Require().NoError(err)
chainlet, err := s.chainletKeeper.Chainlet(s.ctx, chainId)
}
// Launch a testing chainlet
s.escrowKeeper.EXPECT().
NewChainletAccount(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).
Return(nil)
s.billingKeeper.EXPECT().
BillAccount(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).
Return(nil)
chainId := "test_12345-42"
_, err = s.msgServer.LaunchChainlet(s.ctx, types.NewMsgLaunchChainlet(
creator.String(), nil, "test", tt.current, "test_chainlet", chainId, "asaga", types.ChainletParams{},
))
s.Require().NoError(err)

// Disable specified stack versions
for _, ver := range tt.disabledVersions {
_, err = s.msgServer.DisableChainletStackVersion(s.ctx, types.NewMsgDisableChainletStackVersion(creator.String(), "test", ver))
s.Require().NoError(err)
s.Require().Equal(tt.expectedLatest, chainlet.ChainletStackVersion)
}
}
s.Run(fmt.Sprintf("%d: %s -> %s", i, tt.current, tt.expectedLatest), fn(false))
//s.Run(fmt.Sprintf("%d: %s -> %s", i, tt.current, tt.expectedLatest), fn(true)) //TODO implement version of the test where the versions are loaded from an already existing state

// Check it directly
lv, err := s.chainletKeeper.LatestVersion(s.ctx, "test", tt.current)
s.Require().NoError(err)
s.Require().Equal(tt.expectedLatest, lv)

// Check it with a chainlet auto-upgrade
err = s.chainletKeeper.AutoUpgradeChainlets(s.ctx)
s.Require().NoError(err)
chainlet, err := s.chainletKeeper.Chainlet(s.ctx, chainId)
s.Require().NoError(err)
s.Require().Equal(tt.expectedLatest, chainlet.ChainletStackVersion)
})
}
}
13 changes: 13 additions & 0 deletions x/chainlet/keeper/versions.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,3 +90,16 @@ func (k *Keeper) LatestVersion(ctx sdk.Context, stackName string, version string

return k.stackVersions[stackName].LatestCompatible(version)
}

// Testing helpers
func (k *Keeper) Versions(stack string) []string {
s := k.stackVersions[stack]
if s == nil {
return nil
}

return s.Export()
}
func (k *Keeper) DeleteVersions() {
k.stackVersions = nil
}
91 changes: 91 additions & 0 deletions x/chainlet/keeper/versions_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
package keeper_test

import (
"github.com/sagaxyz/ssc/x/chainlet/types"
)

func (s *TestSuite) TestVersionsLoading() {
tests := []struct {
addedVersions []string
disabledVersions []string
expectedState []string
}{
{
[]string{"0.1.2"},
[]string{"0.1.2"},
[]string{},
},
{
[]string{"0.1.2", "1.2.3", "2.0.0"},
[]string{},
[]string{"0.1.2", "1.2.3", "2.0.0"},
},
{
[]string{"0.1.2", "0.1.3", "1.2.3", "1.2.4", "2.0.0", "2.1.0", "2.1.1"},
[]string{},
[]string{"0.1.2", "0.1.3", "1.2.3", "1.2.4", "2.0.0", "2.1.0", "2.1.1"},
},
{
[]string{"0.1.2", "0.1.3"},
[]string{"0.1.2"},
[]string{"0.1.3"},
},
{
[]string{"0.1.2", "1.2.3", "2.0.0"},
[]string{"0.1.2", "1.2.3", "2.0.0"},
[]string{},
},
{
[]string{"0.1.2", "1.2.3", "2.0.0"},
[]string{"0.1.2", "2.0.0"},
[]string{"1.2.3"},
},
{
[]string{"0.1.2", "0.1.3", "1.2.3", "1.2.4", "2.0.0", "2.1.0", "2.1.1"},
[]string{"0.1.2", "0.1.3", "1.2.3", "2.0.0", "2.1.0", "2.1.1"},
[]string{"1.2.4"},
},
}

for _, tt := range tests {
s.SetupTest()

var err error
// Add all stack versions
for j, ver := range tt.addedVersions {
if j == 0 {
_, err = s.msgServer.CreateChainletStack(s.ctx, types.NewMsgCreateChainletStack(
creator.String(), "test", "test", "test/test:"+ver, ver, "abcd"+ver, fees,
))
s.Require().NoError(err)
} else {
_, err = s.msgServer.UpdateChainletStack(s.ctx, types.NewMsgUpdateChainletStack(
creator.String(), "test", "test/test:"+ver, ver, "abcd"+ver,
))
s.Require().NoError(err)
}
}

// Disable specified stack versions
for _, ver := range tt.disabledVersions {
_, err = s.msgServer.DisableChainletStackVersion(s.ctx, types.NewMsgDisableChainletStackVersion(creator.String(), "test", ver))
s.Require().NoError(err)
}

s.chainletKeeper.DeleteVersions()
// Force re-load
_, err = s.msgServer.CreateChainletStack(s.ctx, types.NewMsgCreateChainletStack(
creator.String(), "xxx", "xxx", "xxx", "1.2.3", "abcd", fees,
))
s.Require().NoError(err)
versions := s.chainletKeeper.Versions("test")
s.Require().Equal(tt.expectedState, versions)

s.chainletKeeper.DeleteVersions()
// Force re-load
_, err = s.chainletKeeper.LatestVersion(s.ctx, "test", "1.2.3")
s.Require().NoError(err)
versions = s.chainletKeeper.Versions("test")
s.Require().Equal(tt.expectedState, versions)
}
}

0 comments on commit 691043b

Please sign in to comment.