Use js-ipfs only in tests

This commit is contained in:
haad
2023-03-02 09:01:50 +02:00
parent 93473c8fec
commit 9f50fb5e53
33 changed files with 2647 additions and 4578 deletions

View File

@@ -1,183 +1,183 @@
import assert from 'assert'
import rmrf from 'rimraf'
import OrbitDB from '../../src/OrbitDB.js'
import IdentityProvider from 'orbit-db-identity-provider'
import EthIdentityProvider from 'orbit-db-identity-provider/ethereum'
import Keystore from 'orbit-db-keystore'
import ContractAccessController from 'orbit-db-access-controllers/contract'
import DepositContractAccessController from 'orbit-db-access-controllers/deposit-contract'
import AccessControllers from 'orbit-db-access-controllers'
import Web3 from 'web3'
import ganache from 'ganache-cli'
import * as io from 'orbit-db-io'
import Access from './Access.json' assert { 'type': 'json' }
import PayDeposit from './PayDeposit.json' assert { 'type': 'json' }
// Include test utilities
import {
config,
startIpfs,
stopIpfs,
testAPIs
} from 'orbit-db-test-utils'
// import assert from 'assert'
// import rmrf from 'rimraf'
// import OrbitDB from '../../src/OrbitDB.js'
// import IdentityProvider from 'orbit-db-identity-provider'
// import EthIdentityProvider from 'orbit-db-identity-provider/ethereum'
// import Keystore from 'orbit-db-keystore'
// import ContractAccessController from 'orbit-db-access-controllers/contract'
// import DepositContractAccessController from 'orbit-db-access-controllers/deposit-contract'
// import AccessControllers from 'orbit-db-access-controllers'
// import Web3 from 'web3'
// import ganache from 'ganache-cli'
// import * as io from 'orbit-db-io'
// import Access from './Access.json' assert { 'type': 'json' }
// import PayDeposit from './PayDeposit.json' assert { 'type': 'json' }
// // Include test utilities
// import {
// config,
// startIpfs,
// stopIpfs,
// testAPIs
// } from 'orbit-db-test-utils'
const dbPath1 = './orbitdb/tests/contract-access-controller/1'
const dbPath2 = './orbitdb/tests/contract-access-controller/2'
// const dbPath1 = './orbitdb/tests/contract-access-controller/1'
// const dbPath2 = './orbitdb/tests/contract-access-controller/2'
const accessControllers = [
{
AccessController: ContractAccessController,
contract: Access
},
{
AccessController: DepositContractAccessController,
contract: PayDeposit
}
]
// const accessControllers = [
// {
// AccessController: ContractAccessController,
// contract: Access
// },
// {
// AccessController: DepositContractAccessController,
// contract: PayDeposit
// }
// ]
Object.keys(testAPIs).forEach(API => {
describe(`orbit-db - ContractAccessController (${API})`, function () {
this.timeout(config.timeout)
// Object.keys(testAPIs).forEach(API => {
// describe(`orbit-db - ContractAccessController (${API})`, function () {
// this.timeout(config.timeout)
let ipfsd1, ipfsd2, ipfs1, ipfs2, id1, id2
let orbitdb1, orbitdb2
let web3, accounts
// let ipfsd1, ipfsd2, ipfs1, ipfs2, id1, id2
// let orbitdb1, orbitdb2
// let web3, accounts
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
// 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
const keystore1 = new Keystore(dbPath1 + '/keys')
const keystore2 = new Keystore(dbPath2 + '/keys')
// const keystore1 = new Keystore(dbPath1 + '/keys')
// const keystore2 = new Keystore(dbPath2 + '/keys')
IdentityProvider.addIdentityProvider(EthIdentityProvider)
// IdentityProvider.addIdentityProvider(EthIdentityProvider)
id1 = await IdentityProvider.createIdentity({ type: EthIdentityProvider.type, keystore: keystore1 })
id2 = await IdentityProvider.createIdentity({ type: EthIdentityProvider.type, keystore: keystore2 })
// id1 = await IdentityProvider.createIdentity({ type: EthIdentityProvider.type, keystore: keystore1 })
// id2 = await IdentityProvider.createIdentity({ type: EthIdentityProvider.type, keystore: keystore2 })
web3 = new Web3(ganache.provider())
accounts = await web3.eth.getAccounts()
// web3 = new Web3(ganache.provider())
// accounts = await web3.eth.getAccounts()
orbitdb1 = await OrbitDB.createInstance(ipfs1, {
AccessControllers: AccessControllers,
directory: dbPath1,
identity: id1
})
// orbitdb1 = await OrbitDB.createInstance(ipfs1, {
// AccessControllers: AccessControllers,
// directory: dbPath1,
// identity: id1
// })
orbitdb2 = await OrbitDB.createInstance(ipfs2, {
AccessControllers: AccessControllers,
directory: dbPath2,
identity: id2
})
})
// orbitdb2 = await OrbitDB.createInstance(ipfs2, {
// AccessControllers: AccessControllers,
// directory: dbPath2,
// identity: id2
// })
// })
after(async () => {
if (orbitdb1) {
await orbitdb1.stop()
}
// after(async () => {
// if (orbitdb1) {
// await orbitdb1.stop()
// }
if (orbitdb2) {
await orbitdb2.stop()
}
// if (orbitdb2) {
// await orbitdb2.stop()
// }
if (ipfsd1) {
await stopIpfs(ipfsd1)
}
// if (ipfsd1) {
// await stopIpfs(ipfsd1)
// }
if (ipfsd2) {
await stopIpfs(ipfsd2)
}
})
// if (ipfsd2) {
// await stopIpfs(ipfsd2)
// }
// })
describe('Constructor', function () {
accessControllers.forEach(async (ac, i) => {
let accessController, contract
before(async () => {
contract = await new web3.eth.Contract(ac.contract.abi)
.deploy({ data: ac.contract.bytecode })
.send({ from: accounts[i], gas: '1000000' })
// describe('Constructor', function () {
// accessControllers.forEach(async (ac, i) => {
// let accessController, contract
// before(async () => {
// contract = await new web3.eth.Contract(ac.contract.abi)
// .deploy({ data: ac.contract.bytecode })
// .send({ from: accounts[i], gas: '1000000' })
accessController = await ac.AccessController.create(orbitdb1, {
type: ac.AccessController.type,
web3: web3,
abi: ac.contract.abi,
contractAddress: contract._address,
defaultAccount: accounts[i]
})
await accessController.load()
})
// accessController = await ac.AccessController.create(orbitdb1, {
// type: ac.AccessController.type,
// web3: web3,
// abi: ac.contract.abi,
// contractAddress: contract._address,
// defaultAccount: accounts[i]
// })
// await accessController.load()
// })
it('creates an access controller', () => {
assert.notStrictEqual(accessController, null)
assert.notStrictEqual(accessController, undefined)
})
// it('creates an access controller', () => {
// assert.notStrictEqual(accessController, null)
// assert.notStrictEqual(accessController, undefined)
// })
it('sets the controller type', () => {
assert.strictEqual(accessController.type, ac.AccessController.type)
})
// it('sets the controller type', () => {
// assert.strictEqual(accessController.type, ac.AccessController.type)
// })
it('grants access to key', async () => {
const mockEntry = {
identity: id1
// ...
// doesn't matter what we put here, only identity is used for the check
}
await accessController.grant('write', id1.id)
const canAppend = await accessController.canAppend(mockEntry, id1.provider)
assert.strictEqual(canAppend, true)
})
// it('grants access to key', async () => {
// const mockEntry = {
// identity: id1
// // ...
// // doesn't matter what we put here, only identity is used for the check
// }
// await accessController.grant('write', id1.id)
// const canAppend = await accessController.canAppend(mockEntry, id1.provider)
// assert.strictEqual(canAppend, true)
// })
it('grants access to multiple keys', async () => {
const canAppend1 = await accessController.canAppend({ identity: orbitdb1.identity }, orbitdb1.identity.provider)
const canAppend2 = await accessController.canAppend({ identity: orbitdb2.identity }, orbitdb2.identity.provider)
// it('grants access to multiple keys', async () => {
// const canAppend1 = await accessController.canAppend({ identity: orbitdb1.identity }, orbitdb1.identity.provider)
// const canAppend2 = await accessController.canAppend({ identity: orbitdb2.identity }, orbitdb2.identity.provider)
await accessController.grant('write', orbitdb2.identity.id)
const canAppend3 = await accessController.canAppend({ identity: orbitdb2.identity }, orbitdb2.identity.provider)
// await accessController.grant('write', orbitdb2.identity.id)
// const canAppend3 = await accessController.canAppend({ identity: orbitdb2.identity }, orbitdb2.identity.provider)
assert.strictEqual(canAppend1, true)
assert.strictEqual(canAppend2, false)
assert.strictEqual(canAppend3, true)
})
// assert.strictEqual(canAppend1, true)
// assert.strictEqual(canAppend2, false)
// assert.strictEqual(canAppend3, true)
// })
describe('save and load', function () {
let accessController, manifest
// describe('save and load', function () {
// let accessController, manifest
before(async () => {
accessController = await ac.AccessController.create(orbitdb1, {
type: ac.AccessController.type,
web3: web3,
abi: ac.contract.abi,
contractAddress: contract._address,
defaultAccount: accounts[i]
})
manifest = await accessController.save()
const access = await io.read(ipfs1, manifest.address)
// before(async () => {
// accessController = await ac.AccessController.create(orbitdb1, {
// type: ac.AccessController.type,
// web3: web3,
// abi: ac.contract.abi,
// contractAddress: contract._address,
// defaultAccount: accounts[i]
// })
// manifest = await accessController.save()
// const access = await io.read(ipfs1, manifest.address)
accessController = await ac.AccessController.create(orbitdb1, {
type: ac.AccessController.type,
web3: web3,
abi: JSON.parse(access.abi),
contractAddress: access.contractAddress,
defaultAccount: accounts[i]
})
// accessController = await ac.AccessController.create(orbitdb1, {
// type: ac.AccessController.type,
// web3: web3,
// abi: JSON.parse(access.abi),
// contractAddress: access.contractAddress,
// defaultAccount: accounts[i]
// })
await accessController.load(manifest.address)
})
// await accessController.load(manifest.address)
// })
it('has correct capabalities', async () => {
const canAppend1 = await accessController.canAppend({ identity: orbitdb1.identity }, orbitdb1.identity.provider)
const canAppend2 = await accessController.canAppend({ identity: orbitdb2.identity }, orbitdb2.identity.provider)
const canAppend3 = await accessController.canAppend({ identity: { id: 'someotherid' } }, orbitdb1.identity.provider)
// it('has correct capabalities', async () => {
// const canAppend1 = await accessController.canAppend({ identity: orbitdb1.identity }, orbitdb1.identity.provider)
// const canAppend2 = await accessController.canAppend({ identity: orbitdb2.identity }, orbitdb2.identity.provider)
// const canAppend3 = await accessController.canAppend({ identity: { id: 'someotherid' } }, orbitdb1.identity.provider)
assert.strictEqual(canAppend1, true)
assert.strictEqual(canAppend2, true)
assert.strictEqual(canAppend3, false)
})
})
})
})
})
})
// assert.strictEqual(canAppend1, true)
// assert.strictEqual(canAppend2, true)
// assert.strictEqual(canAppend3, false)
// })
// })
// })
// })
// })
// })