mirror of
https://github.com/orbitdb/orbitdb.git
synced 2025-03-30 15:08:28 +00:00

Use immutable ipfs-log. Simplify internals. Remove obsolete dependencies. Update dependencies. Use @dignifiedquire's mapSeries for Promises. Split tests to individual stores. Improve tests. Fix build process. Build size down to 121kb. Fix benchmarks and examples. Move Cache to Stores (and to its own module).
164 lines
4.2 KiB
JavaScript
164 lines
4.2 KiB
JavaScript
'use strict'
|
|
|
|
const assert = require('assert')
|
|
const rmrf = require('rimraf')
|
|
const OrbitDB = require('../src/OrbitDB')
|
|
const hasIpfsApiWithPubsub = require('./test-utils').hasIpfsApiWithPubsub
|
|
const config = require('./test-config')
|
|
|
|
config.daemons.forEach((IpfsDaemon) => {
|
|
|
|
describe('orbit-db - Key-Value Store', function() {
|
|
this.timeout(config.timeout)
|
|
|
|
let ipfs, client1, client2, db
|
|
|
|
before(function (done) {
|
|
rmrf.sync(config.defaultIpfsDirectory)
|
|
rmrf.sync(config.defaultOrbitDBDirectory)
|
|
ipfs = new IpfsDaemon()
|
|
ipfs.on('error', done)
|
|
ipfs.on('ready', () => {
|
|
assert.equal(hasIpfsApiWithPubsub(ipfs), true)
|
|
client1 = new OrbitDB(ipfs, 'A')
|
|
client2 = new OrbitDB(ipfs, 'B')
|
|
done()
|
|
})
|
|
})
|
|
|
|
after(() => {
|
|
if(client1) client1.disconnect()
|
|
if(client2) client2.disconnect()
|
|
ipfs.stop()
|
|
rmrf.sync(config.defaultOrbitDBDirectory)
|
|
rmrf.sync(config.defaultIpfsDirectory)
|
|
})
|
|
|
|
beforeEach(() => {
|
|
db = client1.kvstore(config.dbname, { replicate: false, maxHistory: 0 })
|
|
})
|
|
|
|
it('put', () => {
|
|
return db.put('key1', 'hello1')
|
|
.then(() => {
|
|
const value = db.get('key1')
|
|
assert.equal(value, 'hello1')
|
|
})
|
|
})
|
|
|
|
it('get', () => {
|
|
return db.put('key1', 'hello2')
|
|
.then(() => {
|
|
const value = db.get('key1')
|
|
assert.equal(value, 'hello2')
|
|
})
|
|
})
|
|
|
|
it('put updates a value', () => {
|
|
return db.put('key1', 'hello3')
|
|
.then(() => db.put('key1', 'hello4'))
|
|
.then(() => {
|
|
const value = db.get('key1')
|
|
assert.equal(value, 'hello4')
|
|
})
|
|
})
|
|
|
|
it('set is an alias for put', () => {
|
|
return db.set('key1', 'hello5')
|
|
.then(() => {
|
|
const value = db.get('key1')
|
|
assert.equal(value, 'hello5')
|
|
})
|
|
})
|
|
|
|
it('put/get - multiple keys', () => {
|
|
return db.put('key1', 'hello1')
|
|
.then(() => db.put('key2', 'hello2'))
|
|
.then(() => db.put('key3', 'hello3'))
|
|
.then(() => {
|
|
const v1 = db.get('key1')
|
|
const v2 = db.get('key2')
|
|
const v3 = db.get('key3')
|
|
assert.equal(v1, 'hello1')
|
|
assert.equal(v2, 'hello2')
|
|
assert.equal(v3, 'hello3')
|
|
})
|
|
})
|
|
|
|
it('deletes a key', () => {
|
|
return db.put('key1', 'hello!')
|
|
.then(() => db.del('key1'))
|
|
.then(() => {
|
|
const value = db.get('key1')
|
|
assert.equal(value, null)
|
|
})
|
|
})
|
|
|
|
it('deletes a key after multiple updates', () => {
|
|
return db.put('key1', 'hello1')
|
|
.then(() => db.put('key1', 'hello2'))
|
|
.then(() => db.put('key1', 'hello3'))
|
|
.then(() => db.del('key1'))
|
|
.then(() => {
|
|
const value = db.get('key1')
|
|
assert.equal(value, null)
|
|
})
|
|
})
|
|
|
|
it('get - integer value', () => {
|
|
const val = 123
|
|
return db.put('key1', val)
|
|
.then(() => {
|
|
const v1 = db.get('key1')
|
|
assert.equal(v1, val)
|
|
})
|
|
})
|
|
|
|
it('get - object value', () => {
|
|
const val = { one: 'first', two: 2 }
|
|
return db.put('key1', val)
|
|
.then(() => {
|
|
const v1 = db.get('key1')
|
|
assert.deepEqual(v1, val)
|
|
})
|
|
})
|
|
|
|
it('get - array value', () => {
|
|
const val = [1, 2, 3, 4, 5]
|
|
return db.put('key1', val)
|
|
.then(() => {
|
|
const v1 = db.get('key1')
|
|
assert.deepEqual(v1, val)
|
|
})
|
|
})
|
|
|
|
describe('sync', () => {
|
|
const options = {
|
|
replicate: false,
|
|
}
|
|
|
|
it('syncs databases', (done) => {
|
|
const db1 = client1.kvstore(config.dbname, options)
|
|
const db2 = client2.kvstore(config.dbname, options)
|
|
|
|
db1.events.on('error', done)
|
|
|
|
db2.events.on('write', (dbname, hash, entry, heads) => {
|
|
assert.equal(db1.get('key1'), null)
|
|
assert.equal(db2.get('key1'), 'hello1')
|
|
db1.sync(heads)
|
|
})
|
|
|
|
db1.events.on('synced', () => {
|
|
const value = db1.get('key1')
|
|
assert.equal(value, 'hello1')
|
|
done()
|
|
})
|
|
|
|
db2.put('key1', 'hello1')
|
|
.catch(done)
|
|
})
|
|
})
|
|
})
|
|
})
|