@@ -173,6 +173,7 @@ contract SpokeConfigTest is SpokeBase {
173173
174174 assertEq (spoke1.getReserveConfig (reserveId), newReserveConfig);
175175 assertEq (_getLatestDynamicReserveConfig (spoke1, reserveId), newDynReserveConfig);
176+ assertEq (spoke1.getReserveId (address (hub1), usdzAssetId), reserveId);
176177 }
177178
178179 function test_addReserve_fuzz_revertsWith_AssetNotListed () public {
@@ -300,6 +301,110 @@ contract SpokeConfigTest is SpokeBase {
300301 );
301302 }
302303
304+ function test_getReserveId_fuzz (uint256 reserveId ) public view {
305+ reserveId = bound (reserveId, 0 , spoke1.getReserveCount () - 1 );
306+ uint256 assetId = spoke1.getReserve (reserveId).assetId;
307+
308+ uint256 returnedId = spoke1.getReserveId (address (hub1), assetId);
309+ assertEq (returnedId, getReserveIdByAssetId (spoke1, hub1, assetId));
310+ }
311+
312+ function test_getReserveId_fuzz_multipleHubs (uint256 reserveId ) public {
313+ (IHub hub2 , ) = hub2Fixture ();
314+ (IHub hub3 , ) = hub3Fixture ();
315+
316+ vm.startPrank (ADMIN);
317+ spoke1.addReserve (
318+ address (hub2),
319+ 0 ,
320+ _deployMockPriceFeed (spoke1, 2000e8 ),
321+ spokeInfo[spoke1].weth.reserveConfig,
322+ spokeInfo[spoke1].weth.dynReserveConfig
323+ );
324+ spoke1.addReserve (
325+ address (hub2),
326+ 1 ,
327+ _deployMockPriceFeed (spoke1, 2000e8 ),
328+ spokeInfo[spoke1].usdx.reserveConfig,
329+ spokeInfo[spoke1].usdx.dynReserveConfig
330+ );
331+ spoke1.addReserve (
332+ address (hub2),
333+ 2 ,
334+ _deployMockPriceFeed (spoke1, 2000e8 ),
335+ spokeInfo[spoke1].dai.reserveConfig,
336+ spokeInfo[spoke1].dai.dynReserveConfig
337+ );
338+ spoke1.addReserve (
339+ address (hub2),
340+ 3 ,
341+ _deployMockPriceFeed (spoke1, 2000e8 ),
342+ spokeInfo[spoke1].wbtc.reserveConfig,
343+ spokeInfo[spoke1].wbtc.dynReserveConfig
344+ );
345+
346+ spoke1.addReserve (
347+ address (hub3),
348+ 0 ,
349+ _deployMockPriceFeed (spoke1, 2000e8 ),
350+ spokeInfo[spoke1].dai.reserveConfig,
351+ spokeInfo[spoke1].dai.dynReserveConfig
352+ );
353+ spoke1.addReserve (
354+ address (hub3),
355+ 1 ,
356+ _deployMockPriceFeed (spoke1, 2000e8 ),
357+ spokeInfo[spoke1].usdx.reserveConfig,
358+ spokeInfo[spoke1].usdx.dynReserveConfig
359+ );
360+ spoke1.addReserve (
361+ address (hub3),
362+ 2 ,
363+ _deployMockPriceFeed (spoke1, 2000e8 ),
364+ spokeInfo[spoke1].wbtc.reserveConfig,
365+ spokeInfo[spoke1].wbtc.dynReserveConfig
366+ );
367+ spoke1.addReserve (
368+ address (hub3),
369+ 3 ,
370+ _deployMockPriceFeed (spoke1, 2000e8 ),
371+ spokeInfo[spoke1].weth.reserveConfig,
372+ spokeInfo[spoke1].weth.dynReserveConfig
373+ );
374+
375+ IHub.SpokeConfig memory spokeConfig = IHub.SpokeConfig ({
376+ active: true ,
377+ halted: false ,
378+ addCap: Constants.MAX_ALLOWED_SPOKE_CAP,
379+ drawCap: Constants.MAX_ALLOWED_SPOKE_CAP,
380+ riskPremiumThreshold: Constants.MAX_ALLOWED_COLLATERAL_RISK
381+ });
382+
383+ hub2.addSpoke (0 , address (spoke1), spokeConfig);
384+ hub2.addSpoke (1 , address (spoke1), spokeConfig);
385+ hub2.addSpoke (2 , address (spoke1), spokeConfig);
386+ hub2.addSpoke (3 , address (spoke1), spokeConfig);
387+
388+ hub3.addSpoke (0 , address (spoke1), spokeConfig);
389+ hub3.addSpoke (1 , address (spoke1), spokeConfig);
390+ hub3.addSpoke (2 , address (spoke1), spokeConfig);
391+ hub3.addSpoke (3 , address (spoke1), spokeConfig);
392+ vm.stopPrank ();
393+
394+ reserveId = bound (reserveId, 0 , spoke1.getReserveCount () - 1 );
395+ uint256 assetId = spoke1.getReserve (reserveId).assetId;
396+ address hub = address (spoke1.getReserve (reserveId).hub);
397+
398+ uint256 returnedId = spoke1.getReserveId (hub, assetId);
399+ assertEq (returnedId, getReserveIdByAssetId (spoke1, IHub (hub), assetId));
400+ }
401+
402+ function test_getReserveId_fuzz_revertsWith_ReserveNotListed (uint256 assetId ) public {
403+ assetId = bound (assetId, hub1.getAssetCount (), UINT256_MAX);
404+ vm.expectRevert (ISpoke.ReserveNotListed.selector , address (spoke1));
405+ spoke1.getReserveId (address (hub1), assetId);
406+ }
407+
303408 function test_updateLiquidationConfig_targetHealthFactor () public {
304409 uint128 newTargetHealthFactor = HEALTH_FACTOR_LIQUIDATION_THRESHOLD + 1 ;
305410
0 commit comments