@@ -60,11 +60,9 @@ describe('reprovider', () => {
6060 contentRouting,
6161 threshold : 100 ,
6262 validity : 200 ,
63- interval : 100 ,
63+ interval : 200 ,
6464 operationMetrics : { }
6565 } )
66-
67- await start ( reprovider )
6866 } )
6967
7068 afterEach ( async ( ) => {
@@ -74,6 +72,8 @@ describe('reprovider', () => {
7472 it ( 'should reprovide' , async ( ) => {
7573 const cid = CID . parse ( 'QmZ8eiDPqQqWR17EPxiwCDgrKPVhCHLcyn6xSCNpFAdAZb' )
7674
75+ await start ( reprovider )
76+
7777 await providers . addProvider ( cid , components . peerId )
7878
7979 expect ( contentRouting . provide ) . to . have . property ( 'callCount' , 0 )
@@ -88,6 +88,8 @@ describe('reprovider', () => {
8888 it ( 'should cancel reprovide' , async ( ) => {
8989 const cid = CID . parse ( 'QmZ8eiDPqQqWR17EPxiwCDgrKPVhCHLcyn6xSCNpFAdAZb' )
9090
91+ await start ( reprovider )
92+
9193 await providers . addProvider ( cid , components . peerId )
9294
9395 expect ( contentRouting . provide ) . to . have . property ( 'callCount' , 0 )
@@ -110,6 +112,9 @@ describe('reprovider', () => {
110112
111113 it ( 'should remove expired provider records' , async ( ) => {
112114 const cid = CID . parse ( 'QmdfTbBqBPQ7VNxZEYEj14VmRuZBkqFbiwReogJgS1zR1n' )
115+
116+ await start ( reprovider )
117+
113118 await Promise . all ( [
114119 providers . addProvider ( cid , peers [ 0 ] . peerId ) ,
115120 providers . addProvider ( cid , peers [ 1 ] . peerId )
@@ -121,9 +126,67 @@ describe('reprovider', () => {
121126 expect ( provs [ 0 ] . toString ( ) ) . to . be . equal ( peers [ 0 ] . peerId . toString ( ) )
122127 expect ( provs [ 1 ] . toString ( ) ) . to . be . deep . equal ( peers [ 1 ] . peerId . toString ( ) )
123128
124- await delay ( 400 )
129+ await delay ( 450 )
125130
126131 const provsAfter = await providers . getProviders ( cid )
127132 expect ( provsAfter ) . to . have . length ( 0 )
128133 } )
134+
135+ it ( 'should delete expired records from other peers but preserve own expired records' , async ( ) => {
136+ const cid = CID . parse ( 'QmdfTbBqBPQ7VNxZEYEj14VmRuZBkqFbiwReogJgS1zR1n' )
137+
138+ await start ( reprovider )
139+
140+ // Add provider records - one from us, one from another peer
141+ await providers . addProvider ( cid , components . peerId )
142+ await providers . addProvider ( cid , peers [ 0 ] . peerId )
143+
144+ const provsBefore = await providers . getProviders ( cid )
145+ expect ( provsBefore ) . to . have . length ( 2 )
146+
147+ // Wait for records to expire (validity is 200ms)
148+ await delay ( 250 )
149+
150+ // Trigger reprovide cycle to process expired records
151+ await pEvent ( reprovider , 'reprovide:start' )
152+ await pEvent ( reprovider , 'reprovide:end' )
153+
154+ const provsAfter = await providers . getProviders ( cid )
155+
156+ // Only our own record should remain, other peer's expired record should be deleted
157+ expect ( provsAfter ) . to . have . length ( 1 )
158+ expect ( provsAfter [ 0 ] . toString ( ) ) . to . equal ( components . peerId . toString ( ) )
159+ } )
160+
161+ describe ( 'shouldReprovide' , ( ) => {
162+ it ( 'should return false for non-self providers' , ( ) => {
163+ const expires = Date . now ( ) + 50
164+ const result = ( reprovider as any ) . shouldReprovide ( false , expires )
165+ expect ( result ) . to . be . false ( )
166+ } )
167+
168+ it ( 'should return true when within reprovide threshold before expiration' , ( ) => {
169+ const expires = Date . now ( ) + 50
170+ const result = ( reprovider as any ) . shouldReprovide ( true , expires )
171+ expect ( result ) . to . be . true ( )
172+ } )
173+
174+ it ( 'should return true when within reprovide threshold after expiration' , ( ) => {
175+ const expires = Date . now ( ) - 50
176+ const result = ( reprovider as any ) . shouldReprovide ( true , expires )
177+ expect ( result ) . to . be . true ( )
178+ } )
179+
180+ it ( 'should return false when outside reprovide threshold before expiration' , ( ) => {
181+ const expires = Date . now ( ) + 150
182+ const result = ( reprovider as any ) . shouldReprovide ( true , expires )
183+ expect ( result ) . to . be . false ( )
184+ } )
185+
186+ it ( 'should return true when outside reprovide threshold after expiration' , ( ) => {
187+ const expires = Date . now ( ) - 150
188+ const result = ( reprovider as any ) . shouldReprovide ( true , expires )
189+ expect ( result ) . to . be . true ( )
190+ } )
191+ } )
129192} )
0 commit comments