forked from TrueCloudLab/frostfs-node
[#1959] neofs-adm: Move testdata generation to a separate function
Later we could make it a separate tests an run neofs-adm tests on CI. Signed-off-by: Evgenii Stratonikov <evgeniy@morphbits.ru>
This commit is contained in:
parent
6c21e2cc28
commit
2404a267b9
2 changed files with 44 additions and 31 deletions
|
@ -112,7 +112,7 @@ func setupTestTerminal(t *testing.T) *bytes.Buffer {
|
||||||
}
|
}
|
||||||
|
|
||||||
func newTempDir(t *testing.T) string {
|
func newTempDir(t *testing.T) string {
|
||||||
dir := filepath.Join(os.TempDir(), "neofs-adm.test."+strconv.FormatUint(rand.Uint64(), 10))
|
dir := filepath.Join(t.TempDir(), "neofs-adm.test."+strconv.FormatUint(rand.Uint64(), 10))
|
||||||
require.NoError(t, os.Mkdir(dir, os.ModePerm))
|
require.NoError(t, os.Mkdir(dir, os.ModePerm))
|
||||||
t.Cleanup(func() {
|
t.Cleanup(func() {
|
||||||
require.NoError(t, os.RemoveAll(dir))
|
require.NoError(t, os.RemoveAll(dir))
|
||||||
|
|
|
@ -16,12 +16,16 @@ import (
|
||||||
"gopkg.in/yaml.v3"
|
"gopkg.in/yaml.v3"
|
||||||
)
|
)
|
||||||
|
|
||||||
const contractsPath = "../../../../../../neofs-contract/neofs-contract-v0.16.0.tar.gz"
|
const (
|
||||||
|
contractsPath = "../../../../../../neofs-contract/neofs-contract-v0.16.0.tar.gz"
|
||||||
|
protoFileName = "proto.yml"
|
||||||
|
)
|
||||||
|
|
||||||
func TestInitialize(t *testing.T) {
|
func TestInitialize(t *testing.T) {
|
||||||
// This test needs neofs-contract tarball, so it is skipped by default.
|
// This test needs neofs-contract tarball, so it is skipped by default.
|
||||||
// It is here for performing local testing after the changes.
|
// It is here for performing local testing after the changes.
|
||||||
t.Skip()
|
t.Skip()
|
||||||
|
|
||||||
t.Run("4 nodes", func(t *testing.T) {
|
t.Run("4 nodes", func(t *testing.T) {
|
||||||
testInitialize(t, 4)
|
testInitialize(t, 4)
|
||||||
})
|
})
|
||||||
|
@ -31,25 +35,43 @@ func TestInitialize(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func testInitialize(t *testing.T, committeeSize int) {
|
func testInitialize(t *testing.T, committeeSize int) {
|
||||||
validatorCount := committeeSize
|
testdataDir := newTempDir(t)
|
||||||
|
|
||||||
walletDir := newTempDir(t)
|
|
||||||
v := viper.GetViper()
|
v := viper.GetViper()
|
||||||
|
|
||||||
v.Set(alphabetWalletsFlag, walletDir)
|
generateTestData(t, testdataDir, committeeSize)
|
||||||
|
v.Set(protoConfigPath, filepath.Join(testdataDir, protoFileName))
|
||||||
|
|
||||||
sizeStr := strconv.FormatUint(uint64(committeeSize), 10)
|
// Set to the path or remove the next statement to download from the network.
|
||||||
|
require.NoError(t, initCmd.Flags().Set(contractsInitFlag, contractsPath))
|
||||||
|
v.Set(localDumpFlag, filepath.Join(testdataDir, "out"))
|
||||||
|
v.Set(alphabetWalletsFlag, testdataDir)
|
||||||
|
v.Set(epochDurationInitFlag, 1)
|
||||||
|
v.Set(maxObjectSizeInitFlag, 1024)
|
||||||
|
|
||||||
|
setTestCredentials(v, committeeSize)
|
||||||
|
require.NoError(t, initializeSideChainCmd(initCmd, nil))
|
||||||
|
|
||||||
|
t.Run("force-new-epoch", func(t *testing.T) {
|
||||||
|
require.NoError(t, forceNewEpochCmd(forceNewEpoch, nil))
|
||||||
|
})
|
||||||
|
t.Run("set-config", func(t *testing.T) {
|
||||||
|
require.NoError(t, setConfigCmd(setConfig, []string{"MaintenanceModeAllowed=true"}))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func generateTestData(t *testing.T, dir string, size int) {
|
||||||
|
v := viper.GetViper()
|
||||||
|
v.Set(alphabetWalletsFlag, dir)
|
||||||
|
|
||||||
|
sizeStr := strconv.FormatUint(uint64(size), 10)
|
||||||
require.NoError(t, generateAlphabetCmd.Flags().Set(alphabetSizeFlag, sizeStr))
|
require.NoError(t, generateAlphabetCmd.Flags().Set(alphabetSizeFlag, sizeStr))
|
||||||
|
|
||||||
for i := 0; i < committeeSize; i++ {
|
setTestCredentials(v, size)
|
||||||
v.Set("credentials."+innerring.GlagoliticLetter(i).String(), strconv.FormatUint(uint64(i), 10))
|
|
||||||
}
|
|
||||||
v.Set("credentials.contract", testContractPassword)
|
|
||||||
require.NoError(t, generateAlphabetCreds(generateAlphabetCmd, nil))
|
require.NoError(t, generateAlphabetCreds(generateAlphabetCmd, nil))
|
||||||
|
|
||||||
var pubs []string
|
var pubs []string
|
||||||
for i := 0; i < committeeSize; i++ {
|
for i := 0; i < size; i++ {
|
||||||
p := filepath.Join(walletDir, innerring.GlagoliticLetter(i).String()+".json")
|
p := filepath.Join(dir, innerring.GlagoliticLetter(i).String()+".json")
|
||||||
w, err := wallet.NewWalletFromFile(p)
|
w, err := wallet.NewWalletFromFile(p)
|
||||||
require.NoError(t, err, "wallet doesn't exist")
|
require.NoError(t, err, "wallet doesn't exist")
|
||||||
for _, acc := range w.Accounts {
|
for _, acc := range w.Accounts {
|
||||||
|
@ -63,7 +85,7 @@ func testInitialize(t *testing.T, committeeSize int) {
|
||||||
}
|
}
|
||||||
|
|
||||||
cfg := config.Config{}
|
cfg := config.Config{}
|
||||||
cfg.ProtocolConfiguration.ValidatorsCount = validatorCount
|
cfg.ProtocolConfiguration.ValidatorsCount = size
|
||||||
cfg.ProtocolConfiguration.SecondsPerBlock = 1
|
cfg.ProtocolConfiguration.SecondsPerBlock = 1
|
||||||
cfg.ProtocolConfiguration.StandbyCommittee = pubs // sorted by glagolic letters
|
cfg.ProtocolConfiguration.StandbyCommittee = pubs // sorted by glagolic letters
|
||||||
cfg.ProtocolConfiguration.P2PSigExtensions = true
|
cfg.ProtocolConfiguration.P2PSigExtensions = true
|
||||||
|
@ -71,22 +93,13 @@ func testInitialize(t *testing.T, committeeSize int) {
|
||||||
data, err := yaml.Marshal(cfg)
|
data, err := yaml.Marshal(cfg)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
protoPath := filepath.Join(walletDir, "proto.yml")
|
protoPath := filepath.Join(dir, protoFileName)
|
||||||
require.NoError(t, os.WriteFile(protoPath, data, os.ModePerm))
|
require.NoError(t, os.WriteFile(protoPath, data, os.ModePerm))
|
||||||
|
}
|
||||||
v.Set(protoConfigPath, protoPath)
|
|
||||||
// Set to the path or remove the next statement to download from the network.
|
func setTestCredentials(v *viper.Viper, size int) {
|
||||||
require.NoError(t, initCmd.Flags().Set(contractsInitFlag, contractsPath))
|
for i := 0; i < size; i++ {
|
||||||
v.Set(localDumpFlag, filepath.Join(walletDir, "out"))
|
v.Set("credentials."+innerring.GlagoliticLetter(i).String(), strconv.FormatUint(uint64(i), 10))
|
||||||
v.Set(alphabetWalletsFlag, walletDir)
|
}
|
||||||
v.Set(epochDurationInitFlag, 1)
|
v.Set("credentials.contract", testContractPassword)
|
||||||
v.Set(maxObjectSizeInitFlag, 1024)
|
|
||||||
require.NoError(t, initializeSideChainCmd(initCmd, nil))
|
|
||||||
|
|
||||||
t.Run("force-new-epoch", func(t *testing.T) {
|
|
||||||
require.NoError(t, forceNewEpochCmd(forceNewEpoch, nil))
|
|
||||||
})
|
|
||||||
t.Run("set-config", func(t *testing.T) {
|
|
||||||
require.NoError(t, setConfigCmd(setConfig, []string{"MaintenanceModeAllowed=true"}))
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue