[#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:
Evgenii Stratonikov 2022-10-24 15:41:55 +03:00 committed by fyrchik
parent 6c21e2cc28
commit 2404a267b9
2 changed files with 44 additions and 31 deletions

View file

@ -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))

View file

@ -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"}))
})
} }