UNPKG

@web4/bitdrive

Version:

Bitdrive is a secure, real time distributed file system

73 lines (56 loc) 1.64 kB
const test = require('tape') const crypto = require('crypto') const create = require('./helpers/create') const fixtures = [ 'a/a', 'a/b', 'a/c/d', 'a/c/e', 'a/e', 'b/e', 'b/f', 'b/d', 'f/a', 'g/x', 'e' ] test('copy a directory containing files', async function (t) { const drive = create() const files = createFiles(fixtures) await writeFiles(drive, files) const fileListA = await drive.promises.readdir('/a') t.deepEqual(fileListA, [ 'c', 'b', 'a', 'e' ]) await drive.promises.cp('a', 'z', { recursive: true }) const fileListB = await drive.promises.readdir('/z', { recursive: true }) t.deepEqual(fileListB, fileListA) t.end() }) test('copy a single file', async function (t) { const drive = create() const files = createFiles(fixtures) await writeFiles(drive, files) const fileListA = await drive.promises.readdir('/b', { recursive: true }) t.ok(!fileListA.includes('a'), '/b does not include the target, /b/a') await drive.promises.cp('a/a', 'b/a') const fileListB = await drive.promises.readdir('/b', { recursive: true }) t.ok(fileListB.includes('a'), '/b now includes the target, /b/a') t.end() }) function createFiles (names) { const files = [] for (const name of names) { files.push([name, crypto.randomBytes(32)]) } return new Map(files) } function writeFiles (drive, files) { return new Promise((resolve, reject) => { let expected = files.size for (const [name, contents] of files) { drive.writeFile(name, contents, err => { if (err) return reject(err) if (!--expected) return resolve(null) }) } }) }