boris
Version:
Boris a pure javascript parser for the Redis serialization protocol (RESP).
100 lines (89 loc) • 5.31 kB
JavaScript
#!/usr/bin/env node
/*
* Boris Multi Data Chunk Config get Replies Test
*/
var log = console.log
, assert = require( 'assert' )
, util = require( 'util' )
, Bolgia = require( 'bolgia' )
, Boris = require( '../' )
, b = Boris()
// expected result from "CONFIG GET *""
, expected = [
'dbfilename', 'dump.rdb',
'requirepass', '',
'masterauth', '',
'unixsocket', '',
'logfile', '',
'pidfile', '/var/run/redis.pid',
'maxmemory', 0,
'maxmemory-samples',3,
'timeout', 0,
'tcp-keepalive', 0,
'auto-aof-rewrite-percentage', 100,
'auto-aof-rewrite-min-size', 67108864,
'hash-max-ziplist-entries', 512,
'hash-max-ziplist-value', 64,
'list-max-ziplist-entries', 512,
'list-max-ziplist-value', 64,
'set-max-intset-entries', 512,
'zset-max-ziplist-entries', 128,
'zset-max-ziplist-value', 64,
'lua-time-limit', 5000,
'slowlog-log-slower-than', 10000,
'slowlog-max-len', 128,
'port', 6379,
'tcp-backlog', 511,
'databases', 16,
'repl-ping-slave-period', 10,
'repl-timeout', 60,
'repl-backlog-size', 1048576,
'repl-backlog-ttl', 3600,
'maxclients', 3984,
'watchdog-period', 0,
'slave-priority', 100,
'min-slaves-to-write', 0,
'min-slaves-max-lag', 10,
'hz', 10,
'no-appendfsync-on-rewrite', 'no',
'slave-serve-stale-data', 'yes',
'slave-read-only', 'yes',
'stop-writes-on-bgsave-error', 'yes',
'daemonize', 'no',
'rdbcompression', 'yes',
'rdbchecksum', 'yes',
'activerehashing', 'yes',
'repl-disable-tcp-nodelay', 'no',
'aof-rewrite-incremental-fsync', 'yes',
'appendonly', 'no',
'dir', '/tmp',
'maxmemory-policy', 'volatile-lru',
'appendfsync', 'everysec',
'save', '3600 1 300 100 60 10000',
'loglevel', 'notice',
'client-output-buffer-limit', 'normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60',
'unixsocketperm', 0,
'slaveof', '',
'notify-keyspace-events', '',
'bind', ''
]
// parse encoded Redis reply to CONFIG GET *
, config_get_reply = "*112\r\n$10\r\ndbfilename\r\n$8\r\ndump.rdb\r\n$11\r\nrequirepass\r\n$0\r\n\r\n$10\r\nmasterauth\r\n$0\r\n\r\n$10\r\nunixsocket\r\n$0\r\n\r\n$7\r\nlogfile\r\n$0\r\n\r\n$7\r\npidfile\r\n$18\r\n/var/run/redis.pid\r\n$9\r\nmaxmemory\r\n$1\r\n0\r\n$17\r\nmaxmemory-samples\r\n$1\r\n3\r\n$7\r\ntimeout\r\n$1\r\n0\r\n$13\r\ntcp-keepalive\r\n$1\r\n0\r\n$27\r\nauto-aof-rewrite-percentage\r\n$3\r\n100\r\n$25\r\nauto-aof-rewrite-min-size\r\n$8\r\n67108864\r\n$24\r\nhash-max-ziplist-entries\r\n$3\r\n512\r\n$22\r\nhash-max-ziplist-value\r\n$2\r\n64\r\n$24\r\nlist-max-ziplist-entries\r\n$3\r\n512\r\n$22\r\nlist-max-ziplist-value\r\n$2\r\n64\r\n$22\r\nset-max-intset-entries\r\n$3\r\n512\r\n$24\r\nzset-max-ziplist-entries\r\n$3\r\n128\r\n$22\r\nzset-max-ziplist-value\r\n$2\r\n64\r\n$14\r\nlua-time-limit\r\n$4\r\n5000\r\n$23\r\nslowlog-log-slower-than\r\n$5\r\n10000\r\n$15\r\nslowlog-max-len\r\n$3\r\n128\r\n$4\r\nport\r\n$4\r\n6379\r\n$11\r\ntcp-backlog\r\n$3\r\n511\r\n$9\r\ndatabases\r\n$2\r\n16\r\n$22\r\nrepl-ping-slave-period\r\n$2\r\n10\r\n$12\r\nrepl-timeout\r\n$2\r\n60\r\n$17\r\nrepl-backlog-size\r\n$7\r\n1048576\r\n$16\r\nrepl-backlog-ttl\r\n$4\r\n3600\r\n$10\r\nmaxclients\r\n$4\r\n3984\r\n$15\r\nwatchdog-period\r\n$1\r\n0\r\n$14\r\nslave-priority\r\n$3\r\n100\r\n$19\r\nmin-slaves-to-write\r\n$1\r\n0\r\n$18\r\nmin-slaves-max-lag\r\n$2\r\n10\r\n$2\r\nhz\r\n$2\r\n10\r\n$25\r\nno-appendfsync-on-rewrite\r\n$2\r\nno\r\n$22\r\nslave-serve-stale-data\r\n$3\r\nyes\r\n$15\r\nslave-read-only\r\n$3\r\nyes\r\n$27\r\nstop-writes-on-bgsave-error\r\n$3\r\nyes\r\n$9\r\ndaemonize\r\n$2\r\nno\r\n$14\r\nrdbcompression\r\n$3\r\nyes\r\n$11\r\nrdbchecksum\r\n$3\r\nyes\r\n$15\r\nactiverehashing\r\n$3\r\nyes\r\n$24\r\nrepl-disable-tcp-nodelay\r\n$2\r\nno\r\n$29\r\naof-rewrite-incremental-fsync\r\n$3\r\nyes\r\n$10\r\nappendonly\r\n$2\r\nno\r\n$3\r\ndir\r\n$4\r\n/tmp\r\n$16\r\nmaxmemory-policy\r\n$12\r\nvolatile-lru\r\n$11\r\nappendfsync\r\n$8\r\neverysec\r\n$4\r\nsave\r\n$23\r\n3600 1 300 100 60 10000\r\n$8\r\nloglevel\r\n$6\r\nnotice\r\n$26\r\nclient-output-buffer-limit\r\n$67\r\nnormal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60\r\n$14\r\nunixsocketperm\r\n$1\r\n0\r\n$7\r\nslaveof\r\n$0\r\n\r\n$22\r\nnotify-keyspace-events\r\n$0\r\n\r\n$4\r\nbind\r\n$0\r\n\r\n"
, rdata = new Buffer( config_get_reply )
, result = null
;
b.on( 'end', function () {
log( '\n- ok, buffer ends' );
log( '\n- deeply equality check between parsed obj/hash and expected result.\n' );
assert.deepEqual( result, Bolgia.toHash( expected ) );
} );
b.on( 'miss', function ( r, i ) {
// log( '- "%s" rule needs data, index: "%s"', r.cid, i );
} );
b.on( 'match', function ( e, d, convert ) {
log( '\n- data matched%s: ', e ? ' (Redis error)' : '' );
result = Bolgia.toHash( d, true, null, true );
log( util.inspect( result, false, 3, true ) );
} );
log( '- test parsing of a "CONFIG GET *" multichunk reply.' );
b.parse( rdata );