slave.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. // Copyright 2015 The MemDB Authors.
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
  12. // implied. See the License for the specific language governing
  13. // permissions and limitations under the License. See the AUTHORS file
  14. // for names of contributors.
  15. 'use strict';
  16. var P = require('bluebird');
  17. var util = require('util');
  18. var should = require('should');
  19. var env = require('../env');
  20. var Slave = require('../../app/slave');
  21. var logger = require('memdb-logger').getLogger('test', __filename);
  22. describe('slave test', function(){
  23. beforeEach(env.flushdb);
  24. it('set/del', function(cb){
  25. var opts = env.config.slave;
  26. opts.shardId = 's1';
  27. var slave = new Slave(opts);
  28. var key1 = 'player$1';
  29. var doc1 = {name : 'rain', age : 30};
  30. var key2 = 'player$2';
  31. var doc2 = null;
  32. var changes = {
  33. 'player$1' : {name : 'snow', age : undefined},
  34. 'player$2' : {name : 'tina'},
  35. };
  36. return P.try(function(){
  37. return slave.start();
  38. })
  39. .then(function(){
  40. return slave.set(key1, doc1);
  41. })
  42. .then(function(){
  43. return slave.set(key2, doc2);
  44. })
  45. .then(function(){
  46. return slave.getMulti([key1, key2])
  47. .then(function(docs){
  48. docs[key1].should.eql(doc1);
  49. (docs[key2] === null).should.eql(true);
  50. });
  51. })
  52. .then(function(){
  53. return slave.setMulti(changes);
  54. })
  55. .then(function(){
  56. return slave.getMulti([key1, key2])
  57. .then(function(docs){
  58. docs[key1].should.eql({name : 'snow'});
  59. docs[key2].should.eql({name : 'tina'});
  60. });
  61. })
  62. .then(function(){
  63. return slave.del(key2);
  64. })
  65. .then(function(){
  66. return slave.del(key1);
  67. })
  68. .then(function(){
  69. return slave.getMulti([key1, key2])
  70. .then(function(docs){
  71. Object.keys(docs).length.should.eql(0);
  72. });
  73. })
  74. .then(function(){
  75. return slave.stop();
  76. })
  77. .nodeify(cb);
  78. });
  79. it('getAll/clear', function(cb){
  80. var opts = env.config.slave;
  81. opts.shardId = 's1';
  82. var slave = new Slave(opts);
  83. var key1 = 'player$1';
  84. var doc1 = {name : 'rain', age : 30};
  85. var key2 = 'player$2';
  86. var doc2 = null;
  87. return P.try(function(){
  88. return slave.start();
  89. })
  90. .then(function(){
  91. return slave.set(key1, doc1);
  92. })
  93. .then(function(){
  94. return slave.set(key2, doc2);
  95. })
  96. .then(function(){
  97. return slave.getAllKeys()
  98. .then(function(keys){
  99. keys.length.should.eql(2);
  100. });
  101. })
  102. .then(function(){
  103. return slave.clear();
  104. })
  105. .then(function(){
  106. return slave.getAllKeys()
  107. .then(function(keys){
  108. keys.length.should.eql(0);
  109. });
  110. })
  111. .nodeify(cb);
  112. });
  113. it.skip('huge data', function(cb){
  114. this.timeout(180 * 1000);
  115. var opts = env.config.slave;
  116. opts.shardId = 's1';
  117. var slave = new Slave(opts);
  118. var count = 200000;
  119. var docs = {};
  120. for(var i=0; i<count; i++){
  121. docs['key' + i] = {_id : i, key : 'value' + i};
  122. }
  123. return P.try(function(){
  124. return slave.start();
  125. })
  126. .then(function(){
  127. return slave.setMulti(docs);
  128. })
  129. .then(function(){
  130. return slave.getAllKeys();
  131. })
  132. .then(function(keys){
  133. return slave.getMulti(keys);
  134. })
  135. .then(function(ret){
  136. Object.keys(ret).length.should.eql(count);
  137. })
  138. .nodeify(cb);
  139. });
  140. });