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.

76 lines
1.9 KiB

var test = require('tape');
var leveldown = require('leveldown');
var iteratorStream = require('./');
var through2 = require('through2');
var abstract = require('abstract-leveldown');
var Codec = require('level-codec');
var EncodingError = require('level-errors').EncodingError;
var db;
var data = [
{ type: 'put', key: 'foobatch1', value: 'bar1' },
{ type: 'put', key: 'foobatch2', value: 'bar2' },
{ type: 'put', key: 'foobatch3', value: 'bar3' }
];
test('setup', function(t){
db = leveldown(__dirname + '/db-test');
db.open(function(err){
t.error(err);
db.batch(data, function(err){
t.error(err);
t.end();
});
});
});
test('simple', function(t){
var idx = 0;
var stream = iteratorStream(db.iterator());
stream.pipe(through2.obj(function(kv, _, done){
t.ok(Buffer.isBuffer(kv.key));
t.ok(Buffer.isBuffer(kv.value));
t.equal(kv.key.toString(), data[idx].key);
t.equal(kv.value.toString(), data[idx].value);
idx++;
done();
}, function(){
t.equal(idx, data.length);
stream.on('close', function(){
t.end();
});
}));
});
test('destroy', function(t){
var stream = iteratorStream(db.iterator());
stream.on('close', t.end.bind(t));
stream.destroy();
});
test('decoder', function(t){
var codec = new Codec({ valueEncoding: 'binary' });
var stream = iteratorStream(db.iterator(), {
decoder: codec.createStreamDecoder({ values: true })
});
stream.once('data', function(value){
t.ok(Buffer.isBuffer(value));
t.equal(value.toString(), 'bar1');
t.end();
});
});
test('decoder error', function(t){
t.plan(2);
var codec = new Codec({ valueEncoding: 'json' });
var stream = iteratorStream(db.iterator(), {
decoder: codec.createStreamDecoder({ values: true })
});
stream.once('error', function(err){
t.ok(err instanceof EncodingError);
});
stream.once('close', function(){
t.ok(true);
});
stream.on('data', function(){});
});