// Copyright 2015 The MemDB Authors. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or // implied. See the License for the specific language governing // permissions and limitations under the License. See the AUTHORS file // for names of contributors. 'use strict'; var P = require('bluebird'); var util = require('util'); var should = require('should'); var env = require('../env'); var Slave = require('../../app/slave'); var logger = require('memdb-logger').getLogger('test', __filename); describe('slave test', function(){ beforeEach(env.flushdb); it('set/del', function(cb){ var opts = env.config.slave; opts.shardId = 's1'; var slave = new Slave(opts); var key1 = 'player$1'; var doc1 = {name : 'rain', age : 30}; var key2 = 'player$2'; var doc2 = null; var changes = { 'player$1' : {name : 'snow', age : undefined}, 'player$2' : {name : 'tina'}, }; return P.try(function(){ return slave.start(); }) .then(function(){ return slave.set(key1, doc1); }) .then(function(){ return slave.set(key2, doc2); }) .then(function(){ return slave.getMulti([key1, key2]) .then(function(docs){ docs[key1].should.eql(doc1); (docs[key2] === null).should.eql(true); }); }) .then(function(){ return slave.setMulti(changes); }) .then(function(){ return slave.getMulti([key1, key2]) .then(function(docs){ docs[key1].should.eql({name : 'snow'}); docs[key2].should.eql({name : 'tina'}); }); }) .then(function(){ return slave.del(key2); }) .then(function(){ return slave.del(key1); }) .then(function(){ return slave.getMulti([key1, key2]) .then(function(docs){ Object.keys(docs).length.should.eql(0); }); }) .then(function(){ return slave.stop(); }) .nodeify(cb); }); it('getAll/clear', function(cb){ var opts = env.config.slave; opts.shardId = 's1'; var slave = new Slave(opts); var key1 = 'player$1'; var doc1 = {name : 'rain', age : 30}; var key2 = 'player$2'; var doc2 = null; return P.try(function(){ return slave.start(); }) .then(function(){ return slave.set(key1, doc1); }) .then(function(){ return slave.set(key2, doc2); }) .then(function(){ return slave.getAllKeys() .then(function(keys){ keys.length.should.eql(2); }); }) .then(function(){ return slave.clear(); }) .then(function(){ return slave.getAllKeys() .then(function(keys){ keys.length.should.eql(0); }); }) .nodeify(cb); }); it.skip('huge data', function(cb){ this.timeout(180 * 1000); var opts = env.config.slave; opts.shardId = 's1'; var slave = new Slave(opts); var count = 200000; var docs = {}; for(var i=0; i