From da3c7327de57f0dda7496baed475bafc3ca7d2d1 Mon Sep 17 00:00:00 2001 From: Young Hahn Date: Thu, 29 Oct 2015 15:37:05 -0400 Subject: [PATCH 1/3] Add (failing) test to show getGeocoderData handles missing table gracefully --- test/geocoder.test.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/test/geocoder.test.js b/test/geocoder.test.js index 93a141d..314e3c1 100644 --- a/test/geocoder.test.js +++ b/test/geocoder.test.js @@ -13,12 +13,16 @@ var expected = { }; var tmp = require('os').tmpdir() + '/mbtiles-test-' + (+new Date).toString(16); +var tilesOnly; var index; var from; var to; try { fs.mkdirSync(tmp); } catch(err) { throw err; } +tape('setup', function(assert) { + tilesOnly = new MBTiles(tmp + '/tilesOnly.mbtiles', assert.end); +}); tape('setup', function(assert) { index = new MBTiles(__dirname + '/fixtures/geocoder_data.mbtiles', assert.end); }); @@ -37,6 +41,22 @@ tape('getGeocoderData', function(assert) { }); }); +tape('getGeocoderData (nodata)', function(assert) { + index.getGeocoderData('term', 1e6, function(err, buffer) { + assert.ifError(err); + assert.equal(buffer, undefined); + assert.end(); + }); +}); + +tape('getGeocoderData (no table)', function(assert) { + tilesOnly.getGeocoderData('term', 0, function(err, buffer) { + assert.ifError(err); + assert.equal(buffer, undefined); + assert.end(); + }); +}); + tape('putGeocoderData', function(assert) { to.startWriting(function(err) { assert.ifError(err); @@ -151,6 +171,7 @@ tape('cleanup', function(assert) { if (err) throw err; to.close(function(err) { if (err) throw err; + try { fs.unlinkSync(tmp + '/tilesOnly.mbtiles'); } catch(err) { throw err; } try { fs.unlinkSync(tmp + '/indexed.mbtiles'); } catch(err) { throw err; } try { fs.rmdirSync(tmp); } catch(err) { throw err; } assert.end(); From 86ba2021fd822360872314130c4f8fbb8a5e02e9 Mon Sep 17 00:00:00 2001 From: Young Hahn Date: Thu, 29 Oct 2015 15:39:04 -0400 Subject: [PATCH 2/3] Handle missing table errors gracefully in getGeocoderData --- lib/mbtiles.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/mbtiles.js b/lib/mbtiles.js index 53a18cc..2ca3dc2 100644 --- a/lib/mbtiles.js +++ b/lib/mbtiles.js @@ -600,6 +600,7 @@ MBTiles.prototype.putInfo = function(data, callback) { // Implements carmen#getGeocoderData method. MBTiles.prototype.getGeocoderData = function(type, shard, callback) { return this._db.get('SELECT data FROM geocoder_data WHERE type = ? AND shard = ?', type, shard, function(err, row) { + if (err && err.code === 'SQLITE_ERROR' && err.errno === 1) return callback(); if (err) return callback(err); if (!row) return callback(); zlib.inflate(row.data, callback); From f4f5b473a5f6a45e5399e37654224d29b4397ac9 Mon Sep 17 00:00:00 2001 From: Young Hahn Date: Thu, 29 Oct 2015 15:43:16 -0400 Subject: [PATCH 3/3] Cleanup after test --- test/geocoder.test.js | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/test/geocoder.test.js b/test/geocoder.test.js index 314e3c1..1b2dc89 100644 --- a/test/geocoder.test.js +++ b/test/geocoder.test.js @@ -164,20 +164,14 @@ tape('geocoderCentroid USA', function(assert) { }); }); +tape('cleanup', function(assert) { tilesOnly.close(assert.end); }); +tape('cleanup', function(assert) { index.close(assert.end); }); +tape('cleanup', function(assert) { from.close(assert.end); }); +tape('cleanup', function(assert) { to.close(assert.end); }); tape('cleanup', function(assert) { - index.close(function(err) { - if (err) throw err; - from.close(function(err) { - if (err) throw err; - to.close(function(err) { - if (err) throw err; - try { fs.unlinkSync(tmp + '/tilesOnly.mbtiles'); } catch(err) { throw err; } - try { fs.unlinkSync(tmp + '/indexed.mbtiles'); } catch(err) { throw err; } - try { fs.rmdirSync(tmp); } catch(err) { throw err; } - assert.end(); - }); - }); - }); + try { fs.unlinkSync(tmp + '/tilesOnly.mbtiles'); } catch(err) { throw err; } + try { fs.unlinkSync(tmp + '/indexed.mbtiles'); } catch(err) { throw err; } + try { fs.rmdirSync(tmp); } catch(err) { throw err; } + assert.end(); }); -