Skip to content

Commit 535ed6d

Browse files
committed
Add lighter tests
1 parent cde03cb commit 535ed6d

File tree

6 files changed

+355
-11
lines changed

6 files changed

+355
-11
lines changed

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ genmocks:
4242
mockgen -source=./chains/evm/message/confirmations.go -destination=./chains/evm/message/mock/confirmations.go
4343
mockgen -source=./api/handlers/signing.go -destination=./api/handlers/mock/signing.go
4444
mockgen -package mock_message -destination=./chains/evm/message/mock/pricing.go github.com/sprintertech/lifi-solver/pkg/pricing OrderPricer
45+
mockgen -source=./chains/lighter/message/lighter.go -destination=./chains/lighter/message/mock/lighter.go
4546

4647

4748

chains/evm/calls/consts/lighter.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ var LighterABI, _ = abi.JSON(strings.NewReader(`[{
1313
"inputs": [
1414
{"name": "txHash", "type": "bytes32"},
1515
{"name": "toAddress", "type": "address"},
16-
{"name": "amount", "type": "uint256"},
16+
{"name": "amount", "type": "uint256"}
1717
],
1818
"outputs": []
1919
}]`))

chains/lighter/message/lighter.go

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,37 @@ type TxFetcher interface {
3737
}
3838

3939
type LighterMessageHandler struct {
40-
coordinator Coordinator
41-
host host.Host
42-
comm comm.Communication
43-
fetcher signing.SaveDataFetcher
40+
coordinator Coordinator
41+
host host.Host
42+
comm comm.Communication
43+
fetcher signing.SaveDataFetcher
44+
sigChn chan any
45+
4446
lighterAddress common.Address
4547
usdcAddress common.Address
48+
txFetcher TxFetcher
49+
}
4650

47-
txFether TxFetcher
48-
sigChn chan any
51+
func NewLighterMessageHandler(
52+
lighterAddress common.Address,
53+
usdcAddress common.Address,
54+
txFetcher TxFetcher,
55+
coordinator Coordinator,
56+
host host.Host,
57+
comm comm.Communication,
58+
fetcher signing.SaveDataFetcher,
59+
sigChn chan any,
60+
) *LighterMessageHandler {
61+
return &LighterMessageHandler{
62+
txFetcher: txFetcher,
63+
usdcAddress: usdcAddress,
64+
lighterAddress: lighterAddress,
65+
coordinator: coordinator,
66+
host: host,
67+
comm: comm,
68+
fetcher: fetcher,
69+
sigChn: sigChn,
70+
}
4971
}
5072

5173
// HandleMessage finds the Mayan deposit with the according deposit ID and starts
@@ -59,7 +81,7 @@ func (h *LighterMessageHandler) HandleMessage(m *message.Message) (*proposal.Pro
5981
log.Warn().Msgf("Failed to notify relayers because of %s", err)
6082
}
6183

62-
tx, err := h.txFether.GetTx(data.DepositTxHash)
84+
tx, err := h.txFetcher.GetTx(data.OrderHash)
6385
if err != nil {
6486
data.ErrChn <- err
6587
return nil, err
@@ -79,7 +101,7 @@ func (h *LighterMessageHandler) HandleMessage(m *message.Message) (*proposal.Pro
79101

80102
unlockHash, err := signature.BorrowUnlockHash(
81103
calldata,
82-
new(big.Int).SetUint64(tx.Transfer.USDCAmount-tx.Transfer.Fee),
104+
new(big.Int).SetUint64(tx.Transfer.USDCAmount),
83105
h.usdcAddress,
84106
ARBITRUM_CHAIN_ID,
85107
h.lighterAddress,
@@ -124,11 +146,11 @@ func (h *LighterMessageHandler) verifyWithdrawal(tx *lighter.LighterTx) error {
124146
}
125147

126148
func (h *LighterMessageHandler) calldata(tx *lighter.LighterTx) ([]byte, error) {
127-
return consts.LifiABI.Pack(
149+
return consts.LighterABI.Pack(
128150
"withdraw",
129151
common.HexToHash(tx.Hash),
130152
common.HexToAddress(tx.L1Address),
131-
new(big.Int).SetUint64(tx.Transfer.USDCAmount-tx.Transfer.Fee))
153+
new(big.Int).SetUint64(tx.Transfer.USDCAmount))
132154
}
133155

134156
func (h *LighterMessageHandler) Listen(ctx context.Context) {
Lines changed: 223 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,223 @@
1+
package message_test
2+
3+
import (
4+
"fmt"
5+
"math/big"
6+
"testing"
7+
8+
"github.com/ethereum/go-ethereum/common"
9+
"github.com/libp2p/go-libp2p/core/peer"
10+
"github.com/libp2p/go-libp2p/p2p/host/peerstore/pstoremem"
11+
"github.com/sprintertech/sprinter-signing/chains/lighter/message"
12+
mock_message "github.com/sprintertech/sprinter-signing/chains/lighter/message/mock"
13+
"github.com/sprintertech/sprinter-signing/comm"
14+
mock_communication "github.com/sprintertech/sprinter-signing/comm/mock"
15+
mock_host "github.com/sprintertech/sprinter-signing/comm/p2p/mock/host"
16+
"github.com/sprintertech/sprinter-signing/keyshare"
17+
"github.com/sprintertech/sprinter-signing/protocol/lighter"
18+
mock_tss "github.com/sprintertech/sprinter-signing/tss/ecdsa/common/mock"
19+
"github.com/stretchr/testify/suite"
20+
coreMessage "github.com/sygmaprotocol/sygma-core/relayer/message"
21+
"go.uber.org/mock/gomock"
22+
)
23+
24+
type LighterMessageHandlerTestSuite struct {
25+
suite.Suite
26+
27+
mockCommunication *mock_communication.MockCommunication
28+
mockCoordinator *mock_message.MockCoordinator
29+
mockHost *mock_host.MockHost
30+
mockFetcher *mock_tss.MockSaveDataFetcher
31+
mockTxFetcher *mock_message.MockTxFetcher
32+
33+
handler *message.LighterMessageHandler
34+
sigChn chan interface{}
35+
}
36+
37+
func TestRunLighterMessageHandlerTestSuite(t *testing.T) {
38+
suite.Run(t, new(LighterMessageHandlerTestSuite))
39+
}
40+
41+
func (s *LighterMessageHandlerTestSuite) SetupTest() {
42+
ctrl := gomock.NewController(s.T())
43+
44+
s.mockCommunication = mock_communication.NewMockCommunication(ctrl)
45+
s.mockCoordinator = mock_message.NewMockCoordinator(ctrl)
46+
s.mockHost = mock_host.NewMockHost(ctrl)
47+
s.mockHost.EXPECT().ID().Return(peer.ID("")).AnyTimes()
48+
49+
s.mockFetcher = mock_tss.NewMockSaveDataFetcher(ctrl)
50+
s.mockFetcher.EXPECT().UnlockKeyshare().AnyTimes()
51+
s.mockFetcher.EXPECT().LockKeyshare().AnyTimes()
52+
s.mockFetcher.EXPECT().GetKeyshare().AnyTimes().Return(keyshare.ECDSAKeyshare{}, nil)
53+
54+
s.mockTxFetcher = mock_message.NewMockTxFetcher(ctrl)
55+
56+
s.sigChn = make(chan interface{}, 1)
57+
58+
s.handler = message.NewLighterMessageHandler(
59+
common.Address{},
60+
common.Address{},
61+
s.mockTxFetcher,
62+
s.mockCoordinator,
63+
s.mockHost,
64+
s.mockCommunication,
65+
s.mockFetcher,
66+
s.sigChn,
67+
)
68+
}
69+
70+
func (s *LighterMessageHandlerTestSuite) Test_HandleMessage_ValidMessage() {
71+
s.mockCommunication.EXPECT().Broadcast(
72+
gomock.Any(),
73+
gomock.Any(),
74+
comm.LighterMsg,
75+
"lighter",
76+
).Return(nil)
77+
p, _ := pstoremem.NewPeerstore()
78+
s.mockHost.EXPECT().Peerstore().Return(p)
79+
80+
errChn := make(chan error, 1)
81+
ad := &message.LighterData{
82+
ErrChn: errChn,
83+
Nonce: big.NewInt(101),
84+
LiquidityPool: common.HexToAddress("0xbe526bA5d1ad94cC59D7A79d99A59F607d31A657"),
85+
Caller: common.HexToAddress("0xde526bA5d1ad94cC59D7A79d99A59F607d31A657"),
86+
OrderHash: "orderHash",
87+
}
88+
s.mockCoordinator.EXPECT().Execute(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil)
89+
s.mockTxFetcher.EXPECT().GetTx(ad.OrderHash).Return(&lighter.LighterTx{
90+
Type: lighter.TxTypeL2Transfer,
91+
Transfer: &lighter.Transfer{
92+
USDCAmount: 2000000,
93+
ToAccountIndex: 3,
94+
},
95+
}, nil)
96+
97+
m := &coreMessage.Message{
98+
Data: ad,
99+
Source: 0,
100+
Destination: 10,
101+
}
102+
prop, err := s.handler.HandleMessage(m)
103+
104+
s.Nil(prop)
105+
s.Nil(err)
106+
107+
err = <-errChn
108+
s.Nil(err)
109+
}
110+
111+
func (s *LighterMessageHandlerTestSuite) Test_HandleMessage_InvalidTxType() {
112+
s.mockCommunication.EXPECT().Broadcast(
113+
gomock.Any(),
114+
gomock.Any(),
115+
comm.LighterMsg,
116+
"lighter",
117+
).Return(nil)
118+
p, _ := pstoremem.NewPeerstore()
119+
s.mockHost.EXPECT().Peerstore().Return(p)
120+
121+
errChn := make(chan error, 1)
122+
ad := &message.LighterData{
123+
ErrChn: errChn,
124+
Nonce: big.NewInt(101),
125+
LiquidityPool: common.HexToAddress("0xbe526bA5d1ad94cC59D7A79d99A59F607d31A657"),
126+
Caller: common.HexToAddress("0xde526bA5d1ad94cC59D7A79d99A59F607d31A657"),
127+
OrderHash: "orderHash",
128+
}
129+
s.mockTxFetcher.EXPECT().GetTx(ad.OrderHash).Return(&lighter.LighterTx{
130+
Type: lighter.TxTypeL2Withdraw,
131+
Transfer: &lighter.Transfer{
132+
USDCAmount: 2000000,
133+
ToAccountIndex: 3,
134+
},
135+
}, nil)
136+
137+
m := &coreMessage.Message{
138+
Data: ad,
139+
Source: 0,
140+
Destination: 10,
141+
}
142+
prop, err := s.handler.HandleMessage(m)
143+
144+
s.Nil(prop)
145+
s.NotNil(err)
146+
147+
err = <-errChn
148+
s.NotNil(err)
149+
}
150+
151+
func (s *LighterMessageHandlerTestSuite) Test_HandleMessage_InvalidAccount() {
152+
s.mockCommunication.EXPECT().Broadcast(
153+
gomock.Any(),
154+
gomock.Any(),
155+
comm.LighterMsg,
156+
"lighter",
157+
).Return(nil)
158+
p, _ := pstoremem.NewPeerstore()
159+
s.mockHost.EXPECT().Peerstore().Return(p)
160+
161+
errChn := make(chan error, 1)
162+
ad := &message.LighterData{
163+
ErrChn: errChn,
164+
Nonce: big.NewInt(101),
165+
LiquidityPool: common.HexToAddress("0xbe526bA5d1ad94cC59D7A79d99A59F607d31A657"),
166+
Caller: common.HexToAddress("0xde526bA5d1ad94cC59D7A79d99A59F607d31A657"),
167+
OrderHash: "orderHash",
168+
}
169+
s.mockTxFetcher.EXPECT().GetTx(ad.OrderHash).Return(&lighter.LighterTx{
170+
Type: lighter.TxTypeL2Transfer,
171+
Transfer: &lighter.Transfer{
172+
USDCAmount: 2000000,
173+
ToAccountIndex: 5,
174+
},
175+
}, nil)
176+
177+
m := &coreMessage.Message{
178+
Data: ad,
179+
Source: 0,
180+
Destination: 10,
181+
}
182+
prop, err := s.handler.HandleMessage(m)
183+
184+
s.Nil(prop)
185+
s.NotNil(err)
186+
187+
err = <-errChn
188+
s.NotNil(err)
189+
}
190+
191+
func (s *LighterMessageHandlerTestSuite) Test_HandleMessage_MissingTx() {
192+
s.mockCommunication.EXPECT().Broadcast(
193+
gomock.Any(),
194+
gomock.Any(),
195+
comm.LighterMsg,
196+
"lighter",
197+
).Return(nil)
198+
p, _ := pstoremem.NewPeerstore()
199+
s.mockHost.EXPECT().Peerstore().Return(p)
200+
201+
errChn := make(chan error, 1)
202+
ad := &message.LighterData{
203+
ErrChn: errChn,
204+
Nonce: big.NewInt(101),
205+
LiquidityPool: common.HexToAddress("0xbe526bA5d1ad94cC59D7A79d99A59F607d31A657"),
206+
Caller: common.HexToAddress("0xde526bA5d1ad94cC59D7A79d99A59F607d31A657"),
207+
OrderHash: "orderHash",
208+
}
209+
s.mockTxFetcher.EXPECT().GetTx(ad.OrderHash).Return(nil, fmt.Errorf("not found"))
210+
211+
m := &coreMessage.Message{
212+
Data: ad,
213+
Source: 0,
214+
Destination: 10,
215+
}
216+
prop, err := s.handler.HandleMessage(m)
217+
218+
s.Nil(prop)
219+
s.NotNil(err)
220+
221+
err = <-errChn
222+
s.NotNil(err)
223+
}

0 commit comments

Comments
 (0)