Skip to content

Commit fc7fc89

Browse files
committed
basic vs base test
1 parent 7ceecb9 commit fc7fc89

File tree

4 files changed

+144
-139
lines changed

4 files changed

+144
-139
lines changed

src/testing/WormholeRelayerTest.sol

Lines changed: 119 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -37,20 +37,9 @@ struct ActiveFork {
3737

3838
abstract contract WormholeRelayerTest is Test {
3939
/**
40-
* @dev virtual function to initialize source chain before each test
41-
*/
42-
function setUpSource() public virtual;
43-
44-
/**
45-
* @dev virtual function to initialize target chain before each test
40+
* @dev virtual function to initialize active forks before each test
4641
*/
47-
function setUpTarget() public virtual;
48-
49-
/**
50-
* @dev virtual function to initialize other active forks before each test
51-
* Note: not called for source/target forks
52-
*/
53-
function setUpOther(ActiveFork memory fork) public virtual {}
42+
function setUpFork(ActiveFork memory fork) public virtual;
5443

5544
uint256 constant DEVNET_GUARDIAN_PK = 0xcfb12303a19cde580bb4dd771639b0d26bc68353645571a8cff516ab2ee113a0;
5645

@@ -64,40 +53,17 @@ abstract contract WormholeRelayerTest is Test {
6453

6554
MockOffchainRelayer public mockOffchainRelayer;
6655

67-
/*
68-
* aliases for activeForks
69-
*/
70-
71-
ChainInfo public sourceChainInfo;
72-
ChainInfo public targetChainInfo;
73-
74-
uint16 public sourceChain;
75-
uint16 public targetChain;
76-
77-
uint256 public sourceFork;
78-
uint256 public targetFork;
79-
80-
IWormholeRelayer public relayerSource;
81-
ITokenBridge public tokenBridgeSource;
82-
IWormhole public wormholeSource;
83-
84-
IWormholeRelayer public relayerTarget;
85-
ITokenBridge public tokenBridgeTarget;
86-
IWormhole public wormholeTarget;
87-
88-
WormholeSimulator public guardianSource;
89-
WormholeSimulator public guardianTarget;
90-
91-
/*
92-
* end activeForks aliases
93-
*/
94-
9556
constructor() {
9657
initChainInfo();
97-
setTestnetForkChains(6, 14);
58+
59+
// set default active forks. These can be overridden in your test
60+
ChainInfo[] memory forks = new ChainInfo[](2);
61+
forks[0] = chainInfosTestnet[6]; // fuji avax
62+
forks[1] = chainInfosTestnet[14]; // alfajores celo
63+
setActiveForks(forks);
9864
}
9965

100-
function setActiveForks(ChainInfo[] memory chainInfos) public {
66+
function _setActiveForks(ChainInfo[] memory chainInfos) internal virtual {
10167
if (chainInfos.length < 2) {
10268
console.log("setActiveForks: 2 or more forks must be specified");
10369
revert("setActiveForks: 2 or more forks must be specified");
@@ -117,34 +83,17 @@ abstract contract WormholeRelayerTest is Test {
11783
guardian: WormholeSimulator(address(0))
11884
});
11985
}
120-
sourceChainInfo = chainInfos[0];
121-
sourceChain = sourceChainInfo.chainId;
122-
relayerSource = sourceChainInfo.relayer;
123-
tokenBridgeSource = sourceChainInfo.tokenBridge;
124-
wormholeSource = sourceChainInfo.wormhole;
125-
126-
targetChainInfo = chainInfos[1];
127-
targetChain = targetChainInfo.chainId;
128-
relayerTarget = targetChainInfo.relayer;
129-
tokenBridgeTarget = targetChainInfo.tokenBridge;
130-
wormholeTarget = targetChainInfo.wormhole;
13186
}
13287

133-
function setTestnetForkChains(uint16 _sourceChain, uint16 _targetChain) public {
134-
ChainInfo[] memory forks = new ChainInfo[](2);
135-
forks[0] = chainInfosTestnet[_sourceChain];
136-
forks[1] = chainInfosTestnet[_targetChain];
137-
setActiveForks(forks);
88+
function setActiveForks(ChainInfo[] memory chainInfos) public virtual {
89+
_setActiveForks(chainInfos);
13890
}
13991

140-
function setMainnetForkChains(uint16 _sourceChain, uint16 _targetChain) public {
141-
ChainInfo[] memory forks = new ChainInfo[](2);
142-
forks[0] = chainInfosMainnet[_sourceChain];
143-
forks[1] = chainInfosMainnet[_targetChain];
144-
setActiveForks(forks);
92+
function setUp() public virtual {
93+
_setUp();
14594
}
14695

147-
function setUp() public {
96+
function _setUp() internal {
14897
// create fork and guardian for each active fork
14998
for (uint256 i = 0; i < activeForksList.length; ++i) {
15099
uint16 chainId = activeForksList[i];
@@ -155,27 +104,17 @@ abstract contract WormholeRelayerTest is Test {
155104
DEVNET_GUARDIAN_PK
156105
);
157106
}
158-
// set up aliases for the source and target forks
159-
guardianSource = activeForks[sourceChain].guardian;
160-
guardianTarget = activeForks[targetChain].guardian;
161-
sourceFork = activeForks[sourceChain].fork;
162-
targetFork = activeForks[targetChain].fork;
163107

164108
// run setUp virtual functions for each fork
165-
vm.selectFork(sourceFork);
166-
setUpSource();
167-
vm.selectFork(targetFork);
168-
setUpTarget();
169109
for (uint256 i = 0; i < activeForksList.length; ++i) {
170-
uint16 chainId = activeForksList[i];
171-
if (chainId != sourceChain && chainId != targetChain) {
172-
vm.selectFork(activeForks[chainId].fork);
173-
setUpOther(activeForks[chainId]);
174-
}
110+
ActiveFork memory fork = activeForks[activeForksList[i]];
111+
vm.selectFork(fork.fork);
112+
setUpFork(fork);
175113
}
176114

177-
vm.selectFork(sourceFork);
178-
mockOffchainRelayer = new MockOffchainRelayer(address(wormholeSource), address(guardianSource), vm);
115+
ActiveFork memory firstFork = activeForks[activeForksList[0]];
116+
vm.selectFork(firstFork.fork);
117+
mockOffchainRelayer = new MockOffchainRelayer(address(firstFork.wormhole), address(firstFork.guardian), vm);
179118
// register all active forks with the 'offchain' relayer
180119
for (uint256 i = 0; i < activeForksList.length; ++i) {
181120
ActiveFork storage fork = activeForks[activeForksList[i]];
@@ -366,3 +305,102 @@ abstract contract WormholeRelayerTest is Test {
366305

367306
receive() external payable {}
368307
}
308+
309+
abstract contract WormholeRelayerBasicTest is WormholeRelayerTest {
310+
/**
311+
* @dev virtual function to initialize source chain before each test
312+
*/
313+
function setUpSource() public virtual;
314+
315+
/**
316+
* @dev virtual function to initialize target chain before each test
317+
*/
318+
function setUpTarget() public virtual;
319+
320+
/**
321+
* @dev virtual function to initialize other active forks before each test
322+
* Note: not called for source/target forks
323+
*/
324+
function setUpOther(ActiveFork memory fork) public virtual {}
325+
326+
/*
327+
* aliases for activeForks
328+
*/
329+
330+
ChainInfo public sourceChainInfo;
331+
ChainInfo public targetChainInfo;
332+
333+
uint16 public sourceChain;
334+
uint16 public targetChain;
335+
336+
uint256 public sourceFork;
337+
uint256 public targetFork;
338+
339+
IWormholeRelayer public relayerSource;
340+
ITokenBridge public tokenBridgeSource;
341+
IWormhole public wormholeSource;
342+
343+
IWormholeRelayer public relayerTarget;
344+
ITokenBridge public tokenBridgeTarget;
345+
IWormhole public wormholeTarget;
346+
347+
WormholeSimulator public guardianSource;
348+
WormholeSimulator public guardianTarget;
349+
350+
/*
351+
* end activeForks aliases
352+
*/
353+
354+
constructor() WormholeRelayerTest() {
355+
setTestnetForkChains(6, 14);
356+
}
357+
358+
function setUp() public override {
359+
_setUp();
360+
// aliases can't be set until after setUp
361+
guardianSource = activeForks[activeForksList[0]].guardian;
362+
guardianTarget = activeForks[activeForksList[1]].guardian;
363+
sourceFork = activeForks[activeForksList[0]].fork;
364+
targetFork = activeForks[activeForksList[1]].fork;
365+
}
366+
367+
function setUpFork(ActiveFork memory fork) public override {
368+
if (fork.chainId == sourceChain) {
369+
setUpSource();
370+
} else if (fork.chainId == targetChain) {
371+
setUpTarget();
372+
} else {
373+
setUpOther(fork);
374+
}
375+
}
376+
377+
function setActiveForks(ChainInfo[] memory chainInfos) public override {
378+
_setActiveForks(chainInfos);
379+
380+
sourceChainInfo = chainInfos[0];
381+
sourceChain = sourceChainInfo.chainId;
382+
relayerSource = sourceChainInfo.relayer;
383+
tokenBridgeSource = sourceChainInfo.tokenBridge;
384+
wormholeSource = sourceChainInfo.wormhole;
385+
386+
targetChainInfo = chainInfos[1];
387+
targetChain = targetChainInfo.chainId;
388+
relayerTarget = targetChainInfo.relayer;
389+
tokenBridgeTarget = targetChainInfo.tokenBridge;
390+
wormholeTarget = targetChainInfo.wormhole;
391+
}
392+
393+
function setTestnetForkChains(uint16 _sourceChain, uint16 _targetChain) public {
394+
ChainInfo[] memory forks = new ChainInfo[](2);
395+
forks[0] = chainInfosTestnet[_sourceChain];
396+
forks[1] = chainInfosTestnet[_targetChain];
397+
setActiveForks(forks);
398+
}
399+
400+
function setMainnetForkChains(uint16 _sourceChain, uint16 _targetChain) public {
401+
ChainInfo[] memory forks = new ChainInfo[](2);
402+
forks[0] = chainInfosMainnet[_sourceChain];
403+
forks[1] = chainInfosMainnet[_targetChain];
404+
setActiveForks(forks);
405+
}
406+
}

test/ChooseChains.t.sol

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ import "../src/Utils.sol";
1414
import "forge-std/console.sol";
1515
import {Toy} from "./Fork.t.sol";
1616

17-
contract ChooseChainsTest is WormholeRelayerTest {
17+
contract ChooseChainsTest is WormholeRelayerBasicTest {
1818
Toy toySource;
1919
Toy toyTarget;
2020

21-
constructor() WormholeRelayerTest() {
21+
constructor() {
2222
setTestnetForkChains(4, 5);
2323
}
2424

test/ExtraChains.t.sol

Lines changed: 22 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,8 @@ import "../src/Utils.sol";
1414
import "forge-std/console.sol";
1515
import {Toy} from "./Fork.t.sol";
1616

17-
contract ChooseChainsTest is WormholeRelayerTest {
18-
Toy toyBSC;
19-
Toy toyPolygon;
20-
Toy toyAvax;
21-
Toy toyCelo;
17+
contract ExtraChainsTest is WormholeRelayerTest {
18+
mapping(uint16 => Toy) toys;
2219

2320
constructor() WormholeRelayerTest() {
2421
ChainInfo[] memory chains = new ChainInfo[](4);
@@ -29,61 +26,31 @@ contract ChooseChainsTest is WormholeRelayerTest {
2926
setActiveForks(chains);
3027
}
3128

32-
function setUpSource() public override {
33-
require(wormholeSource.chainId() == 4);
34-
toyBSC = new Toy(address(relayerSource), address(wormholeSource));
35-
toyBSC.setRegisteredSender(targetChain, toWormholeFormat(address(this)));
29+
function setUpFork(ActiveFork memory fork) public override {
30+
toys[fork.chainId] = new Toy(address(fork.relayer), address(fork.wormhole));
31+
toys[fork.chainId].setRegisteredSender(4, toWormholeFormat(address(this)));
32+
toys[fork.chainId].setRegisteredSender(5, toWormholeFormat(address(this)));
33+
toys[fork.chainId].setRegisteredSender(6, toWormholeFormat(address(this)));
34+
toys[fork.chainId].setRegisteredSender(14, toWormholeFormat(address(this)));
3635
}
3736

38-
function setUpTarget() public override {
39-
require(wormholeTarget.chainId() == 5);
40-
toyPolygon = new Toy(address(relayerTarget), address(wormholeTarget));
41-
toyPolygon.setRegisteredSender(sourceChain, toWormholeFormat(address(this)));
42-
}
43-
44-
function setUpOther(ActiveFork memory fork) public override {
45-
if (fork.chainId == 6) {
46-
toyAvax = new Toy(address(fork.relayer), address(fork.wormhole));
47-
toyAvax.setRegisteredSender(14, toWormholeFormat(address(this)));
48-
} else if (fork.chainId == 14) {
49-
toyCelo = new Toy(address(fork.relayer), address(fork.wormhole));
50-
toyCelo.setRegisteredSender(6, toWormholeFormat(address(this)));
51-
}
52-
}
53-
54-
function testSendMessage() public {
55-
vm.recordLogs();
56-
(uint256 cost,) = relayerSource.quoteEVMDeliveryPrice(targetChain, 1e17, 100_000);
57-
relayerSource.sendPayloadToEvm{value: cost}(targetChain, address(toyPolygon), abi.encode(55), 1e17, 100_000);
58-
performDelivery();
59-
60-
vm.selectFork(targetFork);
61-
require(55 == toyPolygon.payloadReceived());
62-
}
63-
64-
function testSendMessageSource() public {
65-
vm.selectFork(targetFork);
66-
vm.recordLogs();
67-
68-
(uint256 cost,) = relayerTarget.quoteEVMDeliveryPrice(sourceChain, 1e17, 100_000);
69-
relayerTarget.sendPayloadToEvm{value: cost}(sourceChain, address(toyBSC), abi.encode(56), 1e17, 100_000);
70-
performDelivery();
37+
function testSendFromCelo() public {
38+
ActiveFork memory celo = activeForks[14];
7139

72-
vm.selectFork(sourceFork);
73-
require(56 == toyBSC.payloadReceived());
74-
}
40+
for (uint16 i = 4; i < 7; ++i) {
41+
vm.selectFork(celo.fork);
42+
vm.recordLogs();
43+
ActiveFork memory target = activeForks[i];
7544

76-
function testSendMessageOthers() public {
77-
ActiveFork memory avax = activeForks[6];
78-
ActiveFork memory celo = activeForks[14];
79-
vm.selectFork(celo.fork);
80-
vm.recordLogs();
45+
(uint256 cost,) = celo.relayer.quoteEVMDeliveryPrice(target.chainId, 1e17, 100_000);
8146

82-
(uint256 cost,) = celo.relayer.quoteEVMDeliveryPrice(avax.chainId, 1e17, 100_000);
83-
celo.relayer.sendPayloadToEvm{value: cost}(avax.chainId, address(toyAvax), abi.encode(56), 1e17, 100_000);
84-
performDelivery();
47+
celo.relayer.sendPayloadToEvm{value: cost}(
48+
target.chainId, address(toys[target.chainId]), abi.encode(56), 1e17, 100_000
49+
);
50+
performDelivery();
8551

86-
vm.selectFork(avax.fork);
87-
require(56 == toyAvax.payloadReceived());
52+
vm.selectFork(target.fork);
53+
require(56 == toys[target.chainId].payloadReceived());
54+
}
8855
}
8956
}

test/Fork.t.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ contract Toy is Base {
3535
}
3636
}
3737

38-
contract WormholeSDKTest is WormholeRelayerTest {
38+
contract WormholeSDKTest is WormholeRelayerBasicTest {
3939
Toy toySource;
4040
Toy toyTarget;
4141

0 commit comments

Comments
 (0)