A module for simulating network conditions when testing replicated data structures.
const RAM = require('random-access-memory')
const Autobase = require('@holepunchto/autobase-next')
const Hypercore = require('hypercore')
const { Replicator, Network } = require('replication-simulator')
const writer = new Hypercore(RAM.reusable())
await writer.ready()
const reader = new Hypercore(RAM.reusable(), { key: writer.key }),
// returns a replication stream
const replicate = (core, init) => core.replicate(init)
const peers = []
for (const core of [writer, reader]) {
peers.push(new Replicator(core, { replicate }))
}
const net = new Network(peers)
await writer.append('0')
// ... wait for sync
console.log(reader.length) // 1
await net.down() // stop
await writer.append('1')
// ... wait for sync
console.log(reader.length) // 1
net.up() // resume
// ... wait for sync
console.log(reader.length) // 2
Create a new replicator.
const opts = {
replicate (object, isInitiator) {
// return a replication stream
},
rng () {
// return a number in range [0, 1)
}
}
Replicate with the remote
, returns false
if we are already replicating with remote
and true
otherwise.
Simulate connection latency. Bit of a hack, so could be buggy...
Stop replication with remote
.
End all replication.
Drop and restart replication at random intervals.
A network is a set of bases that are all replicating with one another.
Create a network.
Iterate over the bases.
The number of bases in the network.
Check if a base is in this network.
Add a base to the network.
Delete a base from the network.
Clear all peers from the network. Will not end any ongoing replication streams.
Combine another network into this one.
Split a network into 2 at the given index
.
Ensure all the peers in the network are replicating with base.
All peers in the network will stop replicating with this base.
If base
is in the network, it will remain in the network and can be brought up again with network.replicate
All peers in the network will stop replicating with each other.
All peers in the network will stop replicating with each other.
End all replication and clear the network.
MIT