Files

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