From 3466d324c5f68e81e152a8965f20644aad1dbda5 Mon Sep 17 00:00:00 2001 From: David Dias Date: Mon, 30 Oct 2017 09:33:33 +0000 Subject: [PATCH 01/19] wip --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 727fc2147..19a1ca749 100644 --- a/README.md +++ b/README.md @@ -8,10 +8,8 @@ -
-

From 9e1bf4c62addd67f38b36fa71d9920ea830135f3 Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 31 Oct 2017 10:49:55 +0000 Subject: [PATCH 02/19] files.add revamped! --- src/files/add-pull-stream.js | 0 .../{create-add-stream.js => add-readable-stream.js} | 0 src/files/cat-pull-stream.js | 0 src/files/cat-readable-stream.js | 0 src/files/get-pull-stream.js | 0 src/files/get-readable-stream.js | 0 src/files/index.js | 9 +++++++-- src/utils/load-commands.js | 9 +++++++-- 8 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 src/files/add-pull-stream.js rename src/files/{create-add-stream.js => add-readable-stream.js} (100%) create mode 100644 src/files/cat-pull-stream.js create mode 100644 src/files/cat-readable-stream.js create mode 100644 src/files/get-pull-stream.js create mode 100644 src/files/get-readable-stream.js diff --git a/src/files/add-pull-stream.js b/src/files/add-pull-stream.js new file mode 100644 index 000000000..e69de29bb diff --git a/src/files/create-add-stream.js b/src/files/add-readable-stream.js similarity index 100% rename from src/files/create-add-stream.js rename to src/files/add-readable-stream.js diff --git a/src/files/cat-pull-stream.js b/src/files/cat-pull-stream.js new file mode 100644 index 000000000..e69de29bb diff --git a/src/files/cat-readable-stream.js b/src/files/cat-readable-stream.js new file mode 100644 index 000000000..e69de29bb diff --git a/src/files/get-pull-stream.js b/src/files/get-pull-stream.js new file mode 100644 index 000000000..e69de29bb diff --git a/src/files/get-readable-stream.js b/src/files/get-readable-stream.js new file mode 100644 index 000000000..e69de29bb diff --git a/src/files/index.js b/src/files/index.js index 2c2927af4..ff843aba9 100644 --- a/src/files/index.js +++ b/src/files/index.js @@ -7,9 +7,14 @@ module.exports = (arg) => { return { add: require('./add')(send), - createAddStream: require('./create-add-stream')(send), - get: require('./get')(send), + addReadableStream: require('./add-readable-stream')(send), + // addPullStream: require('./add-pull-stream')(send), cat: require('./cat')(send), + // catReadableStream: require('./cat-readable-stream')(send), + // catPullStream: require('./cat-pull-stream')(send), + get: require('./get')(send), + // getReadableStream: require('./get-readable-stream')(send), + // getPullStream: require('./get-pull-stream')(send), cp: require('./cp')(send), ls: require('./ls')(send), mkdir: require('./mkdir')(send), diff --git a/src/utils/load-commands.js b/src/utils/load-commands.js index 860a8f7f1..080388a33 100644 --- a/src/utils/load-commands.js +++ b/src/utils/load-commands.js @@ -4,8 +4,14 @@ function requireCommands () { const cmds = { // add and createAddStream alias add: require('../files/add'), + addReadableStream: require('../files/add-readable-stream'), + // addPullStream: require('../files/add-pull-stream'), cat: require('../files/cat'), - createAddStream: require('../files/create-add-stream'), + // catReadableStream: require('../files/cat-readable-stream'), + // catPullStream: require('../files/add-pull-stream'), + get: require('../files/get'), + // getReadableStream: require('../files/get-readable-stream'), + // getPullStream: require('../files/get-pull-stream'), bitswap: require('../bitswap'), block: require('../block'), bootstrap: require('../bootstrap'), @@ -15,7 +21,6 @@ function requireCommands () { diag: require('../diag'), id: require('../id'), key: require('../key'), - get: require('../files/get'), log: require('../log'), ls: require('../ls'), mount: require('../mount'), From 512b8df7b118021c2bfe6ca71c8e8b5c97e1e099 Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 31 Oct 2017 14:28:40 +0000 Subject: [PATCH 03/19] .addReadableStream --- src/files/add-readable-stream.js | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/src/files/add-readable-stream.js b/src/files/add-readable-stream.js index 47c178459..cb4364d1d 100644 --- a/src/files/add-readable-stream.js +++ b/src/files/add-readable-stream.js @@ -1,17 +1,13 @@ 'use strict' const addCmd = require('./add.js') -const Duplex = require('stream').Duplex -const promisify = require('promisify-es6') +const Duplex = require('readable-stream').Duplex module.exports = (send) => { const add = addCmd(send) - return promisify((options, callback) => { - if (typeof options === 'function') { - callback = options - options = undefined - } + return (options) => { + options = options || {} const tuples = [] @@ -23,13 +19,13 @@ module.exports = (send) => { next() } - ds.end = () => { - add(tuples, options, (err, res) => { - if (err) { return ds.emit('error', err) } - res.forEach((tuple) => ds.push(tuple)) - ds.push(null) - }) - } - callback(null, ds) - }) + ds.end = () => add(tuples, options, (err, res) => { + if (err) { return ds.emit('error', err) } + + res.forEach((tuple) => ds.push(tuple)) + ds.push(null) + }) + + return ds + } } From 4f1702830fd6cb09900ea46a8d8630a912a98966 Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 31 Oct 2017 15:00:34 +0000 Subject: [PATCH 04/19] .addPullStream --- package.json | 4 +++- src/files/add-pull-stream.js | 30 ++++++++++++++++++++++++++++++ src/files/index.js | 2 +- src/utils/load-commands.js | 4 ++-- 4 files changed, 36 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 4d2d5dddc..8befbd51f 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "release-minor": "aegir release --type minor ", "release-major": "aegir release --type major ", "coverage": "aegir coverage --timeout 100000", - "coverage-publish": "aegir coverage --provider coveralls k--timeout 100000" + "coverage-publish": "aegir coverage --provider coveralls --timeout 100000" }, "dependencies": { "async": "^2.6.0", @@ -45,6 +45,8 @@ "peer-info": "~0.11.1", "promisify-es6": "^1.0.3", "pump": "^1.0.3", + "pull": "^2.1.1", + "pull-pushable": "^2.1.1", "qs": "^6.5.1", "readable-stream": "^2.3.3", "stream-http": "^2.7.2", diff --git a/src/files/add-pull-stream.js b/src/files/add-pull-stream.js index e69de29bb..8c23abc23 100644 --- a/src/files/add-pull-stream.js +++ b/src/files/add-pull-stream.js @@ -0,0 +1,30 @@ +'use strict' + +const addCmd = require('./add.js') +const pull = require('pull-stream') +const pushable = require('pull-pushable') + +module.exports = (send) => { + const add = addCmd(send) + + return (options) => { + options = options || {} + + const source = pushable() + const sink = pull.collect((err, tuples) => { + if (err) { return source.end(err) } + + add(tuples, options, (err, filesAdded) => { + if (err) { return source.end(err) } + + filesAdded.forEach((file) => source.push(file)) + source.end() + }) + }) + + return { + sink: sink, + source: source + } + } +} diff --git a/src/files/index.js b/src/files/index.js index ff843aba9..29304e005 100644 --- a/src/files/index.js +++ b/src/files/index.js @@ -8,7 +8,7 @@ module.exports = (arg) => { return { add: require('./add')(send), addReadableStream: require('./add-readable-stream')(send), - // addPullStream: require('./add-pull-stream')(send), + addPullStream: require('./add-pull-stream')(send), cat: require('./cat')(send), // catReadableStream: require('./cat-readable-stream')(send), // catPullStream: require('./cat-pull-stream')(send), diff --git a/src/utils/load-commands.js b/src/utils/load-commands.js index 080388a33..7d4c3f29a 100644 --- a/src/utils/load-commands.js +++ b/src/utils/load-commands.js @@ -5,10 +5,10 @@ function requireCommands () { // add and createAddStream alias add: require('../files/add'), addReadableStream: require('../files/add-readable-stream'), - // addPullStream: require('../files/add-pull-stream'), + addPullStream: require('../files/add-pull-stream'), cat: require('../files/cat'), // catReadableStream: require('../files/cat-readable-stream'), - // catPullStream: require('../files/add-pull-stream'), + // catPullStream: require('../files/cat-pull-stream'), get: require('../files/get'), // getReadableStream: require('../files/get-readable-stream'), // getPullStream: require('../files/get-pull-stream'), From aa702ae695354c1e6817c8bceca758bbf21a22c9 Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 31 Oct 2017 16:32:47 +0000 Subject: [PATCH 05/19] files.cat --- src/files/cat.js | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/files/cat.js b/src/files/cat.js index 2382c2a20..65046fb9b 100644 --- a/src/files/cat.js +++ b/src/files/cat.js @@ -3,6 +3,7 @@ const promisify = require('promisify-es6') const cleanCID = require('../utils/clean-cid') const v = require('is-ipfs') +const bl = require('bl') module.exports = (send) => { return promisify((hash, opts, callback) => { @@ -19,10 +20,14 @@ module.exports = (send) => { } } - send({ - path: 'cat', - args: hash, - buffer: opts.buffer - }, callback) + send({ path: 'cat', args: hash, buffer: opts.buffer }, (err, stream) => { + if (err) { return callback(err) } + + stream.pipe(bl((err, data) => { + if (err) { return callback(err) } + + callback(null, data) + })) + }) }) } From 987a9b7a3146fb8a18a2c295c8d17f7cc4ecd9f3 Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 31 Oct 2017 17:06:54 +0000 Subject: [PATCH 06/19] .catReadableStream --- src/files/cat-readable-stream.js | 29 +++++++++++++++++++++++++++++ src/files/index.js | 2 +- src/utils/load-commands.js | 2 +- 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/files/cat-readable-stream.js b/src/files/cat-readable-stream.js index e69de29bb..d72cc6281 100644 --- a/src/files/cat-readable-stream.js +++ b/src/files/cat-readable-stream.js @@ -0,0 +1,29 @@ +'use strict' + +const cleanCID = require('../utils/clean-cid') +const v = require('is-ipfs') +const Stream = require('readable-stream') + +module.exports = (send) => { + return (hash, opts) => { + opts = opts || {} + + const pt = new Stream.PassThrough() + + try { + hash = cleanCID(hash) + } catch (err) { + if (!v.ipfsPath(hash)) { + return pt.destroy(err) + } + } + + send({ path: 'cat', args: hash, buffer: opts.buffer }, (err, stream) => { + if (err) { return pt.destroy(err) } + + stream.pipe(pt) + }) + + return pt + } +} diff --git a/src/files/index.js b/src/files/index.js index 29304e005..cd6380610 100644 --- a/src/files/index.js +++ b/src/files/index.js @@ -10,7 +10,7 @@ module.exports = (arg) => { addReadableStream: require('./add-readable-stream')(send), addPullStream: require('./add-pull-stream')(send), cat: require('./cat')(send), - // catReadableStream: require('./cat-readable-stream')(send), + catReadableStream: require('./cat-readable-stream')(send), // catPullStream: require('./cat-pull-stream')(send), get: require('./get')(send), // getReadableStream: require('./get-readable-stream')(send), diff --git a/src/utils/load-commands.js b/src/utils/load-commands.js index 7d4c3f29a..5f55c3233 100644 --- a/src/utils/load-commands.js +++ b/src/utils/load-commands.js @@ -7,7 +7,7 @@ function requireCommands () { addReadableStream: require('../files/add-readable-stream'), addPullStream: require('../files/add-pull-stream'), cat: require('../files/cat'), - // catReadableStream: require('../files/cat-readable-stream'), + catReadableStream: require('../files/cat-readable-stream'), // catPullStream: require('../files/cat-pull-stream'), get: require('../files/get'), // getReadableStream: require('../files/get-readable-stream'), From c99f93c1bfb0072af2deaaa6c91d2b2e97023c97 Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 31 Oct 2017 18:02:01 +0000 Subject: [PATCH 07/19] catPullStream --- package.json | 2 ++ src/files/cat-pull-stream.js | 30 ++++++++++++++++++++++++++++++ src/files/index.js | 2 +- src/utils/load-commands.js | 2 +- 4 files changed, 34 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 8befbd51f..66f720a1f 100644 --- a/package.json +++ b/package.json @@ -46,10 +46,12 @@ "promisify-es6": "^1.0.3", "pump": "^1.0.3", "pull": "^2.1.1", + "pull-defer": "^0.2.2", "pull-pushable": "^2.1.1", "qs": "^6.5.1", "readable-stream": "^2.3.3", "stream-http": "^2.7.2", + "stream-to-pull-stream": "^1.7.2", "streamifier": "^0.1.1", "tar-stream": "^1.5.5" }, diff --git a/src/files/cat-pull-stream.js b/src/files/cat-pull-stream.js index e69de29bb..13cd06e07 100644 --- a/src/files/cat-pull-stream.js +++ b/src/files/cat-pull-stream.js @@ -0,0 +1,30 @@ +'use strict' + +const cleanCID = require('../utils/clean-cid') +const v = require('is-ipfs') +const toPull = require('stream-to-pull-stream') +const deferred = require('pull-defer') + +module.exports = (send) => { + return (hash, opts) => { + opts = opts || {} + + const p = deferred.source() + + try { + hash = cleanCID(hash) + } catch (err) { + if (!v.ipfsPath(hash)) { + return p.end(err) + } + } + + send({ path: 'cat', args: hash, buffer: opts.buffer }, (err, stream) => { + if (err) { return p.end(err) } + + p.resolve(toPull(stream)) + }) + + return p + } +} diff --git a/src/files/index.js b/src/files/index.js index cd6380610..3be8d0a7b 100644 --- a/src/files/index.js +++ b/src/files/index.js @@ -11,7 +11,7 @@ module.exports = (arg) => { addPullStream: require('./add-pull-stream')(send), cat: require('./cat')(send), catReadableStream: require('./cat-readable-stream')(send), - // catPullStream: require('./cat-pull-stream')(send), + catPullStream: require('./cat-pull-stream')(send), get: require('./get')(send), // getReadableStream: require('./get-readable-stream')(send), // getPullStream: require('./get-pull-stream')(send), diff --git a/src/utils/load-commands.js b/src/utils/load-commands.js index 5f55c3233..2703bc515 100644 --- a/src/utils/load-commands.js +++ b/src/utils/load-commands.js @@ -8,7 +8,7 @@ function requireCommands () { addPullStream: require('../files/add-pull-stream'), cat: require('../files/cat'), catReadableStream: require('../files/cat-readable-stream'), - // catPullStream: require('../files/cat-pull-stream'), + catPullStream: require('../files/cat-pull-stream'), get: require('../files/get'), // getReadableStream: require('../files/get-readable-stream'), // getPullStream: require('../files/get-pull-stream'), From 93202bd8ceeef1facfc5a002d5d85a9f804ac817 Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 3 Nov 2017 11:13:35 +0000 Subject: [PATCH 08/19] .get --- src/files/get.js | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/files/get.js b/src/files/get.js index 056c46d01..6597db677 100644 --- a/src/files/get.js +++ b/src/files/get.js @@ -3,6 +3,8 @@ const promisify = require('promisify-es6') const cleanCID = require('../utils/clean-cid') const TarStreamToObjects = require('../utils/tar-stream-to-objects') +const concat = require('concat-stream') +const through = require('through2') const v = require('is-ipfs') module.exports = (send) => { @@ -14,8 +16,7 @@ module.exports = (send) => { // opts is the real callback -- // 'callback' is being injected by promisify - if (typeof opts === 'function' && - typeof callback === 'function') { + if (typeof opts === 'function' && typeof callback === 'function') { callback = opts opts = {} } @@ -28,13 +29,23 @@ module.exports = (send) => { } } - const request = { - path: 'get', - args: path, - qs: opts - } + const request = { path: 'get', args: path, qs: opts } // Convert the response stream to TarStream objects - send.andTransform(request, TarStreamToObjects, callback) + send.andTransform(request, TarStreamToObjects, (err, stream) => { + if (err) { return callback(err) } + + const files = [] + stream.pipe(through.obj((file, enc, next) => { + if (file.content) { + file.content.pipe(concat((content) => { + files.push({ path: file.path, content: content }) + })) + } else { + files.push(file) + } + next() + }, () => callback(null, files))) + }) }) } From 5cfa39c4978001460071f8a5c504f9b434264b62 Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 3 Nov 2017 11:54:37 +0000 Subject: [PATCH 09/19] .getReadableStream --- src/files/cat-readable-stream.js | 3 ++- src/files/get-readable-stream.js | 34 ++++++++++++++++++++++++++++++++ src/files/index.js | 2 +- src/utils/load-commands.js | 2 +- 4 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/files/cat-readable-stream.js b/src/files/cat-readable-stream.js index d72cc6281..0ad80f919 100644 --- a/src/files/cat-readable-stream.js +++ b/src/files/cat-readable-stream.js @@ -3,6 +3,7 @@ const cleanCID = require('../utils/clean-cid') const v = require('is-ipfs') const Stream = require('readable-stream') +const pump = require('pump') module.exports = (send) => { return (hash, opts) => { @@ -21,7 +22,7 @@ module.exports = (send) => { send({ path: 'cat', args: hash, buffer: opts.buffer }, (err, stream) => { if (err) { return pt.destroy(err) } - stream.pipe(pt) + pump(stream, pt) }) return pt diff --git a/src/files/get-readable-stream.js b/src/files/get-readable-stream.js index e69de29bb..4c74dd0a7 100644 --- a/src/files/get-readable-stream.js +++ b/src/files/get-readable-stream.js @@ -0,0 +1,34 @@ +'use strict' + +const cleanCID = require('../utils/clean-cid') +const TarStreamToObjects = require('../utils/tar-stream-to-objects') +const v = require('is-ipfs') +const Stream = require('readable-stream') +const pump = require('pump') + +module.exports = (send) => { + return (path, opts) => { + opts = opts || {} + + const pt = new Stream.PassThrough({objectMode: true}) + + try { + path = cleanCID(path) + } catch (err) { + if (!v.ipfsPath(path)) { + return pt.destroy(err) + } + } + + const request = { path: 'get', args: path, qs: opts } + + // Convert the response stream to TarStream objects + send.andTransform(request, TarStreamToObjects, (err, stream) => { + if (err) { return pt.destroy(err) } + + pump(stream, pt) + }) + + return pt + } +} diff --git a/src/files/index.js b/src/files/index.js index 3be8d0a7b..6807b5a74 100644 --- a/src/files/index.js +++ b/src/files/index.js @@ -13,7 +13,7 @@ module.exports = (arg) => { catReadableStream: require('./cat-readable-stream')(send), catPullStream: require('./cat-pull-stream')(send), get: require('./get')(send), - // getReadableStream: require('./get-readable-stream')(send), + getReadableStream: require('./get-readable-stream')(send), // getPullStream: require('./get-pull-stream')(send), cp: require('./cp')(send), ls: require('./ls')(send), diff --git a/src/utils/load-commands.js b/src/utils/load-commands.js index 2703bc515..75e7988e7 100644 --- a/src/utils/load-commands.js +++ b/src/utils/load-commands.js @@ -10,7 +10,7 @@ function requireCommands () { catReadableStream: require('../files/cat-readable-stream'), catPullStream: require('../files/cat-pull-stream'), get: require('../files/get'), - // getReadableStream: require('../files/get-readable-stream'), + getReadableStream: require('../files/get-readable-stream'), // getPullStream: require('../files/get-pull-stream'), bitswap: require('../bitswap'), block: require('../block'), From 6014abe2c815516d59bb48480aebd5de3bdcd4ee Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 3 Nov 2017 12:11:23 +0000 Subject: [PATCH 10/19] getPullStream --- src/files/get-pull-stream.js | 44 ++++++++++++++++++++++++++++++++++++ src/files/index.js | 2 +- src/utils/load-commands.js | 2 +- 3 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/files/get-pull-stream.js b/src/files/get-pull-stream.js index e69de29bb..d86088e30 100644 --- a/src/files/get-pull-stream.js +++ b/src/files/get-pull-stream.js @@ -0,0 +1,44 @@ +'use strict' + +const cleanCID = require('../utils/clean-cid') +const TarStreamToObjects = require('../utils/tar-stream-to-objects') +const v = require('is-ipfs') +const through = require('through2') +const pull = require('pull-stream') +const toPull = require('stream-to-pull-stream') +const deferred = require('pull-defer') + +module.exports = (send) => { + return (path, opts) => { + opts = opts || {} + + const p = deferred.source() + + try { + path = cleanCID(path) + } catch (err) { + if (!v.ipfsPath(path)) { + return p.end(err) + } + } + + const request = { path: 'get', args: path, qs: opts } + + // Convert the response stream to TarStream objects + send.andTransform(request, TarStreamToObjects, (err, stream) => { + if (err) { return p.end(err) } + + const files = [] + stream.pipe(through.obj((file, enc, next) => { + if (file.content) { + files.push({ path: file.path, content: toPull(file.content) }) + } else { + files.push(file) + } + next() + }, () => p.resolve(pull.values(files)))) + }) + + return p + } +} diff --git a/src/files/index.js b/src/files/index.js index 6807b5a74..0c1eada1f 100644 --- a/src/files/index.js +++ b/src/files/index.js @@ -14,7 +14,7 @@ module.exports = (arg) => { catPullStream: require('./cat-pull-stream')(send), get: require('./get')(send), getReadableStream: require('./get-readable-stream')(send), - // getPullStream: require('./get-pull-stream')(send), + getPullStream: require('./get-pull-stream')(send), cp: require('./cp')(send), ls: require('./ls')(send), mkdir: require('./mkdir')(send), diff --git a/src/utils/load-commands.js b/src/utils/load-commands.js index 75e7988e7..6f8eb0af3 100644 --- a/src/utils/load-commands.js +++ b/src/utils/load-commands.js @@ -11,7 +11,7 @@ function requireCommands () { catPullStream: require('../files/cat-pull-stream'), get: require('../files/get'), getReadableStream: require('../files/get-readable-stream'), - // getPullStream: require('../files/get-pull-stream'), + getPullStream: require('../files/get-pull-stream'), bitswap: require('../bitswap'), block: require('../block'), bootstrap: require('../bootstrap'), From cf3bc0eb3ad2b0c3b5c67d0b4d9a74f460a341ed Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 3 Nov 2017 12:32:02 +0000 Subject: [PATCH 11/19] migrate extra tests --- test/get.spec.js | 248 +++++++++++---------------------------- test/sub-modules.spec.js | 7 +- 2 files changed, 76 insertions(+), 179 deletions(-) diff --git a/test/get.spec.js b/test/get.spec.js index f401235d1..007b62ea1 100644 --- a/test/get.spec.js +++ b/test/get.spec.js @@ -8,212 +8,104 @@ const dirtyChai = require('dirty-chai') const expect = chai.expect chai.use(dirtyChai) const isNode = require('detect-node') -const fs = require('fs') -const concat = require('concat-stream') -const through = require('through2') -const streamEqual = require('stream-equal') -const path = require('path') +const series = require('async/series') const loadFixture = require('aegir/fixtures') const FactoryClient = require('./ipfs-factory/client') -const testfile = loadFixture(__dirname, '/fixtures/testfile.txt') -let testfileBig -let tfbPath +describe('.get (specific go-ipfs features)', function () { + this.timeout(20 * 1000) -if (isNode) { - tfbPath = path.join(__dirname, '/fixtures/15mb.random') - testfileBig = fs.createReadStream(tfbPath, { bufferSize: 128 }) -} + function fixture (path) { + return loadFixture(__dirname, path, 'interface-ipfs-core') + } -describe('.get', function () { - this.timeout(80 * 1000) + const smallFile = { + cid: 'Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP', + data: fixture('../test/fixtures/testfile.txt') + } let ipfs let fc before((done) => { fc = new FactoryClient() - fc.spawnNode((err, node) => { - expect(err).to.not.exist() - ipfs = node - done() - }) - }) - - after((done) => fc.dismantle(done)) - - describe('Callback API', () => { - this.timeout(80 * 1000) - - it('add file for testing', (done) => { - const expectedMultihash = 'Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP' - - ipfs.files.add(testfile, (err, res) => { - expect(err).to.not.exist() - - expect(res).to.have.length(1) - expect(res[0].hash).to.equal(expectedMultihash) - expect(res[0].path).to.equal(expectedMultihash) - done() - }) - }) - it('get with no compression args', (done) => { - ipfs.get('Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP', (err, res) => { + series([ + (cb) => fc.spawnNode((err, node) => { expect(err).to.not.exist() + ipfs = node + cb() + }), + (cb) => ipfs.files.add(smallFile.data, cb) + ], done) + }) - // accumulate the files and their content - var files = [] - - res.pipe(through.obj((file, enc, next) => { - file.content.pipe(concat((content) => { - files.push({ - path: file.path, - content: content - }) - next() - })) - }, () => { - expect(files).to.be.length(1) - expect(files[0].content.toString()).to.contain(testfile.toString()) - done() - })) - }) - }) + after((done) => fc.dismantle(done)) - it('get with archive true', (done) => { - ipfs.get('Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP', { - archive: true - }, (err, res) => { - expect(err).to.not.exist() + it('no compression args', (done) => { + ipfs.get(smallFile.cid, (err, files) => { + expect(err).to.not.exist() - // accumulate the files and their content - var files = [] - - res.pipe(through.obj((file, enc, next) => { - file.content.pipe(concat((content) => { - files.push({ - path: file.path, - content: content - }) - next() - })) - }, () => { - expect(files).to.be.length(1) - expect(files[0].content.toString()).to.contain(testfile.toString()) - done() - })) - }) + expect(files).to.be.length(1) + expect(files[0].content.toString()).to.contain(smallFile.data.toString()) + done() }) + }) - it('get err with out of range compression level', (done) => { - ipfs.get('Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP', { - compress: true, - 'compression-level': 10 - }, (err, res) => { - expect(err).to.exist() - expect(err.toString()).to.equal('Error: Compression level must be between 1 and 9') - done() - }) - }) + it('archive true', (done) => { + ipfs.get(smallFile.cid, { archive: true }, (err, files) => { + expect(err).to.not.exist() - it('get with compression level', (done) => { - ipfs.get('Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP', { - compress: true, - 'compression-level': 1 - }, (err, res) => { - expect(err).to.not.exist() - done() - }) + expect(files).to.be.length(1) + expect(files[0].content.toString()).to.contain(smallFile.data.toString()) + done() }) + }) - it('add a BIG file (for testing get)', (done) => { - if (!isNode) { return done() } - - const bigFile = fs.readFileSync(tfbPath) - const expectedMultihash = 'Qme79tX2bViL26vNjPsF3DP1R9rMKMvnPYJiKTTKPrXJjq' - - ipfs.files.add(bigFile, (err, res) => { - expect(err).to.not.exist() - - expect(res).to.have.length(1) - expect(res[0].path).to.equal(expectedMultihash) - expect(res[0].hash).to.equal(expectedMultihash) - done() - }) + it('err with out of range compression level', (done) => { + ipfs.get(smallFile.cid, { + compress: true, + 'compression-level': 10 + }, (err, files) => { + expect(err).to.exist() + expect(err.toString()).to.equal('Error: Compression level must be between 1 and 9') + done() }) + }) - it('get BIG file', (done) => { - if (!isNode) { return done() } - - ipfs.get('Qme79tX2bViL26vNjPsF3DP1R9rMKMvnPYJiKTTKPrXJjq', (err, files) => { - expect(err).to.not.exist() + it('with compression level', (done) => { + ipfs.get(smallFile.cid, { compress: true, 'compression-level': 1 }, done) + }) - files.on('data', (file) => { - // Do not blow out the memory of nodejs :) - streamEqual(file.content, testfileBig, (err, equal) => { - expect(err).to.not.exist() - expect(equal).to.equal(true) - done() - }) - }) - }) + it('add path containing "+"s (for testing get)', (done) => { + if (!isNode) { return done() } + const filename = 'ti,c64x+mega++mod-pic.txt' + const subdir = 'tmp/c++files' + const expectedCid = 'QmPkmARcqjo5fqK1V1o8cFsuaXxWYsnwCNLJUYS4KeZyff' + ipfs.add([{ + path: subdir + '/' + filename, + content: Buffer.from(subdir + '/' + filename, 'utf-8') + }], (err, files) => { + expect(err).to.not.exist() + expect(files[2].hash).to.equal(expectedCid) + done() }) + }) - it('add path containing "+"s (for testing get)', (done) => { - if (!isNode) { return done() } - const filename = 'ti,c64x+mega++mod-pic.txt' - const subdir = 'tmp/c++files' - const expectedMultihash = 'QmPkmARcqjo5fqK1V1o8cFsuaXxWYsnwCNLJUYS4KeZyff' - ipfs.files.add([{ - path: subdir + '/' + filename, - content: Buffer.from(subdir + '/' + filename, 'utf-8') - }], (err, res) => { - if (err) done(err) - expect(res[2].hash).to.equal(expectedMultihash) - done() - }) - }) + it('get path containing "+"s', (done) => { + if (!isNode) { return done() } - it('get path containing "+"s', (done) => { - if (!isNode) { return done() } - const multihash = 'QmPkmARcqjo5fqK1V1o8cFsuaXxWYsnwCNLJUYS4KeZyff' - let count = 0 - ipfs.get(multihash, (err, files) => { - expect(err).to.not.exist() - files.on('data', (file) => { - if (file.path !== multihash) { - count++ - expect(file.path).to.contain('+') - if (count === 2) done() - } - }) + const cid = 'QmPkmARcqjo5fqK1V1o8cFsuaXxWYsnwCNLJUYS4KeZyff' + let count = 0 + ipfs.get(cid, (err, files) => { + expect(err).to.not.exist() + files.forEach((file) => { + if (file.path !== cid) { + count++ + expect(file.path).to.contain('+') + if (count === 2) done() + } }) }) }) - - describe('Promise API', () => { - this.timeout(80 * 1000) - - it('get', (done) => { - ipfs.get('Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP') - .then((files) => { - files.on('data', (file) => { - let buf = '' - file.content - .on('error', (err) => expect(err).to.not.exist()) - .on('data', (data) => { - buf += data.toString() - }) - .on('end', () => { - expect(buf).to.contain(testfile.toString()) - done() - }) - }) - }) - .catch((err) => { - expect(err).to.not.exist() - }) - }) - }) }) diff --git a/test/sub-modules.spec.js b/test/sub-modules.spec.js index bd6d00c66..a74ac1234 100644 --- a/test/sub-modules.spec.js +++ b/test/sub-modules.spec.js @@ -157,9 +157,14 @@ describe('submodules', () => { const files = require('../src/files')(config) expect(files.add).to.be.a('function') - expect(files.createAddStream).to.be.a('function') + expect(files.addReadableStream).to.be.a('function') + expect(files.addPullStream).to.be.a('function') expect(files.get).to.be.a('function') + expect(files.getReadableStream).to.be.a('function') + expect(files.getPullStream).to.be.a('function') expect(files.cat).to.be.a('function') + expect(files.catReadableStream).to.be.a('function') + expect(files.catPullStream).to.be.a('function') expect(files.cp).to.be.a('function') expect(files.ls).to.be.a('function') expect(files.mkdir).to.be.a('function') From 3bfdea24c3c96fc6852c5bf9bde3a4d7ea0f6039 Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 14 Nov 2017 10:37:20 +0000 Subject: [PATCH 12/19] .ls, .lsReadableStream and .lsPullStream --- src/files/index.js | 4 ++- src/ls-pull-stream.js | 64 ++++++++++++++++++++++++++++++++++++++ src/ls-readable-stream.js | 62 ++++++++++++++++++++++++++++++++++++ src/utils/load-commands.js | 7 +++-- 4 files changed, 134 insertions(+), 3 deletions(-) create mode 100644 src/ls-pull-stream.js create mode 100644 src/ls-readable-stream.js diff --git a/src/files/index.js b/src/files/index.js index 0c1eada1f..4b9796998 100644 --- a/src/files/index.js +++ b/src/files/index.js @@ -15,11 +15,13 @@ module.exports = (arg) => { get: require('./get')(send), getReadableStream: require('./get-readable-stream')(send), getPullStream: require('./get-pull-stream')(send), + + // Specific to MFS (for now) cp: require('./cp')(send), - ls: require('./ls')(send), mkdir: require('./mkdir')(send), stat: require('./stat')(send), rm: require('./rm')(send), + ls: require('./ls')(send), read: require('./read')(send), write: require('./write')(send), mv: require('./mv')(send) diff --git a/src/ls-pull-stream.js b/src/ls-pull-stream.js new file mode 100644 index 000000000..eacb7e391 --- /dev/null +++ b/src/ls-pull-stream.js @@ -0,0 +1,64 @@ +'use strict' + +const moduleConfig = require('./utils/module-config') +const pull = require('pull-stream') +const deferred = require('pull-defer') + +module.exports = (arg) => { + const send = moduleConfig(arg) + + return (args, opts, callback) => { + if (typeof (opts) === 'function') { + callback = opts + opts = {} + } + + const p = deferred.source() + + send({ path: 'ls', args: args, qs: opts }, (err, results) => { + if (err) { + return callback(err) + } + + let result = results.Objects + if (!result) { + return callback(new Error('expected .Objects in results')) + } + + result = result[0] + if (!result) { + return callback(new Error('expected one array in results.Objects')) + } + + result = result.Links + if (!Array.isArray(result)) { + return callback(new Error('expected one array in results.Objects[0].Links')) + } + + result = result.map((link) => ({ + depth: 1, + name: link.Name, + path: args + '/' + link.Name, + size: link.Size, + hash: link.Hash, + type: typeOf(link) + })) + + p.resolve(pull.values(result)) + }) + + return p + } +} + +function typeOf (link) { + switch (link.Type) { + case 1: + case 5: + return 'dir' + case 2: + return 'file' + default: + return 'unknown' + } +} diff --git a/src/ls-readable-stream.js b/src/ls-readable-stream.js new file mode 100644 index 000000000..26005c5ee --- /dev/null +++ b/src/ls-readable-stream.js @@ -0,0 +1,62 @@ +'use strict' + +const moduleConfig = require('./utils/module-config') +const Stream = require('readable-stream') + +module.exports = (arg) => { + const send = moduleConfig(arg) + + return (args, opts, callback) => { + if (typeof (opts) === 'function') { + callback = opts + opts = {} + } + + const pt = new Stream.PassThrough({objectMode: true}) + + send({ path: 'ls', args: args, qs: opts }, (err, results) => { + if (err) { return callback(err) } + + let result = results.Objects + if (!result) { + return callback(new Error('expected .Objects in results')) + } + + result = result[0] + if (!result) { + return callback(new Error('expected one array in results.Objects')) + } + + result = result.Links + if (!Array.isArray(result)) { + return callback(new Error('expected one array in results.Objects[0].Links')) + } + + result = result.map((link) => ({ + depth: 1, + name: link.Name, + path: args + '/' + link.Name, + size: link.Size, + hash: link.Hash, + type: typeOf(link) + })) + + result.forEach((item) => pt.write(item)) + pt.end() + }) + + return pt + } +} + +function typeOf (link) { + switch (link.Type) { + case 1: + case 5: + return 'dir' + case 2: + return 'file' + default: + return 'unknown' + } +} diff --git a/src/utils/load-commands.js b/src/utils/load-commands.js index 6f8eb0af3..ff46271c9 100644 --- a/src/utils/load-commands.js +++ b/src/utils/load-commands.js @@ -2,7 +2,7 @@ function requireCommands () { const cmds = { - // add and createAddStream alias + // Files (not MFS) add: require('../files/add'), addReadableStream: require('../files/add-readable-stream'), addPullStream: require('../files/add-pull-stream'), @@ -12,6 +12,10 @@ function requireCommands () { get: require('../files/get'), getReadableStream: require('../files/get-readable-stream'), getPullStream: require('../files/get-pull-stream'), + ls: require('../ls'), + lsReadableStream: require('../ls-readable-stream'), + lsPullStream: require('../ls-pull-stream'), + bitswap: require('../bitswap'), block: require('../block'), bootstrap: require('../bootstrap'), @@ -22,7 +26,6 @@ function requireCommands () { id: require('../id'), key: require('../key'), log: require('../log'), - ls: require('../ls'), mount: require('../mount'), name: require('../name'), object: require('../object'), From bd22ac93d9554cfa17b4fae820d0c0df968721b9 Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 17 Nov 2017 17:44:46 +0000 Subject: [PATCH 13/19] chore: update interface-ipfs-core --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 66f720a1f..019336a8a 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "dirty-chai": "^2.0.1", "eslint-plugin-react": "^7.4.0", "gulp": "^3.9.1", - "interface-ipfs-core": "~0.35.0", + "interface-ipfs-core": "~0.36.0", "hapi": "^16.6.2", "ipfsd-ctl": "~0.24.1", "pre-commit": "^1.2.2", From 631386d82a8818d3d7283a9c4cb4fcb6d6036672 Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 17 Nov 2017 18:19:35 +0000 Subject: [PATCH 14/19] clean up --- test/ls.spec.js | 36 +++++++++++------------------------- 1 file changed, 11 insertions(+), 25 deletions(-) diff --git a/test/ls.spec.js b/test/ls.spec.js index 4cbf845f4..82c4367fd 100644 --- a/test/ls.spec.js +++ b/test/ls.spec.js @@ -12,7 +12,7 @@ const path = require('path') const FactoryClient = require('./ipfs-factory/client') describe('.ls', function () { - this.timeout(50 * 1000) + this.timeout(40 * 1000) if (!isNode) { return } @@ -39,33 +39,19 @@ describe('.ls', function () { after((done) => fc.dismantle(done)) - describe('Callback API', () => { - it('should correctly handle a nonexist()ing hash', function (done) { - ipfs.ls('surelynotavalidhashheh?', (err, res) => { - expect(err).to.exist() - expect(res).to.not.exist() - done() - }) - }) - - it('should correctly handle a nonexist()ing path', function (done) { - ipfs.ls('QmRNjDeKStKGTQXnJ2NFqeQ9oW/folder_that_isnt_there', (err, res) => { - expect(err).to.exist() - expect(res).to.not.exist() - done() - }) + it('should correctly handle a nonexist()ing hash', function (done) { + ipfs.ls('surelynotavalidhashheh?', (err, res) => { + expect(err).to.exist() + expect(res).to.not.exist() + done() }) }) - describe('Promises API', () => { - it('should correctly handle a nonexist()ing hash', () => { - return ipfs.ls('surelynotavalidhashheh?') - .catch((err) => expect(err).to.exist()) - }) - - it('should correctly handle a nonexist()ing path', () => { - return ipfs.ls('QmRNjDeKStKGTQXnJ3NFqeQ9oW/folder_that_isnt_there') - .catch((err) => expect(err).to.exist()) + it('should correctly handle a nonexist()ing path', function (done) { + ipfs.ls('QmRNjDeKStKGTQXnJ2NFqeQ9oW/folder_that_isnt_there', (err, res) => { + expect(err).to.exist() + expect(res).to.not.exist() + done() }) }) }) From 956746f27872bc395793ac78ec50f7966e24c5ad Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 17 Nov 2017 18:28:07 +0000 Subject: [PATCH 15/19] moar cleanup --- package.json | 2 +- test/add.spec.js | 40 ---------- test/get.spec.js | 1 + test/{ => interface}/pin.spec.js | 0 test/ls.spec.js | 57 -------------- test/util.spec.js | 127 +++++++++++++++---------------- 6 files changed, 65 insertions(+), 162 deletions(-) delete mode 100644 test/add.spec.js rename test/{ => interface}/pin.spec.js (100%) delete mode 100644 test/ls.spec.js diff --git a/package.json b/package.json index 019336a8a..8fe9e0348 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "dirty-chai": "^2.0.1", "eslint-plugin-react": "^7.4.0", "gulp": "^3.9.1", - "interface-ipfs-core": "~0.36.0", + "interface-ipfs-core": "~0.36.1", "hapi": "^16.6.2", "ipfsd-ctl": "~0.24.1", "pre-commit": "^1.2.2", diff --git a/test/add.spec.js b/test/add.spec.js deleted file mode 100644 index 68f9fd529..000000000 --- a/test/add.spec.js +++ /dev/null @@ -1,40 +0,0 @@ -/* eslint-env mocha */ -/* eslint max-nested-callbacks: ["error", 8] */ -'use strict' - -const chai = require('chai') -const dirtyChai = require('dirty-chai') -const expect = chai.expect -chai.use(dirtyChai) -const isNode = require('detect-node') -const path = require('path') - -const FactoryClient = require('./ipfs-factory/client') - -describe('.add (extra tests)', () => { - if (!isNode) { return } - - let ipfs - let fc - - before(function (done) { - this.timeout(20 * 1000) // slow CI - fc = new FactoryClient() - fc.spawnNode((err, node) => { - expect(err).to.not.exist() - ipfs = node - done() - }) - }) - - after((done) => fc.dismantle(done)) - - it('add by path fails', (done) => { - const validPath = path.join(process.cwd() + '/package.json') - - ipfs.files.add(validPath, (err, res) => { - expect(err).to.exist() - done() - }) - }) -}) diff --git a/test/get.spec.js b/test/get.spec.js index 007b62ea1..008905bba 100644 --- a/test/get.spec.js +++ b/test/get.spec.js @@ -79,6 +79,7 @@ describe('.get (specific go-ipfs features)', function () { it('add path containing "+"s (for testing get)', (done) => { if (!isNode) { return done() } + const filename = 'ti,c64x+mega++mod-pic.txt' const subdir = 'tmp/c++files' const expectedCid = 'QmPkmARcqjo5fqK1V1o8cFsuaXxWYsnwCNLJUYS4KeZyff' diff --git a/test/pin.spec.js b/test/interface/pin.spec.js similarity index 100% rename from test/pin.spec.js rename to test/interface/pin.spec.js diff --git a/test/ls.spec.js b/test/ls.spec.js deleted file mode 100644 index 82c4367fd..000000000 --- a/test/ls.spec.js +++ /dev/null @@ -1,57 +0,0 @@ -/* eslint-env mocha */ -'use strict' - -const chai = require('chai') -const dirtyChai = require('dirty-chai') -const expect = chai.expect -chai.use(dirtyChai) -const isNode = require('detect-node') -const waterfall = require('async/waterfall') -const path = require('path') - -const FactoryClient = require('./ipfs-factory/client') - -describe('.ls', function () { - this.timeout(40 * 1000) - - if (!isNode) { return } - - let ipfs - let fc - let folder - - before((done) => { - fc = new FactoryClient() - waterfall([ - (cb) => fc.spawnNode(cb), - (node, cb) => { - ipfs = node - const filesPath = path.join(__dirname, '/fixtures/test-folder') - ipfs.util.addFromFs(filesPath, { recursive: true }, cb) - }, - (hashes, cb) => { - folder = hashes[hashes.length - 1].hash - expect(folder).to.be.eql('QmQao3KNcpCsdXaLGpjieFGMfXzsSXgsf6Rnc5dJJA3QMh') - cb() - } - ], done) - }) - - after((done) => fc.dismantle(done)) - - it('should correctly handle a nonexist()ing hash', function (done) { - ipfs.ls('surelynotavalidhashheh?', (err, res) => { - expect(err).to.exist() - expect(res).to.not.exist() - done() - }) - }) - - it('should correctly handle a nonexist()ing path', function (done) { - ipfs.ls('QmRNjDeKStKGTQXnJ2NFqeQ9oW/folder_that_isnt_there', (err, res) => { - expect(err).to.exist() - expect(res).to.not.exist() - done() - }) - }) -}) diff --git a/test/util.spec.js b/test/util.spec.js index 20743057f..e0a43d7d0 100644 --- a/test/util.spec.js +++ b/test/util.spec.js @@ -19,6 +19,7 @@ describe('.util', () => { before(function (done) { this.timeout(20 * 1000) // slow CI + fc = new FactoryClient() fc.spawnNode((err, node) => { expect(err).to.not.exist() @@ -29,93 +30,91 @@ describe('.util', () => { after((done) => fc.dismantle(done)) - describe('Callback API', () => { - it('.streamAdd', (done) => { - const tfpath = path.join(__dirname, '/fixtures/testfile.txt') - const rs = fs.createReadStream(tfpath) - rs.path = '' // clean the path for testing purposes + it('.streamAdd', (done) => { + const tfpath = path.join(__dirname, '/fixtures/testfile.txt') + const rs = fs.createReadStream(tfpath) + rs.path = '' // clean the path for testing purposes + + ipfs.util.addFromStream(rs, (err, result) => { + expect(err).to.not.exist() + expect(result.length).to.equal(1) + done() + }) + }) - ipfs.util.addFromStream(rs, (err, result) => { + describe('.fsAdd should add', () => { + it('a directory', (done) => { + const filesPath = path.join(__dirname, '/fixtures/test-folder') + ipfs.util.addFromFs(filesPath, { recursive: true }, (err, result) => { expect(err).to.not.exist() - expect(result.length).to.equal(1) + expect(result.length).to.be.above(8) done() }) }) - describe('.fsAdd should add', () => { - it('a directory', (done) => { - const filesPath = path.join(__dirname, '/fixtures/test-folder') - ipfs.util.addFromFs(filesPath, { recursive: true }, (err, result) => { - expect(err).to.not.exist() - expect(result.length).to.be.above(8) - done() - }) - }) - - it('a directory with an odd name', (done) => { - const filesPath = path.join(__dirname, '/fixtures/weird name folder [v0]') - ipfs.util.addFromFs(filesPath, { recursive: true }, (err, result) => { - expect(err).to.not.exist() - expect(result.length).to.be.above(8) - done() - }) - }) - - it('add and ignore a directory', (done) => { - const filesPath = path.join(__dirname, '/fixtures/test-folder') - ipfs.util.addFromFs(filesPath, { recursive: true, ignore: ['files/**'] }, (err, result) => { - expect(err).to.not.exist() - expect(result.length).to.be.below(9) - done() - }) - }) - - it('a file', (done) => { - const filePath = path.join(__dirname, '/fixtures/testfile.txt') - ipfs.util.addFromFs(filePath, (err, result) => { - expect(err).to.not.exist() - expect(result.length).to.be.equal(1) - expect(result[0].path).to.be.equal('testfile.txt') - done() - }) - }) - - it('a hidden file in a directory', (done) => { - const filesPath = path.join(__dirname, '/fixtures/test-folder') - ipfs.util.addFromFs(filesPath, { recursive: true, hidden: true }, (err, result) => { - expect(err).to.not.exist() - expect(result.length).to.be.above(10) - expect(result.map(object => object.path)).to.include('test-folder/.hiddenTest.txt') - expect(result.map(object => object.hash)).to.include('QmdbAjVmLRdpFyi8FFvjPfhTGB2cVXvWLuK7Sbt38HXrtt') - done() - }) + it('a directory with an odd name', (done) => { + const filesPath = path.join(__dirname, '/fixtures/weird name folder [v0]') + ipfs.util.addFromFs(filesPath, { recursive: true }, (err, result) => { + expect(err).to.not.exist() + expect(result.length).to.be.above(8) + done() }) }) - it('.urlAdd http', (done) => { - ipfs.util.addFromURL('http://example.com/', (err, result) => { + it('add and ignore a directory', (done) => { + const filesPath = path.join(__dirname, '/fixtures/test-folder') + ipfs.util.addFromFs(filesPath, { recursive: true, ignore: ['files/**'] }, (err, result) => { expect(err).to.not.exist() - expect(result.length).to.equal(1) + expect(result.length).to.be.below(9) done() }) }) - it('.urlAdd https', (done) => { - ipfs.util.addFromURL('https://example.com/', (err, result) => { + it('a file', (done) => { + const filePath = path.join(__dirname, '/fixtures/testfile.txt') + ipfs.util.addFromFs(filePath, (err, result) => { expect(err).to.not.exist() - expect(result.length).to.equal(1) + expect(result.length).to.be.equal(1) + expect(result[0].path).to.be.equal('testfile.txt') done() }) }) - it('.urlAdd http with redirection', (done) => { - ipfs.util.addFromURL('http://covers.openlibrary.org/book/id/969165.jpg', (err, result) => { + it('a hidden file in a directory', (done) => { + const filesPath = path.join(__dirname, '/fixtures/test-folder') + ipfs.util.addFromFs(filesPath, { recursive: true, hidden: true }, (err, result) => { expect(err).to.not.exist() - expect(result[0].hash).to.equal('QmaL9zy7YUfvWmtD5ZXp42buP7P4xmZJWFkm78p8FJqgjg') + expect(result.length).to.be.above(10) + expect(result.map(object => object.path)).to.include('test-folder/.hiddenTest.txt') + expect(result.map(object => object.hash)).to.include('QmdbAjVmLRdpFyi8FFvjPfhTGB2cVXvWLuK7Sbt38HXrtt') done() }) }) }) - describe('Promise API', () => {}) + it('.urlAdd http', function (done) { + this.timeout(20 * 1000) + + ipfs.util.addFromURL('http://example.com/', (err, result) => { + expect(err).to.not.exist() + expect(result.length).to.equal(1) + done() + }) + }) + + it('.urlAdd https', (done) => { + ipfs.util.addFromURL('https://example.com/', (err, result) => { + expect(err).to.not.exist() + expect(result.length).to.equal(1) + done() + }) + }) + + it('.urlAdd http with redirection', (done) => { + ipfs.util.addFromURL('http://covers.openlibrary.org/book/id/969165.jpg', (err, result) => { + expect(err).to.not.exist() + expect(result[0].hash).to.equal('QmaL9zy7YUfvWmtD5ZXp42buP7P4xmZJWFkm78p8FJqgjg') + done() + }) + }) }) From 5f889a2df8cb7e0cf0231157289e89eba0e2800b Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 17 Nov 2017 18:33:35 +0000 Subject: [PATCH 16/19] fix path --- test/interface/pin.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/interface/pin.spec.js b/test/interface/pin.spec.js index fbffe385d..b841568ac 100644 --- a/test/interface/pin.spec.js +++ b/test/interface/pin.spec.js @@ -3,7 +3,7 @@ 'use strict' const test = require('interface-ipfs-core') -const FactoryClient = require('./ipfs-factory/client') +const FactoryClient = require('../ipfs-factory/client') let fc From 8dc9dfe26d8ad2816c2898f4aca8d4dccadfb506 Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 17 Nov 2017 18:43:32 +0000 Subject: [PATCH 17/19] chore --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8fe9e0348..6788dd809 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "dirty-chai": "^2.0.1", "eslint-plugin-react": "^7.4.0", "gulp": "^3.9.1", - "interface-ipfs-core": "~0.36.1", + "interface-ipfs-core": "~0.36.2", "hapi": "^16.6.2", "ipfsd-ctl": "~0.24.1", "pre-commit": "^1.2.2", From e1cd5acd5887dfe81f82bcea1866d54cc3062203 Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 17 Nov 2017 18:51:26 +0000 Subject: [PATCH 18/19] chore --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6788dd809..857516052 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "dirty-chai": "^2.0.1", "eslint-plugin-react": "^7.4.0", "gulp": "^3.9.1", - "interface-ipfs-core": "~0.36.2", + "interface-ipfs-core": "~0.36.3", "hapi": "^16.6.2", "ipfsd-ctl": "~0.24.1", "pre-commit": "^1.2.2", From 971c12c42d71f7908744af5000a0b6858ac7bca7 Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 17 Nov 2017 19:09:16 +0000 Subject: [PATCH 19/19] there you go --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 857516052..d23c0a111 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "dirty-chai": "^2.0.1", "eslint-plugin-react": "^7.4.0", "gulp": "^3.9.1", - "interface-ipfs-core": "~0.36.3", + "interface-ipfs-core": "~0.36.4", "hapi": "^16.6.2", "ipfsd-ctl": "~0.24.1", "pre-commit": "^1.2.2",