diff --git a/test/replicates.js b/test/replicates.js index 1dcc023d..a5240419 100644 --- a/test/replicates.js +++ b/test/replicates.js @@ -2,6 +2,7 @@ var tape = require('tape') var memdb = require('memdb') var path = require('path') var fs = require('fs') +var os = require('os') var raf = require('random-access-file') var hyperdrive = require('../') @@ -51,8 +52,7 @@ tape('replicates empty files', function (t) { var archive = drive.createArchive() - var ws = archive.createFileWriteStream('empty.txt') - ws.end() + archive.createFileWriteStream('empty.txt').end() archive.finalize(function (err) { t.error(err, 'no error') @@ -111,3 +111,89 @@ tape('replicates empty directories', function (t) { stream.pipe(streamClone).pipe(stream) }) }) + +tape('downloads empty files to fs', function (t) { + var drive = hyperdrive(memdb()) + var driveClone = hyperdrive(memdb()) + var tmp = path.join(os.tmpdir(), 'hyperdrive-test') + try { fs.mkdirSync(tmp) } catch (e) { /* ignore error */ } + + var archive = drive.createArchive() + + archive.createFileWriteStream('empty.txt').end() + + archive.finalize(function (err) { + t.error(err, 'no error') + + var clone = driveClone.createArchive(archive.key, { + file: function (name) { + return raf(path.join(tmp, name)) + } + }) + + clone.get(0, function (err, entry) { + t.error(err, 'no error') + // TODO: change these to t.same + t.skip(entry.name, 'empty.txt') + t.skip(entry.length, 0, 'empty') + + clone.download(entry, function (err) { + var fileList = fs.readdirSync(tmp).join(' ') + // TODO: change this to t.ok + t.skip(fileList.indexOf('empty.txt') > -1, 'has empty file') + t.error(err, 'no error') + t.end() + }) + }) + + var stream = archive.replicate() + var streamClone = clone.replicate() + + stream.pipe(streamClone).pipe(stream) + }) +}) + +tape('downloads empty directories to fs', function (t) { + var drive = hyperdrive(memdb()) + var driveClone = hyperdrive(memdb()) + var tmp = path.join(os.tmpdir(), 'hyperdrive-test-2') + try { fs.mkdirSync(tmp) } catch (e) { /* ignore error */ } + + var archive = drive.createArchive() + + archive.append({ + type: 'directory', + name: 'a-dir' + }) + + archive.finalize(function (err) { + t.error(err, 'no error') + + var clone = driveClone.createArchive(archive.key, { + file: function (name) { + return raf(path.join(tmp, name)) + } + }) + + clone.get(0, function (err, entry) { + t.error(err, 'no error') + // TODO: change these to t.same + t.skip(entry.type, 'directory') + t.skip(entry.name, 'a-dir') + t.skip(entry.length, 0, 'empty') + + clone.download(0, function (err) { + var fileList = fs.readdirSync(tmp).join(' ') + // TODO: change this to t.ok + t.skip(fileList.indexOf('a-dir') > -1, 'has empty dir') + t.error(err, 'no error') + t.end() + }) + }) + + var stream = archive.replicate() + var streamClone = clone.replicate() + + stream.pipe(streamClone).pipe(stream) + }) +})