// import assert from 'assert' // import mapSeries from 'p-each-series' // import rmrf from 'rimraf' // import OrbitDB from '../src/OrbitDB.js' // // Include test utilities // import { // config, // startIpfs, // stopIpfs, // testAPIs, // connectPeers, // waitForPeers, // } from 'orbit-db-test-utils' // const orbitdbPath1 = './orbitdb/tests/replicate-and-load/1' // const orbitdbPath2 = './orbitdb/tests/replicate-and-load/2' // const dbPath1 = './orbitdb/tests/replicate-and-load/1/db1' // const dbPath2 = './orbitdb/tests/replicate-and-load/2/db2' // Object.keys(testAPIs).forEach(API => { // describe(`orbit-db - Replicate and Load (${API})`, function() { // this.timeout(config.timeout) // let ipfsd1, ipfsd2, ipfs1, ipfs2 // let orbitdb1, orbitdb2 // before(async () => { // rmrf.sync(orbitdbPath1) // rmrf.sync(orbitdbPath2) // rmrf.sync(dbPath1) // rmrf.sync(dbPath2) // ipfsd1 = await startIpfs(API, config.daemon1) // ipfsd2 = await startIpfs(API, config.daemon2) // ipfs1 = ipfsd1.api // ipfs2 = ipfsd2.api // orbitdb1 = await OrbitDB.createInstance(ipfs1, { directory: orbitdbPath1 }) // orbitdb2 = await OrbitDB.createInstance(ipfs2, { directory: orbitdbPath2 }) // // Connect the peers manually to speed up test times // const isLocalhostAddress = (addr) => addr.toString().includes('127.0.0.1') // await connectPeers(ipfs1, ipfs2, { filter: isLocalhostAddress }) // console.log("Peers connected") // }) // after(async () => { // if(orbitdb1) // await orbitdb1.stop() // if(orbitdb2) // await orbitdb2.stop() // if (ipfsd1) // await stopIpfs(ipfsd1) // if (ipfsd2) // await stopIpfs(ipfsd2) // rmrf.sync(dbPath1) // rmrf.sync(dbPath2) // }) // describe('two peers', function() { // let db1, db2 // const openDatabases = async (options = {}) => { // // Set write access for both clients // options.write = [ // orbitdb1.identity.publicKey, // orbitdb2.identity.publicKey // ] // options = Object.assign({}, options, { path: dbPath1, create: true }) // db1 = await orbitdb1.eventlog('tests', options) // // Set 'localOnly' flag on and it'll error if the database doesn't exist locally // options = Object.assign({}, options, { path: dbPath2 }) // db2 = await orbitdb2.eventlog(db1.address.toString(), options) // } // before(async () => { // await openDatabases() // assert.equal(db1.address.toString(), db2.address.toString()) // console.log("Waiting for peers...") // await waitForPeers(ipfs1, [orbitdb2.id], db1.address.toString()) // await waitForPeers(ipfs2, [orbitdb1.id], db1.address.toString()) // }) // after(async () => { // if (db1) { // await db1.drop() // } // if (db2) { // await db2.drop() // } // }) // it('replicates database of 100 entries and loads it from the disk', async () => { // const entryCount = 100 // const entryArr = [] // let timer // for (let i = 0; i < entryCount; i ++) // entryArr.push(i) // console.log("Writing to database...") // await mapSeries(entryArr, (i) => db1.add('hello' + i)) // console.log("Done") // return new Promise((resolve, reject) => { // timer = setInterval(async () => { // if (db2._oplog.length === entryCount) { // clearInterval(timer) // const items = db2.iterator({ limit: -1 }).collect() // assert.equal(items.length, entryCount) // assert.equal(items[0].payload.value, 'hello0') // assert.equal(items[items.length - 1].payload.value, 'hello99') // try { // // Set write access for both clients // let options = { // accessController: { // write: [ // orbitdb1.identity.id, // orbitdb2.identity.id // ] // } // } // // Get the previous address to make sure nothing mutates it // const addr = db1.address.toString() // // Open the database again (this time from the disk) // options = Object.assign({}, options, { path: dbPath1, create: false }) // const db3 = await orbitdb1.eventlog(addr, options) // // Set 'localOnly' flag on and it'll error if the database doesn't exist locally // options = Object.assign({}, options, { path: dbPath2, localOnly: true }) // const db4 = await orbitdb2.eventlog(addr, options) // await db3.load() // await db4.load() // // Make sure we have all the entries in the databases // const result1 = db3.iterator({ limit: -1 }).collect() // const result2 = db4.iterator({ limit: -1 }).collect() // assert.equal(result1.length, entryCount) // assert.equal(result2.length, entryCount) // await db3.drop() // await db4.drop() // } catch (e) { // reject(e) // } // resolve() // } // }, 1000) // }) // }) // }) // }) // })