Files
atomic-swap/cliutil/utils_test.go

115 lines
3.6 KiB
Go

// Copyright 2023 The AthanorLabs/atomic-swap Authors
// SPDX-License-Identifier: LGPL-3.0-only
package cliutil
import (
"encoding/hex"
"fmt"
"os"
"path"
"testing"
ethcrypto "github.com/ethereum/go-ethereum/crypto"
"github.com/stretchr/testify/require"
"github.com/athanorlabs/atomic-swap/common"
)
func getKeyPath(t *testing.T) string {
return path.Join(t.TempDir(), common.DefaultEthKeyFileName)
}
func verifyKeyFile(t *testing.T, keyPath string, expectedKeyHex string) {
data, err := os.ReadFile(keyPath)
require.NoError(t, err)
require.Equal(t, expectedKeyHex, string(data))
}
func TestGetEthereumPrivateKey_devXMRMaker(t *testing.T) {
devXMRMaker := true
devXMRTaker := false
keyPath := getKeyPath(t)
key, err := GetEthereumPrivateKey(keyPath, common.Development, devXMRMaker, devXMRTaker)
require.NoError(t, err)
expectedKeyHex := hex.EncodeToString(ethcrypto.FromECDSA(key))
require.Equal(t, common.DefaultPrivKeyXMRMaker, expectedKeyHex)
verifyKeyFile(t, keyPath, expectedKeyHex)
}
func TestGetEthereumPrivateKey_devXMRTaker(t *testing.T) {
devXMRMaker := false
devXMRTaker := true
keyPath := getKeyPath(t)
key, err := GetEthereumPrivateKey(keyPath, common.Development, devXMRMaker, devXMRTaker)
require.NoError(t, err)
expectedKeyHex := hex.EncodeToString(ethcrypto.FromECDSA(key))
require.Equal(t, common.DefaultPrivKeyXMRTaker, hex.EncodeToString(ethcrypto.FromECDSA(key)))
verifyKeyFile(t, keyPath, expectedKeyHex)
}
func TestGetEthereumPrivateKey_nonDev_newKey(t *testing.T) {
devXMRMaker := true // ignored, using stagenet
devXMRTaker := true // ignored, using stagenet
keyPath := getKeyPath(t)
key, err := GetEthereumPrivateKey(keyPath, common.Stagenet, devXMRMaker, devXMRTaker)
expectedKeyHex := hex.EncodeToString(ethcrypto.FromECDSA(key))
require.NoError(t, err)
verifyKeyFile(t, keyPath, expectedKeyHex)
require.NotEqual(t, expectedKeyHex, common.DefaultPrivKeyXMRMaker)
}
func TestGetEthereumPrivateKey_fromFile(t *testing.T) {
keyHex := "87c546d6cb8ec705bea47e2ab40f42a768b1e5900686b0cecc68c0e8b74cd789"
fileData := []byte(fmt.Sprintf(" %s\n", keyHex)) // add whitespace that we should ignore
keyPath := getKeyPath(t)
require.NoError(t, os.WriteFile(keyPath, fileData, 0600))
key, err := GetEthereumPrivateKey(keyPath, common.Mainnet, false, false)
require.NoError(t, err)
require.Equal(t, keyHex, hex.EncodeToString(ethcrypto.FromECDSA(key)))
}
func TestGetEthereumPrivateKey_fromFileFail(t *testing.T) {
keyHex := "87c546d6cb8ec705bea47e2ab40f42a768b1e5900686b0cecc68c0e8b74cd789"
keyBytes, err := hex.DecodeString(keyHex)
require.NoError(t, err)
keyFile := path.Join(t.TempDir(), "eth.key")
require.NoError(t, os.WriteFile(keyFile, keyBytes, 0600)) // key is binary instead of hex
_, err = GetEthereumPrivateKey(keyFile, common.Mainnet, false, false)
require.ErrorContains(t, err, "invalid hex character")
}
func TestGetVersion(t *testing.T) {
// Nothing we can test other than that it does not panic without a built executable
require.NotEmpty(t, GetVersion())
t.Log(GetVersion())
}
func Test_expandBootnodes(t *testing.T) {
cliNodes := []string{
" node1, node2 ,node3,node4 ",
"node5",
"\tnode6\n",
"node7,node8",
}
expected := []string{
"node1",
"node2",
"node3",
"node4",
"node5",
"node6",
"node7",
"node8",
}
require.EqualValues(t, expected, ExpandBootnodes(cliNodes))
}
func Test_expandBootnodes_noNodes(t *testing.T) {
// This can happen when the user specifies a single `--bootnodes ""` flag
// to not use the default bootnodes for an environment.
cliNodes := []string{""}
nodes := ExpandBootnodes(cliNodes)
require.Zero(t, len(nodes))
}