mirror of
https://github.com/orbitdb/orbitdb.git
synced 2025-03-30 15:08:28 +00:00
160 lines
5.2 KiB
JavaScript
160 lines
5.2 KiB
JavaScript
// import assert from 'assert'
|
|
// import rmrf from 'rimraf'
|
|
// import OrbitDB from '../../src/OrbitDB.js'
|
|
// import IdentityProvider from 'orbit-db-identity-provider'
|
|
// import Keystore from 'orbit-db-keystore'
|
|
// import AccessControllers from 'orbit-db-access-controllers'
|
|
// import * as io from 'orbit-db-io'
|
|
// // Include test utilities
|
|
// import {
|
|
// config,
|
|
// startIpfs,
|
|
// stopIpfs,
|
|
// testAPIs,
|
|
// connectPeers
|
|
// } from 'orbit-db-test-utils'
|
|
|
|
// const dbPath1 = './orbitdb/tests/orbitdb-access-controller-integration/1'
|
|
// const dbPath2 = './orbitdb/tests/orbitdb-access-controller-integration/2'
|
|
|
|
// Object.keys(testAPIs).forEach(API => {
|
|
// describe(`orbit-db - IPFSAccessController Integration (${API})`, function () {
|
|
// this.timeout(config.timeout)
|
|
|
|
// let ipfsd1, ipfsd2, ipfs1, ipfs2, id1, id2
|
|
// let orbitdb1, orbitdb2
|
|
|
|
// before(async () => {
|
|
// rmrf.sync(dbPath1)
|
|
// rmrf.sync(dbPath2)
|
|
// ipfsd1 = await startIpfs(API, config.daemon1)
|
|
// ipfsd2 = await startIpfs(API, config.daemon2)
|
|
// ipfs1 = ipfsd1.api
|
|
// ipfs2 = ipfsd2.api
|
|
|
|
// // 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 })
|
|
|
|
// const keystore1 = new Keystore(dbPath1 + '/keys')
|
|
// const keystore2 = new Keystore(dbPath2 + '/keys')
|
|
|
|
// id1 = await IdentityProvider.createIdentity({ id: 'A', keystore: keystore1 })
|
|
// id2 = await IdentityProvider.createIdentity({ id: 'B', keystore: keystore2 })
|
|
|
|
// orbitdb1 = await OrbitDB.createInstance(ipfs1, {
|
|
// AccessControllers,
|
|
// directory: dbPath1,
|
|
// identity: id1
|
|
// })
|
|
|
|
// orbitdb2 = await OrbitDB.createInstance(ipfs2, {
|
|
// AccessControllers,
|
|
// directory: dbPath2,
|
|
// identity: id2
|
|
// })
|
|
// })
|
|
|
|
// after(async () => {
|
|
// if (orbitdb1) { await orbitdb1.stop() }
|
|
|
|
// if (orbitdb2) { await orbitdb2.stop() }
|
|
|
|
// if (ipfsd1) { await stopIpfs(ipfsd1) }
|
|
|
|
// if (ipfsd2) { await stopIpfs(ipfsd2) }
|
|
// })
|
|
|
|
// describe('OrbitDB Integration', function () {
|
|
// let db, db2
|
|
// let dbManifest, acManifest
|
|
|
|
// before(async () => {
|
|
// db = await orbitdb1.feed('AABB', {
|
|
// identity: id1,
|
|
// accessController: {
|
|
// type: 'ipfs',
|
|
// write: [id1.id]
|
|
// }
|
|
// })
|
|
|
|
// db2 = await orbitdb2.feed(db.address, {
|
|
// identity: id2
|
|
// })
|
|
// await db2.load()
|
|
|
|
// dbManifest = await io.read(ipfs1, db.address.root)
|
|
// const hash = dbManifest.accessController.split('/').pop()
|
|
// acManifest = await io.read(ipfs1, hash)
|
|
// })
|
|
|
|
// it('has the correct access rights after creating the database', async () => {
|
|
// assert.deepStrictEqual(db.access.write, [id1.id])
|
|
// })
|
|
|
|
// it('makes database use the correct access controller', async () => {
|
|
// const { address } = await db.access.save()
|
|
// assert.strictEqual(acManifest.params.address, address)
|
|
// })
|
|
|
|
// it('saves database manifest file locally', async () => {
|
|
// assert.notStrictEqual(dbManifest, null)
|
|
// })
|
|
|
|
// it('saves access controller manifest file locally', async () => {
|
|
// assert.notStrictEqual(acManifest, null)
|
|
// })
|
|
|
|
// it('has correct type', async () => {
|
|
// assert.strictEqual(acManifest.type, 'ipfs')
|
|
// })
|
|
|
|
// describe('database manifest', () => {
|
|
// it('has correct name', async () => {
|
|
// assert.strictEqual(dbManifest.name, 'AABB')
|
|
// })
|
|
|
|
// it('has correct type', async () => {
|
|
// assert.strictEqual(dbManifest.type, 'feed')
|
|
// })
|
|
|
|
// it('has correct address', async () => {
|
|
// assert.notStrictEqual(dbManifest.accessController, null)
|
|
// assert.strictEqual(dbManifest.accessController.indexOf('/ipfs'), 0)
|
|
// })
|
|
// })
|
|
|
|
// describe('access controls', () => {
|
|
// it('allows to write if user has write access', async () => {
|
|
// let err
|
|
// try {
|
|
// await db.add('hello?')
|
|
// } catch (e) {
|
|
// err = e.toString()
|
|
// }
|
|
|
|
// const res = await db.iterator().collect().map(e => e.payload.value)
|
|
// assert.strictEqual(err, undefined)
|
|
// assert.deepStrictEqual(res, ['hello?'])
|
|
// })
|
|
|
|
// it('doesn\'t allow to write without write access', async () => {
|
|
// let err
|
|
// try {
|
|
// await db2.add('hello!!')
|
|
// assert.strictEqual('Should not end here', false)
|
|
// } catch (e) {
|
|
// err = e
|
|
// }
|
|
|
|
// const res = await db2.iterator().collect().map(e => e.payload.value)
|
|
// assert.strictEqual(err.message, `Could not append entry, key "${db2.identity.id}" is not allowed to write to the log`)
|
|
// assert.deepStrictEqual(res.includes(e => e === 'hello!!'), false)
|
|
// })
|
|
// })
|
|
// })
|
|
// })
|
|
// // TODO: use two separate peers for testing the AC
|
|
// // TODO: add tests for revocation correctness with a database (integration tests)
|
|
// })
|