UNPKG

riak-admin

Version:

Programmatically use the riak-admin tool for Basho Riak 2.0

226 lines (195 loc) 7.81 kB
###* @author Isaac Johnston <isaac.johnston@joukou.com> @copright (c) 2014 Joukou Ltd. All rights reserved. This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. ### assert = require( 'assert' ) chai = require( 'chai' ) chai.use( require( 'sinon-chai' ) ) chai.use( require( 'chai-as-promised' ) ) should = chai.should() sinon = require( 'sinon' ) rewire = require( 'rewire' ) { EventEmitter } = require( 'events' ) main = rewire( '../' ) riak_admin = main( cmd: 'sudo /usr/sbin/riak-admin' ) stubSpawn = ( stdout, stderr, code ) -> child = new class extends EventEmitter stdout: new class extends EventEmitter stderr: new class extends EventEmitter interval = setInterval( -> if stdout.length child.stdout.emit( 'data', stdout.shift() ) if stderr.length child.stderr.emit( 'data', stderr.shift() ) if not (stdout.length or stderr.length) clearInterval( interval ) child.emit( 'close', code ) , 5 ) sinon.stub().returns( child ) describe 'riak-admin', -> describe 'bucketType', -> specify 'is defined', -> should.exist( riak_admin.bucketType ) describe 'list', -> specify 'is defined', -> should.exist( riak_admin.bucketType.list ) riak_admin.bucketType.list.should.be.a( 'function' ) specify 'is an array of a single bucket type given the default state', -> main.__set__( 'spawn', stubSpawn( [ 'default (active)' ], [], 0 ) ) riak_admin.bucketType.list().should.eventually.deep.equal( [ { name: 'default' active: true } ] ) specify 'is an array of several bucket types given a non-default state', -> main.__set__( 'spawn', stubSpawn( [ 'default (active)\n', 'n_val_of_2 (not active)\n', 'user_account_bucket (active)' ], [], 0 ) ) riak_admin.bucketType.list().should.eventually.deep.equal( [ { name: 'default' active: true } { name: 'n_val_of_2' active: false } { name: 'user_account_bucket' active: true } ] ) specify 'is an Error given a failure exit code', -> main.__set__( 'spawn', stubSpawn( [ 'default (active)' ], [ 'Node is not running!' ], 1 ) ) riak_admin.bucketType.list().should.eventually.be.rejectedWith( Error, 'Node is not running!' ) describe 'status', -> specify 'is defined', -> should.exist( riak_admin.bucketType.status ) riak_admin.bucketType.status.should.be.a( 'function' ) specify 'is an object of properties for the given bucket type', -> spawn = stubSpawn( [ 'n_val_of_3 has been created and may be activated\n' '\n' 'young_vclock: 20\n' 'w: quorum\n' 'small_vclock: 50\n' 'rw: quorum\n' 'r: quorum\n' 'pw: 0\n' 'precommit: []\n' 'pr: 0\n' 'postcommit: []\n' 'old_vclock: 86400\n' 'notfound_ok: true\n' 'n_val: 3\n' 'linkfun: {modfun,riak_kv_wm_link_walker,mapreduce_linkfun}\n' 'last_write_wins: false\n' 'dw: quorum\n' 'dvv_enabled: true\n' 'chash_keyfun: {riak_core_util,chash_std_keyfun}\n' 'big_vclock: 50\n' 'basic_quorum: false\n' 'allow_mult: true\n' 'active: false\n' 'claimant: \'riak@127.0.0.1\'\n' ], [], 1 # riak-admin bucket-type status incorrectly returns non-zero exit code ) main.__set__( 'spawn', spawn ) result = riak_admin.bucketType.status( 'n_val_of_2' ) result.should.eventually.deep.equal( young_vclock: 20, w: 'quorum', small_vclock: 50, rw: 'quorum', r: 'quorum', pw: 0, precommit: '[]', pr: 0, postcommit: '[]', old_vclock: 86400, notfound_ok: true, n_val: 3, linkfun: '{modfun,riak_kv_wm_link_walker,mapreduce_linkfun}', last_write_wins: false, dw: 'quorum', dvv_enabled: true, chash_keyfun: '{riak_core_util,chash_std_keyfun}', big_vclock: 50, basic_quorum: false, allow_mult: true, active: false, claimant: '\'riak@127.0.0.1\'' ) spawn.should.have.been.calledWithMatch( 'sudo /usr/sbin/riak-admin', [ 'bucket-type', 'status', 'n_val_of_2' ] ) result specify 'is an Error given a failure exit code and output to stderr', -> spawn = stubSpawn( [], [ 'Node is not running!' ], 1 ) main.__set__( 'spawn', spawn ) result = riak_admin.bucketType.status( 'n_val_of_2' ) result.should.eventually.be.rejectedWith( Error, 'Node is not running!' ) result describe 'activate', -> specify 'is defined', -> should.exist( riak_admin.bucketType.activate ) riak_admin.bucketType.activate.should.be.a( 'function' ) specify 'activates the given bucket type', -> spawn = stubSpawn( [ 'n_val_of_2 has been activated' ], [], 0 ) main.__set__( 'spawn', spawn ) result = riak_admin.bucketType.activate( 'n_val_of_2' ) result.should.eventually.be.fulfilled spawn.should.have.been.calledWithMatch( 'sudo /usr/sbin/riak-admin', [ 'bucket-type', 'activate', 'n_val_of_2' ] ) result describe 'create', -> specify 'is defined', -> should.exist( riak_admin.bucketType.create ) riak_admin.bucketType.create.should.be.a( 'function' ) specify 'creates a new bucket type with the given properties', -> spawn = stubSpawn( [ 'n_val_of_2 created' ], [], 0 ) main.__set__( 'spawn', spawn ) result = riak_admin.bucketType.create( 'n_val_of_2', props: { n_val: 2 } ) result.should.eventually.be.fulfilled spawn.should.have.been.calledWithMatch( 'sudo /usr/sbin/riak-admin', [ 'bucket-type', 'create', 'n_val_of_2', '\'{"props":{"n_val":2}}\'' ] ) result describe 'update', -> specify 'is defined', -> should.exist( riak_admin.bucketType.create ) riak_admin.bucketType.create.should.be.a( 'function' ) specify 'updates the given bucket type with the given properties', -> spawn = stubSpawn( [ 'n_val_of_2 updated' ], [], 0 ) main.__set__( 'spawn', spawn ) result = riak_admin.bucketType.update( 'n_val_of_2', props: { allow_mult: false } ) result.should.eventually.be.fulfilled spawn.should.have.been.calledWithMatch( 'sudo /usr/sbin/riak-admin', [ 'bucket-type', 'update', 'n_val_of_2', '\'{"props":{"allow_mult":false}}\'' ] ) result xspecify 'is an Error given a failure exit code', -> spawn = stubSpawn( [], [ 'Node is not running!' ], 1 ) main.__set__( 'spawn', spawn ) result = riak_admin.bucketType.update( 'n_val_of_2', props: { allow_mult: false } ) result.should.eventually.be.rejectedWith( Error, 'Node is not running!' ) spawn.should.have.been.calledWithMatch( 'sudo /usr/sbin/riak-admin', [ 'bucket-type', 'update', 'n_val_of_2', '\'{"props":{"allow_mult":false}}\'' ] ) result