Skip to content

Commit 08111cb

Browse files
committed
TestPendingRefunds
1 parent 72e6f9e commit 08111cb

File tree

3 files changed

+108
-11
lines changed

3 files changed

+108
-11
lines changed

p2p/pkg/depositmanager/deposit.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ type Store interface {
2828
RefundBalanceIfExists(bidder common.Address, provider common.Address, amount *big.Int) error
2929
}
3030

31-
type pendingRefund struct {
32-
bidder common.Address
33-
provider common.Address
34-
amount *big.Int
31+
type PendingRefund struct {
32+
Bidder common.Address
33+
Provider common.Address
34+
Amount *big.Int
3535
}
3636

3737
type CommitmentDigest [32]byte
@@ -44,7 +44,7 @@ type DepositManager struct {
4444
withdrawRequests chan *bidderregistry.BidderregistryWithdrawalRequested
4545
withdrawals chan *bidderregistry.BidderregistryBidderWithdrawal
4646
logger *slog.Logger
47-
pendingRefunds *lru.Cache[CommitmentDigest, pendingRefund]
47+
pendingRefunds *lru.Cache[CommitmentDigest, PendingRefund]
4848
pendingRefundsMu sync.RWMutex
4949
}
5050

@@ -54,7 +54,7 @@ func NewDepositManager(
5454
bidderRegistry BidderRegistryContract,
5555
logger *slog.Logger,
5656
) *DepositManager {
57-
pendingRefunds, err := lru.New[CommitmentDigest, pendingRefund](1000)
57+
pendingRefunds, err := lru.New[CommitmentDigest, PendingRefund](1000)
5858
if err != nil {
5959
logger.Error("failed to create pending refunds cache", "error", err)
6060
pendingRefunds = nil
@@ -305,10 +305,10 @@ func (dm *DepositManager) AddPendingRefund(
305305
) {
306306
dm.pendingRefundsMu.Lock()
307307
defer dm.pendingRefundsMu.Unlock()
308-
evicted := dm.pendingRefunds.Add(commitmentDigest, pendingRefund{
309-
bidder: bidder,
310-
provider: provider,
311-
amount: amount,
308+
evicted := dm.pendingRefunds.Add(commitmentDigest, PendingRefund{
309+
Bidder: bidder,
310+
Provider: provider,
311+
Amount: amount,
312312
})
313313
if evicted {
314314
dm.logger.Warn("evicted pending refund. Tracker may not be working properly", "commitmentDigest", commitmentDigest)
@@ -329,7 +329,7 @@ func (dm *DepositManager) ApplyPendingRefund(
329329
if !removed {
330330
return status.Errorf(codes.Internal, "failed to remove pending refund from cache")
331331
}
332-
return dm.store.RefundBalanceIfExists(pendingRefund.bidder, pendingRefund.provider, pendingRefund.amount)
332+
return dm.store.RefundBalanceIfExists(pendingRefund.Bidder, pendingRefund.Provider, pendingRefund.Amount)
333333
}
334334

335335
func (dm *DepositManager) DropPendingRefund(

p2p/pkg/depositmanager/deposit_test.go

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,3 +351,95 @@ func publishBidderWithdrawal(
351351

352352
return nil
353353
}
354+
355+
func TestPendingRefunds(t *testing.T) {
356+
t.Parallel()
357+
358+
logger := util.NewTestLogger(io.Discard)
359+
st := depositstore.New(inmemstorage.New())
360+
dm := depositmanager.NewDepositManager(st, nil, nil, logger)
361+
362+
digest1 := depositmanager.CommitmentDigest{
363+
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
364+
}
365+
366+
pendingRefund, ok := dm.GetPendingRefund(digest1)
367+
if ok {
368+
t.Fatal("expected no pending refunds")
369+
}
370+
if pendingRefund != (depositmanager.PendingRefund{}) {
371+
t.Fatal("expected zeroed pending refund")
372+
}
373+
374+
dm.AddPendingRefund(digest1, common.HexToAddress("0x123"), common.HexToAddress("0x456"), big.NewInt(100))
375+
376+
pendingRefund, ok = dm.GetPendingRefund(digest1)
377+
if !ok {
378+
t.Fatal("expected pending refund")
379+
}
380+
if pendingRefund.Bidder != common.HexToAddress("0x123") {
381+
t.Fatal("expected bidder 0x123")
382+
}
383+
if pendingRefund.Provider != common.HexToAddress("0x456") {
384+
t.Fatal("expected provider 0x456")
385+
}
386+
if pendingRefund.Amount.Cmp(big.NewInt(100)) != 0 {
387+
t.Fatal("expected amount 100")
388+
}
389+
390+
err := st.SetBalance(common.HexToAddress("0x123"), common.HexToAddress("0x456"), big.NewInt(77))
391+
if err != nil {
392+
t.Fatal(err)
393+
}
394+
395+
balance, err := st.GetBalance(common.HexToAddress("0x123"), common.HexToAddress("0x456"))
396+
if err != nil {
397+
t.Fatal(err)
398+
}
399+
if balance.Cmp(big.NewInt(77)) != 0 {
400+
t.Fatal("expected balance 77")
401+
}
402+
403+
err = dm.ApplyPendingRefund(digest1)
404+
if err != nil {
405+
t.Fatal(err)
406+
}
407+
408+
balance, err = st.GetBalance(common.HexToAddress("0x123"), common.HexToAddress("0x456"))
409+
if err != nil {
410+
t.Fatal(err)
411+
}
412+
if balance.Cmp(big.NewInt(177)) != 0 {
413+
t.Fatal("expected balance 177")
414+
}
415+
416+
digest2 := depositmanager.CommitmentDigest{
417+
33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
418+
}
419+
420+
dm.AddPendingRefund(digest2, common.HexToAddress("0x123"), common.HexToAddress("0x456"), big.NewInt(302))
421+
422+
pendingRefund, ok = dm.GetPendingRefund(digest2)
423+
if !ok {
424+
t.Fatal("expected pending refund")
425+
}
426+
if pendingRefund.Bidder != common.HexToAddress("0x123") {
427+
t.Fatal("expected bidder 0x123")
428+
}
429+
if pendingRefund.Provider != common.HexToAddress("0x456") {
430+
t.Fatal("expected provider 0x456")
431+
}
432+
if pendingRefund.Amount.Cmp(big.NewInt(302)) != 0 {
433+
t.Fatal("expected amount 302")
434+
}
435+
436+
err = dm.DropPendingRefund(digest2)
437+
if err != nil {
438+
t.Fatal(err)
439+
}
440+
441+
pendingRefund, ok = dm.GetPendingRefund(digest2)
442+
if ok {
443+
t.Fatal("expected no pending refund")
444+
}
445+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package depositmanager
2+
3+
func (d *DepositManager) GetPendingRefund(commitmentDigest CommitmentDigest) (PendingRefund, bool) {
4+
return d.pendingRefunds.Get(commitmentDigest)
5+
}

0 commit comments

Comments
 (0)