couchdb-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From gar...@apache.org
Subject couchdb-nmo git commit: New online check function Check if the cluster or url is online so that the command works correctly and that we can warn the user correctly
Date Tue, 12 Jan 2016 07:49:04 GMT
Repository: couchdb-nmo
Updated Branches:
  refs/heads/master 3c917867c -> 909b275a7


New online check function
Check if the cluster or url is online so that the command works
correctly and that we can warn the user correctly


Project: http://git-wip-us.apache.org/repos/asf/couchdb-nmo/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-nmo/commit/909b275a
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-nmo/tree/909b275a
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-nmo/diff/909b275a

Branch: refs/heads/master
Commit: 909b275a7e6f7eae5ce35399fdfa34bf64cb4dde
Parents: 3c91786
Author: Garren Smith <garren.smith@gmail.com>
Authored: Tue Jan 5 16:42:14 2016 +0200
Committer: Garren Smith <garren.smith@gmail.com>
Committed: Tue Jan 12 09:48:14 2016 +0200

----------------------------------------------------------------------
 README.md                 |  1 +
 doc/api/nmo-import-csv.md |  5 ++-
 doc/cli/nmo-import-csv.md | 11 +++++--
 src/activetasks.js        | 47 ++++++++++++++-------------
 src/import-csv.js         | 72 ++++++++++++++++++++++--------------------
 src/isonline.js           | 28 +---------------
 src/query.js              | 29 +++++++++++------
 src/replicate-from.js     |  2 +-
 src/replicate-to.js       |  2 +-
 src/replicate.js          |  9 ++++--
 src/savetofile.js         | 28 +++++++++-------
 src/utils.js              | 46 +++++++++++++++++++++++++++
 test/activetasks.js       | 39 ++++++++++++-----------
 test/helpers.js           |  8 +++++
 test/import-csv.js        | 32 +++++++++++++------
 test/query.js             | 18 ++++++++---
 test/replicate-from.js    |  5 ++-
 test/replicate-to.js      | 10 ++++--
 test/replicate.js         | 15 ++++++---
 test/savetofile.js        | 12 +++----
 test/utils.js             | 25 +++++++++++++++
 21 files changed, 281 insertions(+), 163 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-nmo/blob/909b275a/README.md
----------------------------------------------------------------------
diff --git a/README.md b/README.md
index 7f0f673..8a61735 100644
--- a/README.md
+++ b/README.md
@@ -5,6 +5,7 @@
 ## Installation
 
 ```
+
 npm install -g nmo
 ```
 

http://git-wip-us.apache.org/repos/asf/couchdb-nmo/blob/909b275a/doc/api/nmo-import-csv.md
----------------------------------------------------------------------
diff --git a/doc/api/nmo-import-csv.md b/doc/api/nmo-import-csv.md
index 8961bb9..4b748cc 100644
--- a/doc/api/nmo-import-csv.md
+++ b/doc/api/nmo-import-csv.md
@@ -3,7 +3,7 @@ nmo-import-csv(3) -- import csv
 
 ## SYNOPSIS
 
-    nmo.commands['import-csv'](file, url, [csvOptions])
+    nmo.commands['import-csv'](<cluster || url>, <database>, <file>, [csvOptions])
 
 
 
@@ -13,5 +13,4 @@ Import csv file into CouchDB
 
   - import-csv:
 
-Accepts the file, url and csv options to import a file into CouchDB.
-It returns a promise.
+Accepts the name of the cluster or a url to the cluster. Along with the name of the database
and the url to the file. CSV options can be supplied for how to import the file.

http://git-wip-us.apache.org/repos/asf/couchdb-nmo/blob/909b275a/doc/cli/nmo-import-csv.md
----------------------------------------------------------------------
diff --git a/doc/cli/nmo-import-csv.md b/doc/cli/nmo-import-csv.md
index fa8fd82..210244f 100644
--- a/doc/cli/nmo-import-csv.md
+++ b/doc/cli/nmo-import-csv.md
@@ -3,7 +3,8 @@ nmo-import-csv(1) -- Bulk import CSV files
 
 ## SYNOPSIS
 
-    nmo import-csv <file> <couchdb-url> [--delimiter=','] [--columns=true]
+    nmo import-csv <cluster> <database> <file> [--delimiter=','] [--columns=true]
+    nmo import-csv <url> <database> <file> [--delimiter=','] [--columns=true]
 
 ## DESCRIPTION
 
@@ -25,6 +26,10 @@ Imports a csv file into CouchDB.
     each document
 
 
-## EXAMPLE
+EXAMPLE:
 
-    nmo import-csv /path/to/csv http://couch-url --columns=true
+This will import the file `mycsv.csv` into the `mydb` database on the cluster `mycluster`.
With the columns parameter set to true.
+    nmo import-csv mycluster mydb mycsv.csv --columns=true
+
+This will import the file `mycsv.csv` into the `mydb` database at the couchdb url `http://mycouchdb.com`.
+    nmo import-csv http://mycouchdb.com mydb mycsv.csv --columns=true

http://git-wip-us.apache.org/repos/asf/couchdb-nmo/blob/909b275a/src/activetasks.js
----------------------------------------------------------------------
diff --git a/src/activetasks.js b/src/activetasks.js
index 56caa04..ce0c85e 100644
--- a/src/activetasks.js
+++ b/src/activetasks.js
@@ -3,7 +3,7 @@ import Wreck from 'wreck';
 import Promise from 'bluebird';
 import log from 'npmlog';
 import prettyjson from 'prettyjson';
-import {getUrlFromCluster, validUrl, removeUsernamePw } from './utils';
+import {getUrlFromCluster, validUrl, removeUsernamePw, checkNodeOnline } from './utils';
 
 export function cli (cluster, filter) {
   return new Promise((resolve, reject) => {
@@ -71,8 +71,7 @@ export function filterTasks (tasks, searchTerm) {
 
 export default function getActiveTask (cluster, filter) {
   return new Promise((resolve, reject) => {
-    // `cluster` argument can be a cluster or a url.
-    // This function checks that and returns an appropriate url
+
     const url = getUrlFromCluster(cluster);
 
     let er = validUrl(url);
@@ -82,26 +81,30 @@ export default function getActiveTask (cluster, filter) {
       return reject(er);
     }
 
-    const activetasksUrl = url + '/_active_tasks';
-    const cleanedUrl = removeUsernamePw(url);
-    log.http('request', 'GET', cleanedUrl);
-
-    Wreck.get(activetasksUrl, (err, res, payload) => {
-      if (err) {
-        if (err.code === 'ECONNREFUSED' || err.code === 'ENOTFOUND') {
-          const noNodeErr = new Error('Could not connect to ' + activetasksUrl +
-            ' this could mean the node is down.');
-          noNodeErr.type = 'EUSAGE';
-          return reject(noNodeErr);
-        }
+    checkNodeOnline(url)
+    .then(() => {
+      const activetasksUrl = url + '/_active_tasks';
+      const cleanedUrl = removeUsernamePw(url);
+      log.http('request', 'GET', cleanedUrl);
+
+      Wreck.get(activetasksUrl, (err, res, payload) => {
+        if (err) {
+          if (err.code === 'ECONNREFUSED' || err.code === 'ENOTFOUND') {
+            const noNodeErr = new Error('Could not connect to ' + activetasksUrl +
+              ' this could mean the node is down.');
+            noNodeErr.type = 'EUSAGE';
+            return reject(noNodeErr);
+          }
 
-        err.type = 'EUSAGE';
-        return reject(err);
-      }
+          err.type = 'EUSAGE';
+          return reject(err);
+        }
 
-      log.http(res.statusCode, cleanedUrl);
-      const tasks = filterTasks(JSON.parse(payload), filter);
-      resolve(tasks);
-    });
+        log.http(res.statusCode, cleanedUrl);
+        const tasks = filterTasks(JSON.parse(payload), filter);
+        resolve(tasks);
+      });
+    })
+    .catch(err => reject(err));
   });
 }

http://git-wip-us.apache.org/repos/asf/couchdb-nmo/blob/909b275a/src/import-csv.js
----------------------------------------------------------------------
diff --git a/src/import-csv.js b/src/import-csv.js
index cad9039..88ae9ab 100644
--- a/src/import-csv.js
+++ b/src/import-csv.js
@@ -3,15 +3,15 @@ import Promise from 'bluebird';
 import CouchBulkImporter from 'couchbulkimporter';
 import parse from 'csv-parse';
 import BulkBadger from 'bulkbadger';
-import {checkUrl} from './utils';
+import {getUrlFromCluster, checkNodeOnline} from './utils';
 import nmo from './nmo.js';
 
-export function cli (file, url, ...csvOptions) {
-  if (!file) {
+export function cli (cluster, database, file, ...csvOptions) {
+  if (!file || !cluster || !database) {
     const msg = [
       'Usage:',
       '',
-      'nmo import-csv [file] [couchdb-url] [...<csv options> <pairs>]',
+      'nmo import-csv <cluster> <database> <file> [...<csv options>
<pairs>]',
     ].join('\n');
     const err = new Error(msg);
     err.type = 'EUSAGE';
@@ -19,44 +19,46 @@ export function cli (file, url, ...csvOptions) {
     throw err;
   }
 
-  const er = checkUrl(url);
-  if (er) {
-    throw er;
-  }
 
   const opts = {delimiter: nmo.config.get('delimiter'), columns: nmo.config.get('columns')};
-  return importcsv.apply(importcsv, [file, url, opts]);
+  return importcsv(cluster, database, file, opts);
 }
 
 
 export default importcsv;
-function importcsv (file, url, {delimiter= ',', columns= true}) {
+function importcsv (cluster, database, file, {delimiter= ',', columns= true}) {
   return new Promise((resolve, reject) => {
-    const input = fs.createReadStream(file)
-                  .on('error', (err) => {
-                    err.message = 'Error reading file - ' + err.message;
-                    reject(err);
-                  });
-
-    const parser = parse({
-      delimiter: delimiter,
-      columns: columns
-    });
-
-    input
-    .pipe(parser)
-    .pipe(new BulkBadger())
-    .pipe(new CouchBulkImporter({
-      url: url
-    }))
-    .on('error', function (err) {
-      err.message = 'Error uploading - ' + err.message;
-      reject(err);
-    })
-    .on('finish', function () {
-      console.log('Upload complete!');
-      resolve();
-    });
+    const baseUrl = getUrlFromCluster(cluster);
+    const url = baseUrl + '/' + database;
+
+    checkNodeOnline(baseUrl)
+    .then(() => {
+      const input = fs.createReadStream(file)
+                    .on('error', (err) => {
+                      err.message = 'Error reading file - ' + err.message;
+                      reject(err);
+                    });
 
+      const parser = parse({
+        delimiter: delimiter,
+        columns: columns
+      });
+
+      input
+      .pipe(parser)
+      .pipe(new BulkBadger())
+      .pipe(new CouchBulkImporter({
+        url: url
+      }))
+      .on('error', function (err) {
+        err.message = 'Error uploading - ' + err.message;
+        reject(err);
+      })
+      .on('finish', function () {
+        console.log('Upload complete!');
+        resolve();
+      });
+    })
+    .catch(err => reject(err));
   });
 }

http://git-wip-us.apache.org/repos/asf/couchdb-nmo/blob/909b275a/src/isonline.js
----------------------------------------------------------------------
diff --git a/src/isonline.js b/src/isonline.js
index baf3ae3..6ea3b0a 100644
--- a/src/isonline.js
+++ b/src/isonline.js
@@ -3,7 +3,7 @@ import log from 'npmlog';
 import Wreck from 'wreck';
 import Promise from 'bluebird';
 import nmo from './nmo.js';
-import { getClusterUrls } from './utils';
+import { getClusterUrls, isNodeOnline } from './utils';
 
 
 export const cli = isOnlineCli;
@@ -61,29 +61,3 @@ function isonline (...args) {
     }, reject);
   });
 }
-
-function isNodeOnline (url) {
-  return new Promise((resolve, reject) => {
-    const er = utils.validUrl(url);
-
-    if (er) {
-      er.type = 'EUSAGE';
-      return reject(er);
-    }
-    const cleanedUrl = utils.removeUsernamePw(url);
-    log.http('request', 'GET', cleanedUrl);
-
-    Wreck.get(url, (err, res, payload) => {
-      if (err && (err.code === 'ECONNREFUSED' || err.code === 'ENOTFOUND')) {
-        return resolve({[url]: false});
-      }
-
-      if (err) {
-        return reject(err);
-      }
-
-      log.http(res.statusCode, cleanedUrl);
-      resolve({[url]: res.statusCode < 300});
-    });
-  });
-}

http://git-wip-us.apache.org/repos/asf/couchdb-nmo/blob/909b275a/src/query.js
----------------------------------------------------------------------
diff --git a/src/query.js b/src/query.js
index 02adbae..bf11e57 100644
--- a/src/query.js
+++ b/src/query.js
@@ -1,7 +1,7 @@
 import prettyjson from 'prettyjson';
 import nmo from './nmo.js';
 import Promise from 'bluebird';
-import { getUrlFromCluster, sendJsonToNode } from './utils';
+import { checkNodeOnline, getUrlFromCluster, sendJsonToNode } from './utils';
 
 export function cli (cluster, dbname, ...args) {
   return new Promise((resolve, reject) => {
@@ -84,10 +84,15 @@ export function cli (cluster, dbname, ...args) {
 
 export function run (cluster, dbname, selector) {
   return new Promise((resolve, reject) => {
-    const url = getUrlFromCluster(cluster) + '/' + dbname + '/_find';
-    sendJsonToNode(url, selector)
-      .then(res => resolve(res))
-      .catch(err => reject(err));
+    const baseUrl = getUrlFromCluster(cluster);
+    const url = baseUrl + '/' + dbname + '/_find';
+
+    checkNodeOnline(baseUrl)
+    .then(() => {
+      return sendJsonToNode(url, selector)
+    })
+    .then(res => resolve(res))
+    .catch(err => reject(err));
   });
 }
 
@@ -100,9 +105,15 @@ export function createIndex(cluster, dbname, fields) {
       type: 'json'
     };
 
-    const url = getUrlFromCluster(cluster) + '/' + dbname + '/_index';
-    sendJsonToNode(url, index)
-      .then(res => resolve(res))
-      .catch(err => reject(err));
+    const baseUrl = getUrlFromCluster(cluster);
+    const url = baseUrl + '/' + dbname + '/_index';
+
+    checkNodeOnline(baseUrl)
+    .then(() => {
+      return sendJsonToNode(url, index)
+    })
+    .then(res => resolve(res))
+    .catch(err => reject(err));
+
   });
 }

http://git-wip-us.apache.org/repos/asf/couchdb-nmo/blob/909b275a/src/replicate-from.js
----------------------------------------------------------------------
diff --git a/src/replicate-from.js b/src/replicate-from.js
index 704176c..a845879 100644
--- a/src/replicate-from.js
+++ b/src/replicate-from.js
@@ -42,7 +42,7 @@ export default function replicateFrom(cluster, dbname, url) {
       create_target: !!nmo.config.get('create-target')
     });
 
-    replicate(replicatorUrl, replicator)
+    replicate(clusterUrl, replicatorUrl, replicator)
     .then(resolve)
     .catch(reject);
   });

http://git-wip-us.apache.org/repos/asf/couchdb-nmo/blob/909b275a/src/replicate-to.js
----------------------------------------------------------------------
diff --git a/src/replicate-to.js b/src/replicate-to.js
index 5cc567c..705eaa2 100644
--- a/src/replicate-to.js
+++ b/src/replicate-to.js
@@ -42,7 +42,7 @@ export default function replicateto(cluster, dbname, url) {
       'create_target': !!nmo.config.get('create-target')
     });
 
-    replicate(replicatorUrl, replicator)
+    replicate(clusterUrl, replicatorUrl, replicator)
     .then(resolve)
     .catch(reject);
   });

http://git-wip-us.apache.org/repos/asf/couchdb-nmo/blob/909b275a/src/replicate.js
----------------------------------------------------------------------
diff --git a/src/replicate.js b/src/replicate.js
index b89c8d3..e593c23 100644
--- a/src/replicate.js
+++ b/src/replicate.js
@@ -1,4 +1,4 @@
-import { sendJsonToNode } from './utils';
+import { sendJsonToNode, checkNodeOnline } from './utils';
 
 
 export function createReplicatorDoc (source, target, options) {
@@ -16,6 +16,9 @@ export function createReplicatorDoc (source, target, options) {
   };
 }
 
-export function replicate (replicatorUrl, doc) {
-  return sendJsonToNode(replicatorUrl, doc);
+export function replicate (clusterUrl, replicatorUrl, doc) {
+  return checkNodeOnline(clusterUrl)
+  .then(() => {
+    return sendJsonToNode(replicatorUrl, doc);
+  });
 }

http://git-wip-us.apache.org/repos/asf/couchdb-nmo/blob/909b275a/src/savetofile.js
----------------------------------------------------------------------
diff --git a/src/savetofile.js b/src/savetofile.js
index 4c1ba82..3a09af3 100644
--- a/src/savetofile.js
+++ b/src/savetofile.js
@@ -4,7 +4,7 @@ import log from 'npmlog';
 import Wreck from 'wreck';
 import Promise from 'bluebird';
 import JSONStream from 'JSONStream';
-import {getUrlFromCluster, validUrl, removeUsernamePw } from './utils';
+import {checkNodeOnline, getUrlFromCluster, validUrl, removeUsernamePw } from './utils';
 import nmo from './nmo.js';
 
 export function cli (url, dbname, file) {
@@ -61,7 +61,8 @@ export function saveResToFile (res, file) {
 export default function savetofile (cluster, dbname, file) {
   return new Promise((resolve, reject) => {
 
-    const url = getUrlFromCluster(cluster) + '/' + dbname + '/_all_docs?include_docs=true';
+    const baseUrl = getUrlFromCluster(cluster);
+    const url =  baseUrl + '/' + dbname + '/_all_docs?include_docs=true';
     const er = validUrl(url);
 
     if (er) {
@@ -71,15 +72,20 @@ export default function savetofile (cluster, dbname, file) {
     const cleanedUrl = removeUsernamePw(url);
     log.http('request', 'GET', cleanedUrl);
 
-    Wreck.request('GET', url, {}, function (err, res) {
-      if (err) {
-        return reject(err);
-      }
+    checkNodeOnline(baseUrl)
+    .then(() => {
+      Wreck.request('GET', url, {}, function (err, res) {
+        if (err) {
+          return reject(err);
+        }
+
+        log.http(res.statusCode, cleanedUrl);
+        saveResToFile(res, file)
+          .then(() => resolve())
+          .catch((err) => reject(err));
+      });
+    })
+    .catch((err) => reject(err));
 
-      log.http(res.statusCode, cleanedUrl);
-      saveResToFile(res, file)
-        .then(() => resolve())
-        .catch((err) => {reject(err);});
-    });
   });
 }

http://git-wip-us.apache.org/repos/asf/couchdb-nmo/blob/909b275a/src/utils.js
----------------------------------------------------------------------
diff --git a/src/utils.js b/src/utils.js
index 2f4fc38..aa80e03 100644
--- a/src/utils.js
+++ b/src/utils.js
@@ -90,3 +90,49 @@ export function getClusterUrls (clusterName) {
   }
   return Object.keys(nodes).map(key => nodes[key]);
 }
+
+export function checkNodeOnline (url) {
+  let connectError = new Error('Could not connect to Cluster with url ' + url);
+  connectError.type = 'EUSAGE';
+
+  return new Promise((resolve, reject) => {
+    isNodeOnline(url)
+      .then(res => {
+        if (res[url]) {
+          resolve(res);
+          return;
+        }
+
+        reject(connectError);
+      })
+      .catch(err => {
+        reject(connectError);
+      });
+  });
+}
+
+export function isNodeOnline (url) {
+  return new Promise((resolve, reject) => {
+    const er = validUrl(url);
+
+    if (er) {
+      er.type = 'EUSAGE';
+      return reject(er);
+    }
+    const cleanedUrl = removeUsernamePw(url);
+    log.http('request', 'GET', cleanedUrl);
+
+    Wreck.get(url, (err, res, payload) => {
+      if (err && (err.code === 'ECONNREFUSED' || err.code === 'ENOTFOUND')) {
+        return resolve({[url]: false});
+      }
+
+      if (err) {
+        return reject(err);
+      }
+
+      log.http(res.statusCode, cleanedUrl);
+      resolve({[url]: res.statusCode < 300});
+    });
+  });
+}

http://git-wip-us.apache.org/repos/asf/couchdb-nmo/blob/909b275a/test/activetasks.js
----------------------------------------------------------------------
diff --git a/test/activetasks.js b/test/activetasks.js
index b2b85f3..77487ce 100644
--- a/test/activetasks.js
+++ b/test/activetasks.js
@@ -4,10 +4,11 @@ import { createConfigFile } from './common';
 
 import nmo from '../src/nmo.js';
 import getActiveTask, { filterTasks, cli }  from '../src/activetasks.js';
-import { consoleMock } from './helpers';
+import { consoleMock, mockNodeIsOnline } from './helpers';
 
 describe('activetasks', () => {
   createConfigFile();
+  const url = 'http://127.0.0.11';
 
   beforeEach(() => {
     return nmo
@@ -24,7 +25,9 @@ describe('activetasks', () => {
     });
 
     it('does json', done => {
-      nock('http://127.0.0.11')
+
+      mockNodeIsOnline(url);
+      nock(url)
         .get('/_active_tasks')
         .reply(200, []);
 
@@ -36,13 +39,13 @@ describe('activetasks', () => {
       nmo
         .load({nmoconf: __dirname + '/fixtures/randomini', json: true})
         .then(() => {
-          cli('http://127.0.0.11');
+          cli(url);
         });
 
     });
 
     it('rejests errors', () => {
-      return cli('http://127.0.0.11')
+      return cli(url)
       .catch(err => {
         assert.ok(err);
       });
@@ -55,33 +58,34 @@ describe('activetasks', () => {
       });
     });
 
-
-
     it('returns no active tasks for filter', done => {
       console.log = consoleMock((msg, log) => {
         assert.ok(/for that filter/.test(msg));
         done();
       });
 
-      nock('http://127.0.0.11')
+      mockNodeIsOnline(url);
+
+      nock(url)
         .get('/_active_tasks')
         .reply(200, []);
 
-      cli('http://127.0.0.11', 'filter');
+      cli(url, 'filter');
     });
 
-
     it('returns no active tasks', done => {
       console.log = consoleMock(function (msg) {
         assert.ok(/There are no active tasks/.test(msg));
         done();
       });
 
-      nock('http://127.0.0.11')
+      mockNodeIsOnline(url)
+
+      nock(url)
         .get('/_active_tasks')
         .reply(200, []);
 
-      cli('http://127.0.0.11');
+      cli(url);
     });
 
     it('returns active tasks', done => {
@@ -100,7 +104,8 @@ describe('activetasks', () => {
                     "through_seq":"12313","type":"replication",
                     "updated_on":1444135325,"user":null}]`;
 
-      nock('http://127.0.0.11')
+      mockNodeIsOnline(url);
+      nock(url)
         .get('/_active_tasks')
         .reply(200, resp);
 
@@ -111,13 +116,10 @@ describe('activetasks', () => {
         done();
       });
 
-      cli('http://127.0.0.11');
+      cli(url);
     });
-
   });
 
-
-
   describe('getActiveTask', () => {
 
     it('rejects for invalid url', () => {
@@ -153,11 +155,12 @@ describe('activetasks', () => {
                     "through_seq":"12313","type":"replication",
                     "updated_on":1444135325,"user":null}]`;
 
-      nock('http://127.0.0.11')
+      mockNodeIsOnline(url);
+      nock(url)
         .get('/_active_tasks')
         .reply(200, resp);
 
-      return getActiveTask('http://127.0.0.11')
+      return getActiveTask(url)
       .then(activetasks => {
         assert.deepEqual(activetasks, JSON.parse(resp));
       });

http://git-wip-us.apache.org/repos/asf/couchdb-nmo/blob/909b275a/test/helpers.js
----------------------------------------------------------------------
diff --git a/test/helpers.js b/test/helpers.js
index 5d6b3d9..b0494ca 100644
--- a/test/helpers.js
+++ b/test/helpers.js
@@ -1,3 +1,11 @@
+import nock from 'nock';
+
+export function mockNodeIsOnline (url) {
+  nock(url)
+    .get('/')
+    .reply(200);
+}
+
 
 const origConsole = console.log;
 export function consoleMock (fn) {

http://git-wip-us.apache.org/repos/asf/couchdb-nmo/blob/909b275a/test/import-csv.js
----------------------------------------------------------------------
diff --git a/test/import-csv.js b/test/import-csv.js
index 2bbcbe1..b84ccaa 100644
--- a/test/import-csv.js
+++ b/test/import-csv.js
@@ -5,6 +5,7 @@ import { createConfigFile } from './common';
 import nmo from '../src/nmo.js';
 import {cli} from '../src/import-csv.js';
 import importcsv from '../src/import-csv.js';
+import {mockNodeIsOnline} from './helpers.js';
 
 const docs = {
   'docs':[
@@ -25,7 +26,6 @@ describe('import csv', () => {
 
   beforeEach(() => {
     return nmo.load({nmoconf: __dirname + '/fixtures/randomini'})
-
   });
 
   describe('cli', () => {
@@ -39,23 +39,32 @@ describe('import csv', () => {
       }
     });
 
-    it('throws error if bad url', (done) => {
+    it('throws error if database name missing', (done) => {
       try {
-        cli('file', 'bad-url');
+        cli('mycluster');
       } catch(e) {
-        assert.ok(/not a valid url/.test(e.message));
+        assert.deepEqual(e.type, 'EUSAGE');
         done();
       }
     });
 
+    it('throws error if bad url', () => {
+      return cli('mycluster', 'dataasename', 'bad-url')
+      .catch(e => {
+        assert.ok(/Cluster does not exist/.test(e.message));
+      });
+    });
+
     it('full integration works', () => {
-      nock('http://127.0.0.1:5984')
+      const url = 'http://127.0.0.1';
+      mockNodeIsOnline(url);
+      nock(url)
         .put('/fake-csv')
         .reply(200)
         .post('/fake-csv/_bulk_docs')
         .reply(200);
 
-      return cli(__dirname + '/fixtures/fake.csv', 'http://127.0.0.1:5984/fake-csv', 'delimiter=','');
+      return cli('clusterone', 'fake-csv', __dirname + '/fixtures/fake.csv', 'delimiter=','');
     });
   });
 
@@ -63,7 +72,9 @@ describe('import csv', () => {
 
     it('reports bad file', () => {
       const url = 'http://127.0.0.1:5984';
-      return importcsv('bad-fake.csv', url + '/csv-upload', {}).catch(function (err) {
+      mockNodeIsOnline(url);
+
+      return importcsv(url, 'csv-upload',  'bad-fake.csv', {}).catch(function (err) {
         assert.ok(/Error reading file -/.test(err));
       });
 
@@ -71,12 +82,12 @@ describe('import csv', () => {
 
     it('logs error for failed request', () => {
       const url = 'http://127.0.0.1:5984';
-
+      mockNodeIsOnline(url);
       nock(url)
         .put('/csv-upload')
         .reply(501);
 
-      return importcsv(__dirname + '/fixtures/fake.csv', url + '/csv-upload', {}).catch(function
(err) {
+      return importcsv(url, 'csv-upload', __dirname + '/fixtures/fake.csv', {}).catch(function
(err) {
         assert.ok(/CouchDB server answered:/.test(err));
       });
 
@@ -85,13 +96,14 @@ describe('import csv', () => {
     it('Uploads csv file to CouchDB', () => {
       const url = 'http://127.0.0.1:5984';
 
+      mockNodeIsOnline(url);
       nock(url)
         .put('/csv-upload')
         .reply(200)
         .post('/csv-upload/_bulk_docs', docs)
         .reply(200);
 
-      return importcsv(__dirname + '/fixtures/fake.csv', url + '/csv-upload', {delimiter:
',', columns: true})
+      return importcsv(url, 'csv-upload', __dirname + '/fixtures/fake.csv', {delimiter: ',',
columns: true})
       .catch(function (err) {
         throw 'error ' + err;
       });

http://git-wip-us.apache.org/repos/asf/couchdb-nmo/blob/909b275a/test/query.js
----------------------------------------------------------------------
diff --git a/test/query.js b/test/query.js
index c439066..4a033ea 100644
--- a/test/query.js
+++ b/test/query.js
@@ -1,5 +1,5 @@
 import assert from 'assert';
-import { consoleMock } from './helpers';
+import { consoleMock, mockNodeIsOnline } from './helpers';
 
 import { cli, run, createIndex } from '../src/query.js';
 
@@ -48,7 +48,9 @@ describe('Mongo Queries', () => {
         type : 'json'
       };
 
-      nock('http://127.0.0.1')
+      const url = 'http://127.0.0.1';
+      mockNodeIsOnline(url)
+      nock(url)
         .post('/mydb/_index', index)
         .reply(200, {result: 'created'});
 
@@ -76,8 +78,10 @@ describe('Mongo Queries', () => {
   describe('run', () => {
     it('requests find run correctly', () => {
       const selector = {selector: {_id: 'one'}};
+      const url = 'http://127.0.0.1';
 
-      nock('http://127.0.0.1')
+      mockNodeIsOnline(url);
+      nock(url)
         .post('/mydb/_find', selector)
         .reply(200, {docs: [{id: 'one', rev: '123'}]});
 
@@ -90,7 +94,9 @@ describe('Mongo Queries', () => {
     it('returns error', () => {
       var selector = {selector: {_id: 'one'}};
 
-      nock('http://127.0.0.1')
+      const url = 'http://127.0.0.1';
+
+      nock(url)
         .post('/mydb/_find', selector)
         .reply(500, {message: 'error'});
 
@@ -110,7 +116,9 @@ describe('Mongo Queries', () => {
         type : 'json'
       };
 
-      nock('http://127.0.0.1')
+      const url = 'http://127.0.0.1';
+      mockNodeIsOnline(url);
+      nock(url)
         .post('/mydb/_index', index)
         .reply(200, {result: 'created'});
 

http://git-wip-us.apache.org/repos/asf/couchdb-nmo/blob/909b275a/test/replicate-from.js
----------------------------------------------------------------------
diff --git a/test/replicate-from.js b/test/replicate-from.js
index d03d753..12d5344 100644
--- a/test/replicate-from.js
+++ b/test/replicate-from.js
@@ -1,6 +1,7 @@
 import assert from 'assert';
 
 import { cli } from '../src/replicate-from.js';
+import {mockNodeIsOnline} from './helpers.js';
 
 import * as common from './common.js';
 import nmo from '../src/nmo.js';
@@ -39,7 +40,9 @@ describe('replicate-from', () => {
         'create_target':false
       };
 
-      nock('http://127.0.0.1')
+      const url = 'http://127.0.0.1';
+      mockNodeIsOnline(url)
+      nock(url)
         .post('/_replicator', doc)
         .reply(200, {ok: true, id: '123', rev: '123'});
 

http://git-wip-us.apache.org/repos/asf/couchdb-nmo/blob/909b275a/test/replicate-to.js
----------------------------------------------------------------------
diff --git a/test/replicate-to.js b/test/replicate-to.js
index 078d307..92ab9d6 100644
--- a/test/replicate-to.js
+++ b/test/replicate-to.js
@@ -1,6 +1,7 @@
 import assert from 'assert';
 
 import { cli } from '../src/replicate-to.js';
+import {mockNodeIsOnline} from './helpers.js';
 
 import * as common from './common.js';
 import nmo from '../src/nmo.js';
@@ -38,7 +39,9 @@ describe('replicate-to', () => {
         'create_target':false
       };
 
-      nock('http://127.0.0.1')
+      const url = 'http://127.0.0.1';
+      mockNodeIsOnline(url);
+      nock(url)
         .post('/_replicator', doc)
         .reply(200, {ok: true, id: '123', rev: '123'});
 
@@ -63,7 +66,10 @@ describe('replicate-to', () => {
             'create_target':true
           };
 
-          nock('http://127.0.0.1')
+          const url = 'http://127.0.0.1';
+          mockNodeIsOnline(url);
+
+          nock(url)
             .post('/_replicator', doc)
             .reply(200, {ok: true, id: '123', rev: '123'});
 

http://git-wip-us.apache.org/repos/asf/couchdb-nmo/blob/909b275a/test/replicate.js
----------------------------------------------------------------------
diff --git a/test/replicate.js b/test/replicate.js
index 741a6be..bae782d 100644
--- a/test/replicate.js
+++ b/test/replicate.js
@@ -1,5 +1,6 @@
 import assert from 'assert';
 import nock from 'nock';
+import {mockNodeIsOnline} from './helpers.js';
 
 import {createReplicatorDoc, replicate} from '../src/replicate.js';
 
@@ -40,22 +41,28 @@ describe('replicate', () => {
         'create_target': true
       };
 
-      nock('http://127.0.0.1')
+      const url = 'http://127.0.0.1';
+
+      mockNodeIsOnline(url);
+      nock(url)
         .post('/_replicator')
         .reply(200, data);
 
-      return replicate('http://127.0.0.1/_replicator', payload)
+      return replicate(url, url + '/_replicator', payload)
       .then(resp => {
         assert.deepEqual(resp, data);
       });
     });
 
     it('returns error on failed replication', () => {
-      nock('http://127.0.0.1')
+      const url = 'http://127.0.0.1';
+
+      mockNodeIsOnline(url);
+      nock(url)
         .post('/_replicator')
         .reply(500, {reason: 'ERROR'});
 
-      return replicate('http://127.0.0.1/_replicator', {})
+      return replicate(url, url + '/_replicator', {})
       .catch(err => {
         assert.deepEqual(err.type, 'EUSAGE');
       });

http://git-wip-us.apache.org/repos/asf/couchdb-nmo/blob/909b275a/test/savetofile.js
----------------------------------------------------------------------
diff --git a/test/savetofile.js b/test/savetofile.js
index fd7bab3..e56c45a 100644
--- a/test/savetofile.js
+++ b/test/savetofile.js
@@ -1,5 +1,6 @@
 import assert from 'assert';
 import {unlinkSync, readFileSync } from 'fs';
+import {mockNodeIsOnline} from './helpers.js';
 
 import savetofile, {cli} from '../src/savetofile.js';
 import nmo from '../src/nmo.js';
@@ -61,6 +62,7 @@ describe('savetofile', () => {
 
     it('get all docs for db', () => {
       const url = 'http://127.0.1.20';
+      mockNodeIsOnline(url);
       nock(url)
         .get('/test-db/_all_docs?include_docs=true')
         .reply(200, []);
@@ -97,6 +99,7 @@ describe('savetofile', () => {
       };
       const url = 'http://127.0.1.20';
 
+      mockNodeIsOnline(url);
       nock(url)
         .get('/test-db/_all_docs?include_docs=true')
         .reply(200, resp);
@@ -138,6 +141,7 @@ describe('savetofile', () => {
       };
       const url = 'http://127.0.1.20';
 
+      mockNodeIsOnline(url);
       nock(url)
         .get('/test-db/_all_docs?include_docs=true')
         .reply(200, resp);
@@ -154,13 +158,5 @@ describe('savetofile', () => {
           });
         });
     });
-
-    it('returns error on failed fetch of data', () => {
-      return savetofile('http://127.0.0.1:5555', 'db', 'the-file')
-      .catch(err => {
-        assert.ok(/ECONNREFUSED/.test(err.message));
-      });
-    });
   });
-
 });

http://git-wip-us.apache.org/repos/asf/couchdb-nmo/blob/909b275a/test/utils.js
----------------------------------------------------------------------
diff --git a/test/utils.js b/test/utils.js
index 1b3b076..b2c8b91 100644
--- a/test/utils.js
+++ b/test/utils.js
@@ -4,6 +4,7 @@ import nock from 'nock';
 import * as utils from '../src/utils.js';
 import * as common from './common.js';
 import nmo from '../src/nmo.js';
+import { mockNodeIsOnline } from './helpers';
 
 const nmoconf = {nmoconf: __dirname + '/fixtures/randomini'};
 common.createConfigFile();
@@ -157,3 +158,27 @@ describe('utils: removeUsernamePw', () => {
     done();
   });
 });
+
+describe('utils: checkNodeOnline', () => {
+
+  it('resolves for node that is online', () => {
+    const url = 'http://127.0.0.45';
+    mockNodeIsOnline(url);
+    return utils.checkNodeOnline(url)
+    .then(res => {
+      assert.ok(res[url]);
+    });
+
+  });
+
+  it('rejects for node that is offline', () => {
+    const url = 'http://127.0.0.45';
+
+    return utils.checkNodeOnline(url)
+    .catch(err => {
+      assert.ok(/Could not connect/.test(err.message));
+    });
+
+  });
+
+});


Mime
View raw message