@@ -8,6 +8,7 @@ package postgres
88
99import (
1010 "context"
11+ "fmt"
1112 "math/big"
1213 "testing"
1314 "time"
@@ -49,8 +50,10 @@ func TestClaimPendingTransactions_Atomic(t *testing.T) {
4950 oldTime := now .Add (- 10 * time .Minute )
5051
5152 // Add 5 pending transactions
53+ txIDs := make ([]string , 0 , 5 )
5254 for i := range 5 {
5355 txID := "tx" + string (rune ('1' + i ))
56+ txIDs = append (txIDs , txID )
5457 err = aw .AddTokenRequest (ctx , txID , []byte ("request" ), nil , nil , []byte ("hash" ))
5558 require .NoError (t , err )
5659
@@ -68,6 +71,7 @@ func TestClaimPendingTransactions_Atomic(t *testing.T) {
6871
6972 err = aw .Commit ()
7073 require .NoError (t , err )
74+ ageRequests (t , ctx , store1 , oldTime , txIDs ... )
7175
7276 // Both instances try to claim the same transactions
7377 params := tokensdriver.RecoveryClaimParams {
@@ -128,6 +132,7 @@ func TestClaimPendingTransactions_Lease(t *testing.T) {
128132
129133 err = aw .Commit ()
130134 require .NoError (t , err )
135+ ageRequests (t , ctx , store , oldTime , txID )
131136
132137 // Claim with very short lease
133138 params := tokensdriver.RecoveryClaimParams {
@@ -196,6 +201,7 @@ func TestClaimPendingTransactions_Idempotent(t *testing.T) {
196201
197202 err = aw .Commit ()
198203 require .NoError (t , err )
204+ ageRequests (t , ctx , store , oldTime , txID )
199205
200206 // Claim transaction
201207 params := tokensdriver.RecoveryClaimParams {
@@ -238,8 +244,10 @@ func TestClaimPendingTransactions_Limit(t *testing.T) {
238244 now := time .Now ().UTC ()
239245 oldTime := now .Add (- 10 * time .Minute )
240246
247+ txIDs := make ([]string , 0 , 10 )
241248 for i := range 10 {
242249 txID := "tx" + string (rune ('0' + i ))
250+ txIDs = append (txIDs , txID )
243251 err = aw .AddTokenRequest (ctx , txID , []byte ("request" ), nil , nil , []byte ("hash" ))
244252 require .NoError (t , err )
245253
@@ -257,6 +265,9 @@ func TestClaimPendingTransactions_Limit(t *testing.T) {
257265
258266 err = aw .Commit ()
259267 require .NoError (t , err )
268+ for i , txID := range txIDs {
269+ ageRequests (t , ctx , store , oldTime .Add (time .Duration (i )* time .Second ), txID )
270+ }
260271
261272 // Claim with limit of 3
262273 params := tokensdriver.RecoveryClaimParams {
@@ -317,6 +328,7 @@ func TestReleaseRecoveryClaim(t *testing.T) {
317328
318329 err = aw .Commit ()
319330 require .NoError (t , err )
331+ ageRequests (t , ctx , store , oldTime , txID )
320332
321333 // Claim transaction
322334 params := tokensdriver.RecoveryClaimParams {
@@ -381,6 +393,7 @@ func TestReleaseRecoveryClaim_WrongOwner(t *testing.T) {
381393
382394 err = aw .Commit ()
383395 require .NoError (t , err )
396+ ageRequests (t , ctx , store , oldTime , txID )
384397
385398 // Claim transaction
386399 params := tokensdriver.RecoveryClaimParams {
@@ -427,8 +440,10 @@ func TestCleanupExpiredClaims(t *testing.T) {
427440 now := time .Now ().UTC ()
428441 oldTime := now .Add (- 10 * time .Minute )
429442
443+ txIDs := make ([]string , 0 , 3 )
430444 for i := range 3 {
431445 txID := "tx" + string (rune ('1' + i ))
446+ txIDs = append (txIDs , txID )
432447 err = aw .AddTokenRequest (ctx , txID , []byte ("request" ), nil , nil , []byte ("hash" ))
433448 require .NoError (t , err )
434449
@@ -446,6 +461,7 @@ func TestCleanupExpiredClaims(t *testing.T) {
446461
447462 err = aw .Commit ()
448463 require .NoError (t , err )
464+ ageRequests (t , ctx , store , oldTime , txIDs ... )
449465
450466 // Claim with very short lease
451467 params := tokensdriver.RecoveryClaimParams {
@@ -473,3 +489,18 @@ func TestCleanupExpiredClaims(t *testing.T) {
473489 require .NoError (t , err )
474490 require .Len (t , claimed , 3 , "Should be able to claim after cleanup" )
475491}
492+
493+ func ageRequests (t * testing.T , ctx context.Context , store * TransactionStore , storedAt time.Time , txIDs ... string ) {
494+ t .Helper ()
495+
496+ // #nosec G201 -- table name comes from the test-created store.
497+ query := fmt .Sprintf ("UPDATE %s SET stored_at = $1 WHERE tx_id = $2" , store .tables .Requests )
498+ for _ , txID := range txIDs {
499+ result , err := store .writeDB .ExecContext (ctx , query , storedAt , txID )
500+ require .NoError (t , err )
501+
502+ rowsAffected , err := result .RowsAffected ()
503+ require .NoError (t , err )
504+ require .EqualValues (t , 1 , rowsAffected )
505+ }
506+ }
0 commit comments