@@ -4,6 +4,7 @@ const Corestore = require('corestore')
44const Hyperdrive = require ( 'hyperdrive' )
55const Hyperswarm = require ( 'hyperswarm' )
66const hypercoreid = require ( 'hypercore-id-encoding' )
7+ const Localdrive = require ( 'localdrive' )
78const Helper = require ( './helper' )
89
910test ( 'pear seed basic stage and seed' , async function ( { ok, plan, comment, teardown, timeout } ) {
@@ -109,3 +110,51 @@ test('pear seed announces, join, drop', async function ({
109110 const dropped = await until [ 'peer-remove' ]
110111 ok ( dropped , 'peer drops' )
111112} )
113+
114+ test ( 'pear seed fully syncs db and blobs cores' , async function ( {
115+ is,
116+ plan,
117+ comment,
118+ teardown,
119+ timeout,
120+ tmp
121+ } ) {
122+ timeout ( 180000 )
123+ plan ( 2 )
124+
125+ const sourceStore = new Corestore ( await tmp ( ) )
126+ teardown ( ( ) => sourceStore . close ( ) )
127+ await sourceStore . ready ( )
128+ const sourceDrive = new Hyperdrive ( sourceStore )
129+ await sourceDrive . ready ( )
130+ await new Localdrive ( Helper . fixture ( 'minimal' ) ) . mirror ( sourceDrive ) . done ( )
131+ const sourceBlobs = await sourceDrive . getBlobs ( )
132+ const blocks = sourceDrive . db . core . length + sourceBlobs . core . length
133+
134+ let dbBlocks = 0
135+ sourceDrive . db . core . on ( 'upload' , ( ) => dbBlocks ++ )
136+
137+ let blobBlocks = 0
138+ sourceBlobs . core . on ( 'upload' , ( ) => blobBlocks ++ )
139+
140+ const sourceSwarm = new Hyperswarm ( { bootstrap : Helper . dhtBootstrap } )
141+ teardown ( ( ) => sourceSwarm . destroy ( ) )
142+ sourceSwarm . on ( 'connection' , ( conn ) => {
143+ sourceStore . replicate ( conn )
144+ } )
145+ const topic = sourceSwarm . join ( sourceDrive . discoveryKey , { server : true , client : false } )
146+ await topic . flushed ( )
147+
148+ const helper = new Helper ( )
149+ teardown ( ( ) => helper . close ( ) , { order : Infinity } )
150+ await helper . ready ( )
151+
152+ comment ( 'seeding external app' )
153+ const link = `pear://${ hypercoreid . encode ( sourceDrive . key ) } `
154+ const seeding = helper . seed ( { link } )
155+ teardown ( ( ) => Helper . teardownStream ( seeding ) )
156+ await Helper . pick ( seeding , { tag : 'stats' , data : { download : { totalBlocks : blocks } } } )
157+
158+ is ( dbBlocks , sourceDrive . db . core . length , 'seed synced db core' )
159+ is ( blobBlocks , sourceBlobs . core . length , 'seed synced blobs core' )
160+ } )
0 commit comments