You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
2.0 KiB
60 lines
2.0 KiB
/* Copyright (c) 2012-2016 LevelUP contributors |
|
* See list at <https://github.com/level/levelup#contributing> |
|
* MIT License <https://github.com/level/levelup/blob/master/LICENSE.md> |
|
*/ |
|
|
|
var delayed = require('delayed') |
|
var common = require('./common') |
|
var SlowStream = require('slow-stream') |
|
var refute = require('referee').refute |
|
var buster = require('bustermove') |
|
|
|
buster.testCase('Snapshots', { |
|
'setUp': common.readStreamSetUp, |
|
|
|
'tearDown': common.commonTearDown, |
|
|
|
'test ReadStream implicit snapshot': function (done) { |
|
this.openTestDatabase(function (db) { |
|
// 1) Store 100 random numbers stored in the database |
|
db.batch(this.sourceData.slice(), function (err) { |
|
refute(err) |
|
|
|
// 2) Create an iterator on the current data, pipe it through a SlowStream |
|
// to make *sure* that we're going to be reading it for longer than it |
|
// takes to overwrite the data in there. |
|
|
|
var rs = db.readStream() |
|
rs = rs.pipe(new SlowStream({ maxWriteInterval: 5 })) |
|
rs.on('data', this.dataSpy) |
|
rs.once('end', this.endSpy) |
|
|
|
rs.once('close', delayed.delayed(this.verify.bind(this, rs, done), 0.05)) |
|
|
|
process.nextTick(function () { |
|
// 3) Concoct and write new random data over the top of existing items. |
|
// If we're not using a snapshot then then we'd expect the test |
|
// to fail because it'll pick up these new values rather than the |
|
// old ones. |
|
var newData = [] |
|
var i |
|
var k |
|
|
|
for (i = 0; i < 100; i++) { |
|
k = (i < 10 ? '0' : '') + i |
|
newData.push({ |
|
type: 'put', |
|
key: k, |
|
value: Math.random() |
|
}) |
|
} |
|
// using sync:true here to ensure it's written fully to disk |
|
db.batch(newData.slice(), { sync: true }, function (err) { |
|
refute(err) |
|
// we'll return here faster than it takes the readStream to complete |
|
}) |
|
}) |
|
}.bind(this)) |
|
}.bind(this)) |
|
} |
|
})
|
|
|