diff --git a/services/rfq/relayer/inventory/manager_test.go b/services/rfq/relayer/inventory/manager_test.go index 84444a2c5f..2f3ffbd3c6 100644 --- a/services/rfq/relayer/inventory/manager_test.go +++ b/services/rfq/relayer/inventory/manager_test.go @@ -183,3 +183,67 @@ func (i *InventoryTestSuite) TestGetRebalance() { i.NoError(err) i.Nil(rebalance) } + +func (i *InventoryTestSuite) TestHasSufficientGas() { + var wg sync.WaitGroup + wg.Add(len(i.backends)) + for _, backend := range i.backends { + go func(backend backends.SimulatedTestBackend) { + defer wg.Done() + + // fund the relayer + mintMulAmount := big.NewInt(int64(gofakeit.Number(0, 6))) + mintAmount := new(big.Int).Mul(mintMulAmount, big.NewInt(params.Ether)) + + metadata, usdt := i.manager.GetUSDT(i.GetTestContext(), backend) + _ = metadata + _ = usdt + _ = mintAmount + }(backend) + } + wg.Wait() + + // TODO: these chain IDs are hardcoded; should probably be assigned in suite as fields + origin := 1 + dest := 2 + + getManager := func(gasThresholds []*big.Int) inventory.Manager { + cfg := relconfig.Config{ + Chains: map[int]relconfig.ChainConfig{}, + } + for idx, chainID := range []int{origin, dest} { + backend := i.backends[chainID] + handle, _ := i.manager.GetMockERC20(i.GetTestContext(), backend) + cfg.Chains[int(backend.GetChainID())] = relconfig.ChainConfig{ + MinGasToken: gasThresholds[idx].String(), + Tokens: map[string]relconfig.TokenConfig{ + "USDC": { + Address: handle.Address().String(), + Decimals: 6, + }, + }, + } + } + + im, err := inventory.NewInventoryManager(i.GetTestContext(), omnirpcClient.NewOmnirpcClient(i.omnirpcURL, metrics.Get()), metrics.Get(), cfg, i.relayer.Address(), nil, i.db) + i.Require().NoError(err) + return im + } + + im := getManager([]*big.Int{big.NewInt(params.Ether), big.NewInt(params.Ether)}) + sufficient, err := im.HasSufficientGas(i.GetTestContext(), origin, dest) + i.NoError(err) + i.True(sufficient) + + // multiply big int to avoid overflow + largeBalance := new(big.Int).Mul(big.NewInt(params.Ether), big.NewInt(100)) + im = getManager([]*big.Int{largeBalance, big.NewInt(params.Ether)}) + sufficient, err = im.HasSufficientGas(i.GetTestContext(), origin, dest) + i.NoError(err) + i.False(sufficient) + + im = getManager([]*big.Int{big.NewInt(params.Ether), largeBalance}) + sufficient, err = im.HasSufficientGas(i.GetTestContext(), origin, dest) + i.NoError(err) + i.False(sufficient) +}