mirror of
https://github.com/luxfi/cli.git
synced 2026-10-30 17:01:20 +00:00
101 lines
3.0 KiB
Go
101 lines
3.0 KiB
Go
// Copyright (C) 2025, Lux Industries Inc. All rights reserved.
|
|
// See the file LICENSE for licensing terms.
|
|
package blockchaincmd
|
|
|
|
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/node/v2/v2/utils/logging"
|
|
"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"
|
|
testSubnetEVMCompat := []byte("{\"rpcChainVMProtocolVersion\": {\"v0.9.99\": 18}}")
|
|
|
|
app = application.New()
|
|
|
|
mockAppDownloader := mocks.Downloader{}
|
|
mockAppDownloader.On("Download", mock.Anything).Return(testSubnetEVMCompat, nil)
|
|
|
|
app.Setup(testDir, logging.NoLog{}, nil, "", prompts.NewPrompter(), &mockAppDownloader, nil)
|
|
ux.NewUserLog(logging.NoLog{}, io.Discard)
|
|
|
|
subnetEvmGenesisPath := "tests/e2e/assets/test_subnet_evm_genesis.json"
|
|
genBytes, err := os.ReadFile("../../" + subnetEvmGenesisPath)
|
|
require.NoError(err)
|
|
sc, err := vm.CreateEvmSidecar(
|
|
nil,
|
|
app,
|
|
testSubnet,
|
|
vmVersion,
|
|
"Test",
|
|
false,
|
|
true,
|
|
true,
|
|
)
|
|
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
|
|
}()
|
|
globalNetworkFlags.UseLocal = true
|
|
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"], "Subnet-EVM")
|
|
require.Equal(control["VMVersion"], vmVersion)
|
|
require.Equal(control["Subnet"], testSubnet)
|
|
require.Equal(control["TokenName"], "Test Token")
|
|
require.Equal(control["TokenSymbol"], "Test")
|
|
require.Equal(control["Version"], constants.SidecarVersion)
|
|
require.Equal(control["Networks"], nil)
|
|
|
|
err = os.Remove(sidecarFile)
|
|
require.NoError(err)
|
|
|
|
err = importFile(nil, []string{"this-does-also-not-exist-import-should-fail"})
|
|
require.ErrorIs(err, os.ErrNotExist)
|
|
err = importFile(nil, []string{exportOutput})
|
|
require.ErrorContains(err, "blockchain already exists")
|
|
genFile := filepath.Join(app.GetBaseDir(), constants.SubnetDir, testSubnet, constants.GenesisFileName)
|
|
err = os.Remove(genFile)
|
|
require.NoError(err)
|
|
err = importFile(nil, []string{exportOutput})
|
|
require.NoError(err)
|
|
}
|