mirror of
https://github.com/luxfi/cli.git
synced 2026-10-30 17:01:20 +00:00
88 lines
2.8 KiB
Go
88 lines
2.8 KiB
Go
// Copyright (C) 2022, Lux Industries Inc. All rights reserved.
|
|
// See the file LICENSE for licensing terms.
|
|
package subnetcmd
|
|
|
|
import (
|
|
"encoding/json"
|
|
"io"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/luxfi/cli/v2/internal/mocks"
|
|
"github.com/luxfi/cli/v2/pkg/application"
|
|
"github.com/luxfi/cli/v2/pkg/constants"
|
|
"github.com/luxfi/cli/v2/pkg/prompts"
|
|
"github.com/luxfi/cli/v2/pkg/ux"
|
|
"github.com/luxfi/cli/v2/pkg/vm"
|
|
"github.com/luxfi/cli/v2/tests/e2e/utils"
|
|
luxlog "github.com/luxfi/log"
|
|
"github.com/stretchr/testify/mock"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestExportImportSubnet(t *testing.T) {
|
|
testDir := t.TempDir()
|
|
require := require.New(t)
|
|
testSubnet := "testSubnet"
|
|
vmVersion := "v0.9.99"
|
|
testEVMCompat := []byte("{\"rpcChainVMProtocolVersion\": {\"v0.9.99\": 18}}")
|
|
|
|
app = application.New()
|
|
|
|
mockAppDownloader := mocks.Downloader{}
|
|
mockAppDownloader.On("Download", mock.Anything).Return(testEVMCompat, nil)
|
|
|
|
app.Setup(testDir, luxlog.NewNoOpLogger(), nil, prompts.NewPrompter(), &mockAppDownloader)
|
|
ux.NewUserLog(luxlog.NewNoOpLogger(), io.Discard)
|
|
genBytes, sc, err := vm.CreateEvmConfig(app, testSubnet, "../../"+utils.SubnetEvmGenesisPath, vmVersion)
|
|
require.NoError(err)
|
|
err = app.WriteGenesisFile(testSubnet, genBytes)
|
|
require.NoError(err)
|
|
err = app.CreateSidecar(sc)
|
|
require.NoError(err)
|
|
|
|
exportOutputDir := filepath.Join(testDir, "output")
|
|
err = os.MkdirAll(exportOutputDir, constants.DefaultPerms755)
|
|
require.NoError(err)
|
|
exportOutput = filepath.Join(exportOutputDir, testSubnet)
|
|
defer func() {
|
|
exportOutput = ""
|
|
app = nil
|
|
}()
|
|
|
|
err = exportSubnet(nil, []string{"this-does-not-exist-should-fail"})
|
|
require.Error(err)
|
|
|
|
err = exportSubnet(nil, []string{testSubnet})
|
|
require.NoError(err)
|
|
require.FileExists(exportOutput)
|
|
sidecarFile := filepath.Join(app.GetBaseDir(), constants.SubnetDir, testSubnet, constants.SidecarFileName)
|
|
orig, err := os.ReadFile(sidecarFile)
|
|
require.NoError(err)
|
|
|
|
var control map[string]interface{}
|
|
err = json.Unmarshal(orig, &control)
|
|
require.NoError(err)
|
|
require.Equal(control["Name"], testSubnet)
|
|
require.Equal(control["VM"], "Lux EVM")
|
|
require.Equal(control["VMVersion"], vmVersion)
|
|
require.Equal(control["Subnet"], testSubnet)
|
|
require.Equal(control["TokenName"], "TEST")
|
|
require.Equal(control["Version"], constants.SidecarVersion)
|
|
require.Equal(control["Networks"], nil)
|
|
|
|
err = os.Remove(sidecarFile)
|
|
require.NoError(err)
|
|
|
|
err = importSubnet(nil, []string{"this-does-also-not-exist-import-should-fail"})
|
|
require.ErrorIs(err, os.ErrNotExist)
|
|
err = importSubnet(nil, []string{exportOutput})
|
|
require.ErrorContains(err, "subnet already exists")
|
|
genFile := filepath.Join(app.GetBaseDir(), constants.SubnetDir, testSubnet, constants.GenesisFileName)
|
|
err = os.Remove(genFile)
|
|
require.NoError(err)
|
|
err = importSubnet(nil, []string{exportOutput})
|
|
require.NoError(err)
|
|
}
|