132 lines
3.1 KiB
Go
132 lines
3.1 KiB
Go
package cosmovisor
|
|
|
|
import (
|
|
"fmt"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/suite"
|
|
)
|
|
|
|
type argsTestSuite struct {
|
|
suite.Suite
|
|
}
|
|
|
|
func TestArgsTestSuite(t *testing.T) {
|
|
suite.Run(t, new(argsTestSuite))
|
|
}
|
|
|
|
func (s *argsTestSuite) TestConfigPaths() {
|
|
cases := map[string]struct {
|
|
cfg Config
|
|
upgradeName string
|
|
expectRoot string
|
|
expectGenesis string
|
|
expectUpgrade string
|
|
}{
|
|
"simple": {
|
|
cfg: Config{Home: "/foo", Name: "myd"},
|
|
upgradeName: "bar",
|
|
expectRoot: fmt.Sprintf("/foo/%s", rootName),
|
|
expectGenesis: fmt.Sprintf("/foo/%s/genesis/bin/myd", rootName),
|
|
expectUpgrade: fmt.Sprintf("/foo/%s/upgrades/bar/bin/myd", rootName),
|
|
},
|
|
"handle space": {
|
|
cfg: Config{Home: "/longer/prefix/", Name: "yourd"},
|
|
upgradeName: "some spaces",
|
|
expectRoot: fmt.Sprintf("/longer/prefix/%s", rootName),
|
|
expectGenesis: fmt.Sprintf("/longer/prefix/%s/genesis/bin/yourd", rootName),
|
|
expectUpgrade: "/longer/prefix/cosmovisor/upgrades/some%20spaces/bin/yourd",
|
|
},
|
|
}
|
|
|
|
for _, tc := range cases {
|
|
s.Require().Equal(tc.cfg.Root(), filepath.FromSlash(tc.expectRoot))
|
|
s.Require().Equal(tc.cfg.GenesisBin(), filepath.FromSlash(tc.expectGenesis))
|
|
s.Require().Equal(tc.cfg.UpgradeBin(tc.upgradeName), filepath.FromSlash(tc.expectUpgrade))
|
|
}
|
|
}
|
|
|
|
// Test validate
|
|
func (s *argsTestSuite) TestValidate() {
|
|
relPath := filepath.Join("testdata", "validate")
|
|
absPath, err := filepath.Abs(relPath)
|
|
s.Require().NoError(err)
|
|
|
|
testdata, err := filepath.Abs("testdata")
|
|
s.Require().NoError(err)
|
|
|
|
cases := map[string]struct {
|
|
cfg Config
|
|
valid bool
|
|
}{
|
|
"happy": {
|
|
cfg: Config{Home: absPath, Name: "bind"},
|
|
valid: true,
|
|
},
|
|
"happy with download": {
|
|
cfg: Config{Home: absPath, Name: "bind", AllowDownloadBinaries: true},
|
|
valid: true,
|
|
},
|
|
"missing home": {
|
|
cfg: Config{Name: "bind"},
|
|
valid: false,
|
|
},
|
|
"missing name": {
|
|
cfg: Config{Home: absPath},
|
|
valid: false,
|
|
},
|
|
"relative path": {
|
|
cfg: Config{Home: relPath, Name: "bind"},
|
|
valid: false,
|
|
},
|
|
"no upgrade manager subdir": {
|
|
cfg: Config{Home: testdata, Name: "bind"},
|
|
valid: false,
|
|
},
|
|
"no such dir": {
|
|
cfg: Config{Home: filepath.FromSlash("/no/such/dir"), Name: "bind"},
|
|
valid: false,
|
|
},
|
|
}
|
|
|
|
for _, tc := range cases {
|
|
err := tc.cfg.validate()
|
|
if tc.valid {
|
|
s.Require().NoError(err)
|
|
} else {
|
|
s.Require().Error(err)
|
|
}
|
|
}
|
|
}
|
|
|
|
func (s *argsTestSuite) TestEnsureBin() {
|
|
relPath := filepath.Join("testdata", "validate")
|
|
absPath, err := filepath.Abs(relPath)
|
|
s.Require().NoError(err)
|
|
|
|
cfg := Config{Home: absPath, Name: "dummyd"}
|
|
s.Require().NoError(cfg.validate())
|
|
|
|
s.Require().NoError(EnsureBinary(cfg.GenesisBin()))
|
|
|
|
cases := map[string]struct {
|
|
upgrade string
|
|
hasBin bool
|
|
}{
|
|
"proper": {"chain2", true},
|
|
"no binary": {"nobin", false},
|
|
"not executable": {"noexec", false},
|
|
"no directory": {"foobarbaz", false},
|
|
}
|
|
|
|
for _, tc := range cases {
|
|
err := EnsureBinary(cfg.UpgradeBin(tc.upgrade))
|
|
if tc.hasBin {
|
|
s.Require().NoError(err)
|
|
} else {
|
|
s.Require().Error(err)
|
|
}
|
|
}
|
|
}
|