-
Notifications
You must be signed in to change notification settings - Fork 3.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
cosmovisor: tests -> test suites (#7887)
- Loading branch information
Alessio Treglia
authored
Nov 11, 2020
1 parent
136f3ad
commit e564d7f
Showing
5 changed files
with
217 additions
and
223 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,110 +1,114 @@ | ||
// +build linux | ||
|
||
package cosmovisor | ||
package cosmovisor_test | ||
|
||
import ( | ||
"bytes" | ||
"os" | ||
"testing" | ||
|
||
"github.com/stretchr/testify/assert" | ||
"github.com/stretchr/testify/require" | ||
"github.com/stretchr/testify/suite" | ||
|
||
"github.com/cosmos/cosmos-sdk/cosmovisor" | ||
) | ||
|
||
type processTestSuite struct { | ||
suite.Suite | ||
} | ||
|
||
func TestProcessTestSuite(t *testing.T) { | ||
suite.Run(t, new(processTestSuite)) | ||
} | ||
|
||
// TestLaunchProcess will try running the script a few times and watch upgrades work properly | ||
// and args are passed through | ||
func TestLaunchProcess(t *testing.T) { | ||
home, err := copyTestData("validate") | ||
cfg := &Config{Home: home, Name: "dummyd"} | ||
require.NoError(t, err) | ||
defer os.RemoveAll(home) | ||
func (s *processTestSuite) TestLaunchProcess() { | ||
home := copyTestData(s.T(), "validate") | ||
cfg := &cosmovisor.Config{Home: home, Name: "dummyd"} | ||
|
||
// should run the genesis binary and produce expected output | ||
var stdout, stderr bytes.Buffer | ||
currentBin, err := cfg.CurrentBin() | ||
require.NoError(t, err) | ||
s.Require().NoError(err) | ||
|
||
require.Equal(t, cfg.GenesisBin(), currentBin) | ||
s.Require().Equal(cfg.GenesisBin(), currentBin) | ||
|
||
args := []string{"foo", "bar", "1234"} | ||
doUpgrade, err := LaunchProcess(cfg, args, &stdout, &stderr) | ||
require.NoError(t, err) | ||
assert.True(t, doUpgrade) | ||
assert.Equal(t, "", stderr.String()) | ||
assert.Equal(t, "Genesis foo bar 1234\nUPGRADE \"chain2\" NEEDED at height: 49: {}\n", stdout.String()) | ||
doUpgrade, err := cosmovisor.LaunchProcess(cfg, args, &stdout, &stderr) | ||
s.Require().NoError(err) | ||
s.Require().True(doUpgrade) | ||
s.Require().Equal("", stderr.String()) | ||
s.Require().Equal("Genesis foo bar 1234\nUPGRADE \"chain2\" NEEDED at height: 49: {}\n", stdout.String()) | ||
|
||
// ensure this is upgraded now and produces new output | ||
|
||
currentBin, err = cfg.CurrentBin() | ||
require.NoError(t, err) | ||
require.Equal(t, cfg.UpgradeBin("chain2"), currentBin) | ||
s.Require().NoError(err) | ||
s.Require().Equal(cfg.UpgradeBin("chain2"), currentBin) | ||
args = []string{"second", "run", "--verbose"} | ||
stdout.Reset() | ||
stderr.Reset() | ||
doUpgrade, err = LaunchProcess(cfg, args, &stdout, &stderr) | ||
require.NoError(t, err) | ||
assert.False(t, doUpgrade) | ||
assert.Equal(t, "", stderr.String()) | ||
assert.Equal(t, "Chain 2 is live!\nArgs: second run --verbose\nFinished successfully\n", stdout.String()) | ||
doUpgrade, err = cosmovisor.LaunchProcess(cfg, args, &stdout, &stderr) | ||
s.Require().NoError(err) | ||
s.Require().False(doUpgrade) | ||
s.Require().Equal("", stderr.String()) | ||
s.Require().Equal("Chain 2 is live!\nArgs: second run --verbose\nFinished successfully\n", stdout.String()) | ||
|
||
// ended without other upgrade | ||
require.Equal(t, cfg.UpgradeBin("chain2"), currentBin) | ||
s.Require().Equal(cfg.UpgradeBin("chain2"), currentBin) | ||
} | ||
|
||
// TestLaunchProcess will try running the script a few times and watch upgrades work properly | ||
// and args are passed through | ||
func TestLaunchProcessWithDownloads(t *testing.T) { | ||
func (s *processTestSuite) TestLaunchProcessWithDownloads() { | ||
// this is a fun path | ||
// genesis -> "chain2" = zip_binary | ||
// zip_binary -> "chain3" = ref_zipped -> zip_directory | ||
// zip_directory no upgrade | ||
home, err := copyTestData("download") | ||
cfg := &Config{Home: home, Name: "autod", AllowDownloadBinaries: true} | ||
require.NoError(t, err) | ||
defer os.RemoveAll(home) | ||
home := copyTestData(s.T(), "download") | ||
cfg := &cosmovisor.Config{Home: home, Name: "autod", AllowDownloadBinaries: true} | ||
|
||
// should run the genesis binary and produce expected output | ||
var stdout, stderr bytes.Buffer | ||
currentBin, err := cfg.CurrentBin() | ||
require.NoError(t, err) | ||
s.Require().NoError(err) | ||
|
||
require.Equal(t, cfg.GenesisBin(), currentBin) | ||
s.Require().Equal(cfg.GenesisBin(), currentBin) | ||
args := []string{"some", "args"} | ||
doUpgrade, err := LaunchProcess(cfg, args, &stdout, &stderr) | ||
require.NoError(t, err) | ||
assert.True(t, doUpgrade) | ||
assert.Equal(t, "", stderr.String()) | ||
assert.Equal(t, "Preparing auto-download some args\n"+`ERROR: UPGRADE "chain2" NEEDED at height: 49: {"binaries":{"linux/amd64":"https://github.com/cosmos/cosmos-sdk/raw/51249cb93130810033408934454841c98423ed4b/cosmovisor/testdata/repo/zip_binary/autod.zip?checksum=sha256:dc48829b4126ae95bc0db316c66d4e9da5f3db95e212665b6080638cca77e998"}} module=main`+"\n", stdout.String()) | ||
doUpgrade, err := cosmovisor.LaunchProcess(cfg, args, &stdout, &stderr) | ||
s.Require().NoError(err) | ||
s.Require().True(doUpgrade) | ||
s.Require().Equal("", stderr.String()) | ||
s.Require().Equal("Preparing auto-download some args\n"+`ERROR: UPGRADE "chain2" NEEDED at height: 49: {"binaries":{"linux/amd64":"https://github.com/cosmos/cosmos-sdk/raw/51249cb93130810033408934454841c98423ed4b/cosmovisor/testdata/repo/zip_binary/autod.zip?checksum=sha256:dc48829b4126ae95bc0db316c66d4e9da5f3db95e212665b6080638cca77e998"}} module=main`+"\n", stdout.String()) | ||
|
||
// ensure this is upgraded now and produces new output | ||
currentBin, err = cfg.CurrentBin() | ||
require.NoError(t, err) | ||
require.Equal(t, cfg.UpgradeBin("chain2"), currentBin) | ||
s.Require().NoError(err) | ||
s.Require().Equal(cfg.UpgradeBin("chain2"), currentBin) | ||
args = []string{"run", "--fast"} | ||
stdout.Reset() | ||
stderr.Reset() | ||
doUpgrade, err = LaunchProcess(cfg, args, &stdout, &stderr) | ||
require.NoError(t, err) | ||
assert.True(t, doUpgrade) | ||
assert.Equal(t, "", stderr.String()) | ||
assert.Equal(t, "Chain 2 from zipped binary link to referral\nArgs: run --fast\n"+`ERROR: UPGRADE "chain3" NEEDED at height: 936: https://github.com/cosmos/cosmos-sdk/raw/0eae1a50612b8bf803336d35055896fbddaa1ddd/cosmovisor/testdata/repo/ref_zipped?checksum=sha256:0a428575de718ed3cf0771c9687eefaf6f19359977eca4d94a0abd0e11ef8e64 module=main`+"\n", stdout.String()) | ||
doUpgrade, err = cosmovisor.LaunchProcess(cfg, args, &stdout, &stderr) | ||
s.Require().NoError(err) | ||
s.Require().True(doUpgrade) | ||
s.Require().Equal("", stderr.String()) | ||
s.Require().Equal("Chain 2 from zipped binary link to referral\nArgs: run --fast\n"+`ERROR: UPGRADE "chain3" NEEDED at height: 936: https://github.com/cosmos/cosmos-sdk/raw/0eae1a50612b8bf803336d35055896fbddaa1ddd/cosmovisor/testdata/repo/ref_zipped?checksum=sha256:0a428575de718ed3cf0771c9687eefaf6f19359977eca4d94a0abd0e11ef8e64 module=main`+"\n", stdout.String()) | ||
|
||
// ended with one more upgrade | ||
currentBin, err = cfg.CurrentBin() | ||
require.NoError(t, err) | ||
require.Equal(t, cfg.UpgradeBin("chain3"), currentBin) | ||
s.Require().NoError(err) | ||
s.Require().Equal(cfg.UpgradeBin("chain3"), currentBin) | ||
// make sure this is the proper binary now.... | ||
args = []string{"end", "--halt"} | ||
stdout.Reset() | ||
stderr.Reset() | ||
doUpgrade, err = LaunchProcess(cfg, args, &stdout, &stderr) | ||
require.NoError(t, err) | ||
assert.False(t, doUpgrade) | ||
assert.Equal(t, "", stderr.String()) | ||
assert.Equal(t, "Chain 2 from zipped directory\nArgs: end --halt\n", stdout.String()) | ||
doUpgrade, err = cosmovisor.LaunchProcess(cfg, args, &stdout, &stderr) | ||
s.Require().NoError(err) | ||
s.Require().False(doUpgrade) | ||
s.Require().Equal("", stderr.String()) | ||
s.Require().Equal("Chain 2 from zipped directory\nArgs: end --halt\n", stdout.String()) | ||
|
||
// and this doesn't upgrade | ||
currentBin, err = cfg.CurrentBin() | ||
require.NoError(t, err) | ||
require.Equal(t, cfg.UpgradeBin("chain3"), currentBin) | ||
s.Require().NoError(err) | ||
s.Require().Equal(cfg.UpgradeBin("chain3"), currentBin) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.