Files
atomic-swap/net/initiate_test.go
2023-04-05 20:16:41 -05:00

102 lines
2.6 KiB
Go

// Copyright 2023 Athanor Labs (ON)
// SPDX-License-Identifier: LGPL-3.0-only
package net
import (
"testing"
"time"
"github.com/ethereum/go-ethereum/crypto"
"github.com/athanorlabs/atomic-swap/coins"
"github.com/athanorlabs/atomic-swap/common/types"
"github.com/athanorlabs/atomic-swap/net/message"
pcommon "github.com/athanorlabs/atomic-swap/protocol"
"github.com/athanorlabs/atomic-swap/tests"
"github.com/stretchr/testify/require"
)
func createSendKeysMessage(t *testing.T) *message.SendKeysMessage {
keysAndProof, err := pcommon.GenerateKeysAndProof()
require.NoError(t, err)
return &message.SendKeysMessage{
OfferID: types.Hash{0x1},
ProvidedAmount: coins.StrToDecimal("0.5"),
PublicSpendKey: keysAndProof.PublicKeyPair.SpendKey(),
PrivateViewKey: keysAndProof.PrivateKeyPair.ViewKey(),
DLEqProof: keysAndProof.DLEqProof.Proof(),
Secp256k1PublicKey: keysAndProof.Secp256k1PublicKey,
EthAddress: crypto.PubkeyToAddress(tests.GetMakerTestKey(t).PublicKey),
}
}
func TestHost_Initiate(t *testing.T) {
ha := newHost(t, basicTestConfig(t))
err := ha.Start()
require.NoError(t, err)
hb := newHost(t, basicTestConfig(t))
err = hb.Start()
require.NoError(t, err)
err = ha.h.Connect(ha.ctx, hb.h.AddrInfo())
require.NoError(t, err)
err = ha.Initiate(hb.h.AddrInfo(), createSendKeysMessage(t), new(mockSwapState))
require.NoError(t, err)
time.Sleep(time.Millisecond * 500)
ha.swapMu.RLock()
require.NotNil(t, ha.swaps[testID])
ha.swapMu.RUnlock()
hb.swapMu.RLock()
require.NotNil(t, hb.swaps[testID])
hb.swapMu.RUnlock()
}
func TestHost_ConcurrentSwaps(t *testing.T) {
ha := newHost(t, basicTestConfig(t))
err := ha.Start()
require.NoError(t, err)
hbCfg := basicTestConfig(t)
hbCfg.Bootnodes = []string{ha.Addresses()[0].String()} // get some test coverage on our bootnode code
hb := newHost(t, hbCfg)
err = hb.Start()
require.NoError(t, err)
testID2 := types.Hash{98}
err = ha.h.Connect(ha.ctx, hb.h.AddrInfo())
require.NoError(t, err)
err = ha.Initiate(hb.h.AddrInfo(), createSendKeysMessage(t), new(mockSwapState))
require.NoError(t, err)
time.Sleep(time.Millisecond * 500)
ha.swapMu.RLock()
require.NotNil(t, ha.swaps[testID])
ha.swapMu.RUnlock()
hb.swapMu.RLock()
require.NotNil(t, hb.swaps[testID])
hb.swapMu.RUnlock()
hb.makerHandler.(*mockMakerHandler).id = testID2
err = ha.Initiate(hb.h.AddrInfo(), createSendKeysMessage(t), &mockSwapState{testID2})
require.NoError(t, err)
time.Sleep(time.Millisecond * 1500)
ha.swapMu.RLock()
require.NotNil(t, ha.swaps[testID])
ha.swapMu.RUnlock()
hb.swapMu.RLock()
require.NotNil(t, hb.swaps[testID])
hb.swapMu.RUnlock()
}