1// Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
2assert = require('assert')
3RDB    = require('./build/Release/rdb').DBWrapper
4exec   = require('child_process').exec
5util   = require('util')
6
7DB_NAME = '/tmp/rocksdbtest-' + process.getuid()
8
9a = RDB()
10assert.equal(a.open(DB_NAME, ['b']), false)
11
12exec(
13    util.format(
14        "node -e \"RDB = require('./build/Release/rdb').DBWrapper; \
15        a = RDB('%s'); a.createColumnFamily('b')\"",
16        DB_NAME
17    ).exitCode, null
18)
19
20
21exec(
22    util.format(
23        "node -e \"RDB = require('./build/Release/rdb').DBWrapper; \
24        a = RDB('%s', ['b'])\"",
25        DB_NAME
26    ).exitCode, null
27)
28
29exec('rm -rf ' + DB_NAME)
30
31a = RDB()
32assert.equal(a.open(DB_NAME, ['a']), false)
33assert(a.open(DB_NAME), true)
34assert(a.createColumnFamily('temp'))
35
36b = RDB()
37assert.equal(b.open(DB_NAME), false)
38
39exec('rm -rf ' + DB_NAME)
40
41DB_NAME += 'b'
42
43a = RDB()
44assert(a.open(DB_NAME))
45assert.equal(a.constructor.name, 'DBWrapper')
46assert.equal(a.createColumnFamily(), false)
47assert.equal(a.createColumnFamily(1), false)
48assert.equal(a.createColumnFamily(['']), false)
49assert(a.createColumnFamily('b'))
50assert.equal(a.createColumnFamily('b'), false)
51
52// Get and Put
53assert.equal(a.get(1), null)
54assert.equal(a.get(['a']), null)
55assert.equal(a.get('a', 1), null)
56assert.equal(a.get(1, 'a'), null)
57assert.equal(a.get(1, 1), null)
58
59assert.equal(a.put(1), false)
60assert.equal(a.put(['a']), false)
61assert.equal(a.put('a', 1), false)
62assert.equal(a.put(1, 'a'), false)
63assert.equal(a.put(1, 1), false)
64assert.equal(a.put('a', 'a', 1), false)
65assert.equal(a.put('a', 1, 'a'), false)
66assert.equal(a.put(1, 'a', 'a'), false)
67assert.equal(a.put('a', 1, 1), false)
68assert.equal(a.put(1, 'a', 1), false)
69assert.equal(a.put(1, 1, 'a'), false)
70assert.equal(a.put(1, 1, 1), false)
71
72
73assert.equal(a.get(), null)
74assert.equal(a.get('a'), null)
75assert.equal(a.get('a', 'c'), null)
76assert.equal(a.put(), false)
77assert.equal(a.put('a'), false)
78assert.equal(a.get('a', 'b', 'c'), null)
79
80assert(a.put('a', 'axe'))
81assert(a.put('a', 'first'))
82assert.equal(a.get('a'), 'first')
83assert.equal(a.get('a', 'b'), null)
84assert.equal(a.get('a', 'c'), null)
85
86assert(a.put('a', 'apple', 'b'))
87assert.equal(a.get('a', 'b'), 'apple')
88assert.equal(a.get('a'), 'first')
89assert(a.put('b', 'butter', 'b'), 'butter')
90assert(a.put('b', 'banana', 'b'))
91assert.equal(a.get('b', 'b'), 'banana')
92assert.equal(a.get('b'), null)
93assert.equal(a.get('b', 'c'), null)
94
95// Delete
96assert.equal(a.delete(1), false)
97assert.equal(a.delete('a', 1), false)
98assert.equal(a.delete(1, 'a'), false)
99assert.equal(a.delete(1, 1), false)
100
101assert.equal(a.delete('b'), true)
102assert(a.delete('a'))
103assert.equal(a.get('a'), null)
104assert.equal(a.get('a', 'b'), 'apple')
105assert.equal(a.delete('c', 'c'), false)
106assert.equal(a.delete('c', 'b'), true)
107assert(a.delete('b', 'b'))
108assert.equal(a.get('b', 'b'), null)
109
110// Dump
111console.log("MARKER 1")
112assert(a.dump())
113console.log("Should be no output between 'MARKER 1' and here\n")
114console.log('Next line should be "a" => "apple"')
115assert(a.dump('b'))
116
117console.log("\nMARKER 2")
118assert.equal(a.dump('c'), false)
119console.log("Should be no output between 'MARKER 2' and here\n")
120
121// WriteBatch
122
123
124// Clean up test database
125exec('rm -rf ' + DB_NAME)
126