UNPKG

5.01 kBJavaScriptView Raw
1var db
2 , verifyNotFoundError = require('./util').verifyNotFoundError
3 , isTypedArray = require('./util').isTypedArray
4 , sourceData = (function () {
5 var d = []
6 , i = 0
7 , k
8 for (; i < 100; i++) {
9 k = (i < 10 ? '0' : '') + i
10 d.push({
11 type : 'put'
12 , key : k
13 , value : Math.random()
14 })
15 }
16 d.push({
17 type : 'put'
18 , key : "foo"
19 , value : "bar"
20 })
21 return d
22 }())
23 , transformSource = function (d) {
24 return { key: d.key, value: String(d.value) }
25 }
26 , valueTransformSource = function (d) {
27 return String(d.value)
28 }
29
30
31module.exports.setUp = function (NoSqlDatabase, test, testCommon) {
32 test('setUp common', testCommon.setUp)
33 test('setUp db', function (t) {
34 db = NoSqlDatabase(testCommon.location())
35 db.open(function () {
36 db.batch(sourceData, t.end.bind(t))
37 })
38 })
39}
40
41module.exports.args = function (test) {
42}
43
44module.exports.mgetSync = function (test) {
45 test('test mGet() keys=false sync', function (t) {
46 var arr = db.mGetSync(["01","02","03",'foo'], {keys: false})
47 t.equal(arr.length, 4)
48 var expected = sourceData.slice(1, 4).map(valueTransformSource)
49 expected.push("bar")
50 t.deepEqual(arr, expected)
51 t.end()
52 })
53}
54
55module.exports.mget = function (test) {
56 test('test simple mGet() with default options', function (t) {
57 db.mGet(['foo'], function (err, arr) {
58 t.error(err)
59 t.deepEqual(arr, [{key:'foo', value:'bar'}])
60 t.end()
61 })
62 })
63
64 test('test simple mGet() with asBuffer option', function (t) {
65 db.mGet(['foo'], {asBuffer: true}, function (err, arr) {
66 t.error(err)
67 t.type(arr, 'Array')
68 t.equal(arr.length, 1)
69 value = arr[0].value
70 t.ok(typeof value !== 'string', 'should not be string by default')
71
72 var result
73 if (isTypedArray(value)) {
74 result = String.fromCharCode.apply(null, new Uint16Array(value))
75 } else {
76 t.ok(typeof Buffer != 'undefined' && value instanceof Buffer)
77 try {
78 result = value.toString()
79 } catch (e) {
80 t.error(e, 'should not throw when converting value to a string')
81 }
82 }
83 t.equal(result, 'bar')
84 t.end()
85 })
86 })
87
88 test('test simple mGet() with specified keys', function (t) {
89 db.mGet(["01","02","03",'foo'], function (err, arr) {
90 t.error(err)
91 t.equal(arr.length, 4)
92 var expected = sourceData.slice(1, 4).map(transformSource)
93 expected.push({key:"foo", value:"bar"})
94 t.deepEqual(arr, expected)
95 t.end()
96 })
97 })
98 test('test mGet() raiseError', function (t) {
99 db.mGet(["01","02","03",'foo', 'Not Found'], {raiseError: true}, function (err, arr) {
100 t.ok(err, "should err")
101 t.ok((/NotFound/i).test(err))
102 t.ok(arr == null)
103 t.end()
104 })
105 })
106 test('test mGet() raiseError=false', function (t) {
107 db.mGet(["01","02","03",'foo', 'Not Found'], {raiseError: false}, function (err, arr) {
108 t.error(err)
109 t.equal(arr.length, 5)
110 var expected = sourceData.slice(1, 4).map(transformSource)
111 expected.push({key:"foo", value:"bar"})
112 expected.push({key:"Not Found", value:undefined})
113 t.deepEqual(arr, expected)
114 t.end()
115 })
116 })
117 test('test mGet() keys=false', function (t) {
118 db.mGet(["01","02","03",'foo'], {keys: false}, function (err, arr) {
119 t.error(err)
120 t.equal(arr.length, 4)
121 var expected = sourceData.slice(1, 4).map(valueTransformSource)
122 expected.push("bar")
123 t.deepEqual(arr, expected)
124 t.end()
125 })
126 })
127
128 test('test simultaniously mGet()', function (t) {
129 db.put('hello', 'world', function (err) {
130 t.error(err)
131 var r = 0
132 , done = function () {
133 if (++r == 20)
134 t.end()
135 }
136 , i = 0
137 , j = 0
138
139 for (; i < 10; ++i)
140 db.mGet(['hello'], function(err, arr) {
141 t.error(err)
142 t.deepEqual(arr, [{key:'hello', value:'world'}])
143 done()
144 })
145
146 for (; j < 10; ++j)
147 db.mGet(['not found'], function(err, value) {
148 t.ok(err, 'should error')
149 t.ok(verifyNotFoundError(err), 'should have correct error message')
150 t.ok(typeof value == 'undefined', 'value is undefined')
151 done()
152 })
153 })
154 })
155}
156
157module.exports.tearDown = function (test, testCommon) {
158 test('tearDown', function (t) {
159 db.close(testCommon.tearDown.bind(null, t))
160 })
161}
162
163module.exports.sync = function (test) {
164 test('sync', function (t) {
165 if (db._mGetSync) {
166 delete db.__proto__._mGet
167 }
168 t.end()
169 })
170}
171
172module.exports.all = function (NoSqlDatabase, test, testCommon) {
173 module.exports.setUp(NoSqlDatabase, test, testCommon)
174 module.exports.args(test)
175 module.exports.mget(test)
176 module.exports.mgetSync(test)
177 if (NoSqlDatabase.prototype._mGetSync) {
178 module.exports.sync(test)
179 module.exports.mget(test)
180 }
181 module.exports.tearDown(test, testCommon)
182}