TAP version 13 not ok 1 - redis v2.8.0 The canary is dead: ---
# undefinedredis@2.8.0 /tmp/ec76c6ba-42fa-4831-8702-4f65ade09eb1/redis
# bluebird@3.5.3
# coveralls@2.13.3
# js-yaml@3.6.1
# argparse@1.0.10
# sprintf-js@1.0.3
# esprima@2.7.3
# lcov-parse@0.0.10
# log-driver@1.2.5
# minimist@1.2.0
# request@2.79.0
# aws-sign2@0.6.0
# aws4@1.8.0
# caseless@0.11.0
# combined-stream@1.0.7
# delayed-stream@1.0.0
# extend@3.0.2
# forever-agent@0.6.1
# form-data@2.1.4
# asynckit@0.4.0
# har-validator@2.0.6
# commander@2.19.0
# is-my-json-valid@2.19.0
# generate-function@2.3.1
# is-property@1.0.2
# generate-object-property@1.2.0
# is-my-ip-valid@1.0.0
# jsonpointer@4.0.1
# xtend@4.0.1
# pinkie-promise@2.0.1
# pinkie@2.0.4
# hawk@3.1.3
# boom@2.10.1
# cryptiles@2.0.5
# hoek@2.16.3
# sntp@1.0.9
# http-signature@1.1.1
# assert-plus@0.2.0
# jsprim@1.4.1
# assert-plus@1.0.0
# extsprintf@1.3.0
# json-schema@0.2.3
# verror@1.10.0
# assert-plus@1.0.0
# sshpk@1.16.0
# asn1@0.2.4
# assert-plus@1.0.0
# bcrypt-pbkdf@1.0.2
# dashdash@1.14.1
# assert-plus@1.0.0
# ecc-jsbn@0.1.2
# getpass@0.1.7
# assert-plus@1.0.0
# jsbn@0.1.1
# safer-buffer@2.1.2
# tweetnacl@0.14.5
# is-typedarray@1.0.0
# isstream@0.1.2
# json-stringify-safe@5.0.1
# mime-types@2.1.21
# mime-db@1.37.0
# oauth-sign@0.8.2
# qs@6.3.2
# stringstream@0.0.6
# tough-cookie@2.3.4
# punycode@1.4.1
# tunnel-agent@0.4.3
# uuid@3.3.2
# double-ended-queue@2.1.0-0
# eslint@4.19.1
# ajv@5.5.2
# co@4.6.0
# fast-deep-equal@1.1.0
# fast-json-stable-stringify@2.0.0
# json-schema-traverse@0.3.1
# babel-code-frame@6.26.0
# chalk@1.1.3
# ansi-styles@2.2.1
# has-ansi@2.0.0
# ansi-regex@2.1.1
# strip-ansi@3.0.1
# supports-color@2.0.0
# js-tokens@3.0.2
# chalk@2.4.2
# ansi-styles@3.2.1
# color-convert@1.9.3
# color-name@1.1.3
# supports-color@5.5.0
# has-flag@3.0.0
# concat-stream@1.6.2
# buffer-from@1.1.1
# inherits@2.0.3
# readable-stream@2.3.6
# core-util-is@1.0.2
# isarray@1.0.0
# process-nextick-args@2.0.0
# safe-buffer@5.1.2
# string_decoder@1.1.1
# util-deprecate@1.0.2
# typedarray@0.0.6
# cross-spawn@5.1.0
# lru-cache@4.1.5
# pseudomap@1.0.2
# yallist@2.1.2
# shebang-command@1.2.0
# shebang-regex@1.0.0
# which@1.3.1
# isexe@2.0.0
# debug@3.2.6
# ms@2.1.1
# doctrine@2.1.0
# eslint-scope@3.7.3
# esrecurse@4.2.1
# estraverse@4.2.0
# eslint-visitor-keys@1.0.0
# espree@3.5.4
# acorn@5.7.3
# acorn-jsx@3.0.1
# acorn@3.3.0
# esquery@1.0.1
# esutils@2.0.2
# file-entry-cache@2.0.0
# flat-cache@1.3.4
# circular-json@0.3.3
# graceful-fs@4.1.15
# rimraf@2.6.3
# write@0.2.1
# object-assign@4.1.1
# functional-red-black-tree@1.0.1
# glob@7.1.3
# fs.realpath@1.0.0
# inflight@1.0.6
# wrappy@1.0.2
# once@1.4.0
# path-is-absolute@1.0.1
# globals@11.10.0
# ignore@3.3.10
# imurmurhash@0.1.4
# inquirer@3.3.0
# ansi-escapes@3.1.0
# chalk@2.4.2
# ansi-styles@3.2.1
# supports-color@5.5.0
# cli-cursor@2.1.0
# restore-cursor@2.0.0
# onetime@2.0.1
# mimic-fn@1.2.0
# signal-exit@3.0.2
# cli-width@2.2.0
# external-editor@2.2.0
# chardet@0.4.2
# iconv-lite@0.4.24
# tmp@0.0.33
# os-tmpdir@1.0.2
# figures@2.0.0
# mute-stream@0.0.7
# run-async@2.3.0
# is-promise@2.1.0
# rx-lite@4.0.8
# rx-lite-aggregates@4.0.8
# string-width@2.1.1
# is-fullwidth-code-point@2.0.0
# strip-ansi@4.0.0
# ansi-regex@3.0.0
# strip-ansi@4.0.0
# ansi-regex@3.0.0
# through@2.3.8
# is-resolvable@1.1.0
# js-yaml@3.12.1
# esprima@4.0.1
# json-stable-stringify-without-jsonify@1.0.1
# levn@0.3.0
# prelude-ls@1.1.2
# type-check@0.3.2
# lodash@4.17.11
# minimatch@3.0.4
# brace-expansion@1.1.11
# balanced-match@1.0.0
# concat-map@0.0.1
# mkdirp@0.5.1
# minimist@0.0.8
# natural-compare@1.4.0
# optionator@0.8.2
# deep-is@0.1.3
# fast-levenshtein@2.0.6
# wordwrap@1.0.0
# path-is-inside@1.0.2
# pluralize@7.0.0
# progress@2.0.3
# regexpp@1.1.0
# require-uncached@1.0.3
# caller-path@0.1.0
# callsites@0.2.0
# resolve-from@1.0.1
# semver@5.6.0
# strip-ansi@4.0.0
# ansi-regex@3.0.0
# strip-json-comments@2.0.1
# table@4.0.2
# ajv-keywords@2.1.1
# chalk@2.4.2
# ansi-styles@3.2.1
# supports-color@5.5.0
# slice-ansi@1.0.0
# text-table@0.2.0
# intercept-stdout@0.1.2
# lodash.toarray@3.0.2
# lodash._arraycopy@3.0.0
# lodash._basevalues@3.0.0
# lodash.keys@3.1.2
# lodash._getnative@3.9.1
# lodash.isarguments@3.1.0
# lodash.isarray@3.0.4
# metrics@0.1.21
# events@2.1.0
# mocha@3.5.3
# browser-stdout@1.3.0
# commander@2.9.0
# graceful-readlink@1.0.1
# debug@2.6.8
# ms@2.0.0
# diff@3.2.0
# escape-string-regexp@1.0.5
# glob@7.1.1
# growl@1.9.2
# he@1.1.1
# json3@3.3.2
# lodash.create@3.1.1
# lodash._baseassign@3.2.0
# lodash._basecopy@3.0.1
# lodash._basecreate@3.0.3
# lodash._isiterateecall@3.0.9
# supports-color@3.1.2
# has-flag@1.0.0
# nyc@10.3.2
# archy@1.0.0
# arrify@1.0.1
# caching-transform@1.0.1
# write-file-atomic@1.3.4
# graceful-fs@4.1.11
# imurmurhash@0.1.4
# slide@1.1.6
# convert-source-map@1.5.0
# debug-log@1.0.1
# default-require-extensions@1.0.0
# strip-bom@2.0.0
# is-utf8@0.2.1
# find-cache-dir@0.1.1
# commondir@1.0.1
# pkg-dir@1.0.0
# find-up@1.1.2
# path-exists@2.1.0
# pinkie-promise@2.0.1
# pinkie@2.0.4
# foreground-child@1.5.6
# cross-spawn@4.0.2
# lru-cache@4.0.2
# pseudomap@1.0.2
# yallist@2.1.2
# glob@7.1.1
# fs.realpath@1.0.0
# inflight@1.0.6
# wrappy@1.0.2
# inherits@2.0.3
# minimatch@3.0.3
# brace-expansion@1.1.7
# balanced-match@0.4.2
# concat-map@0.0.1
# once@1.4.0
# path-is-absolute@1.0.1
# istanbul-lib-coverage@1.1.0
# istanbul-lib-hook@1.0.6
# append-transform@0.4.0
# istanbul-lib-instrument@1.7.1
# babel-generator@6.24.1
# babel-messages@6.23.0
# babel-runtime@6.23.0
# core-js@2.4.1
# regenerator-runtime@0.10.5
# detect-indent@4.0.0
# repeating@2.0.1
# is-finite@1.0.2
# jsesc@1.3.0
# lodash@4.17.4
# trim-right@1.0.1
# babel-template@6.24.1
# babel-traverse@6.24.1
# babel-code-frame@6.22.0
# chalk@1.1.3
# ansi-styles@2.2.1
# escape-string-regexp@1.0.5
# has-ansi@2.0.0
# supports-color@2.0.0
# js-tokens@3.0.1
# globals@9.17.0
# invariant@2.2.2
# loose-envify@1.3.1
# babel-types@6.24.1
# esutils@2.0.2
# to-fast-properties@1.0.3
# babylon@6.17.0
# semver@5.3.0
# istanbul-lib-report@1.1.0
# path-parse@1.0.5
# supports-color@3.2.3
# has-flag@1.0.0
# istanbul-lib-source-maps@1.2.0
# debug@2.6.6
# ms@0.7.3
# source-map@0.5.6
# istanbul-reports@1.1.0
# handlebars@4.0.8
# async@1.5.2
# optimist@0.6.1
# wordwrap@0.0.3
# source-map@0.4.4
# amdefine@1.0.1
# uglify-js@2.8.22
# uglify-to-browserify@1.0.2
# yargs@3.10.0
# camelcase@1.2.1
# cliui@2.1.0
# center-align@0.1.3
# align-text@0.1.4
# longest@1.0.1
# lazy-cache@1.0.4
# right-align@0.1.3
# wordwrap@0.0.2
# window-size@0.1.0
# md5-hex@1.3.0
# md5-o-matic@0.1.1
# merge-source-map@1.0.3
# micromatch@2.3.11
# arr-diff@2.0.0
# arr-flatten@1.0.3
# array-unique@0.2.1
# braces@1.8.5
# expand-range@1.8.2
# fill-range@2.2.3
# is-number@2.1.0
# isobject@2.1.0
# isarray@1.0.0
# randomatic@1.1.6
# repeat-string@1.6.1
# preserve@0.2.0
# repeat-element@1.1.2
# expand-brackets@0.1.5
# is-posix-bracket@0.1.1
# extglob@0.3.2
# filename-regex@2.0.1
# is-extglob@1.0.0
# is-glob@2.0.1
# kind-of@3.2.0
# is-buffer@1.1.5
# normalize-path@2.1.1
# remove-trailing-separator@1.0.1
# object.omit@2.0.1
# for-own@0.1.5
# for-in@1.0.2
# is-extendable@0.1.1
# parse-glob@3.0.4
# glob-base@0.3.0
# glob-parent@2.0.0
# is-dotfile@1.0.2
# regex-cache@0.4.3
# is-equal-shallow@0.1.3
# is-primitive@2.0.0
# mkdirp@0.5.1
# minimist@0.0.8
# resolve-from@2.0.0
# rimraf@2.6.1
# signal-exit@3.0.2
# spawn-wrap@1.2.4
# os-homedir@1.0.2
# signal-exit@2.1.2
# which@1.2.14
# isexe@2.0.0
# test-exclude@4.1.0
# object-assign@4.1.1
# read-pkg-up@1.0.1
# read-pkg@1.1.0
# load-json-file@1.1.0
# parse-json@2.2.0
# error-ex@1.3.1
# is-arrayish@0.2.1
# pify@2.3.0
# normalize-package-data@2.3.8
# hosted-git-info@2.4.2
# is-builtin-module@1.0.0
# builtin-modules@1.1.1
# validate-npm-package-license@3.0.1
# spdx-correct@1.0.2
# spdx-license-ids@1.2.2
# spdx-expression-parse@1.0.4
# path-type@1.1.0
# require-main-filename@1.0.1
# yargs@7.1.0
# camelcase@3.0.0
# cliui@3.2.0
# wrap-ansi@2.1.0
# decamelize@1.2.0
# get-caller-file@1.0.2
# os-locale@1.4.0
# lcid@1.0.0
# invert-kv@1.0.0
# require-directory@2.1.1
# set-blocking@2.0.0
# string-width@1.0.2
# code-point-at@1.1.0
# is-fullwidth-code-point@1.0.0
# number-is-nan@1.0.1
# strip-ansi@3.0.1
# ansi-regex@2.1.1
# which-module@1.0.0
# y18n@3.2.1
# yargs-parser@5.0.0
# camelcase@3.0.0
# redis-commands@1.4.0
# redis-parser@2.6.0
# tcp-port-used@0.1.2
# debug@0.7.4
# is2@0.0.9
# deep-is@0.1.2
# q@0.9.7
# uuid@2.0.3
# win-spawn@2.0.0
# > redis@2.8.0 test /tmp/ec76c6ba-42fa-4831-8702-4f65ade09eb1/redis
# > nyc --cache mocha ./test/*.js ./test/commands/*.js --timeout=8000
# client authentication
# using options: detect_buffers: true;
# using javascript and IPv4
# allows auth to be provided with 'auth' method
# support redis 2.4 with retrying auth commands if still loading (105ms)
# emits error when auth is bad without callback
# returns an error when auth is bad (empty string) with a callback
# allows auth to be provided as part of redis url and do not fire commands before auth is done
# allows auth and database to be provided as part of redis url query parameter
# allows auth to be provided as config option for client
# allows auth and no_ready_check to be provided as config option for client
# allows auth to be provided post-hoc with auth method
# reconnects with appropriate authentication while offline commands are present (412ms)
# should return an error if the password is not correct and a callback has been provided
# should emit an error if the password is not correct and no callback has been provided
# allows auth to be provided post-hoc with auth method again
# does not allow any commands to be processed if not authenticated using no_ready_check true
# does not allow auth to be provided post-hoc with auth method if not authenticated before
# should emit an error if the provided password is faulty
# pubsub working with auth (208ms)
# individual commands work properly with batch
# using javascript and IPv6
# allows auth to be provided with 'auth' method
# support redis 2.4 with retrying auth commands if still loading (101ms)
# emits error when auth is bad without callback
# returns an error when auth is bad (empty string) with a callback
# allows auth to be provided as config option for client
# allows auth and no_ready_check to be provided as config option for client
# allows auth to be provided post-hoc with auth method
# reconnects with appropriate authentication while offline commands are present (414ms)
# should return an error if the password is not correct and a callback has been provided
# should emit an error if the password is not correct and no callback has been provided
# allows auth to be provided post-hoc with auth method again
# does not allow any commands to be processed if not authenticated using no_ready_check true
# does not allow auth to be provided post-hoc with auth method if not authenticated before
# should emit an error if the provided password is faulty
# pubsub working with auth (205ms)
# individual commands work properly with batch
# using javascript and /tmp/redis.sock
# allows auth to be provided with 'auth' method
# support redis 2.4 with retrying auth commands if still loading (102ms)
# emits error when auth is bad without callback
# returns an error when auth is bad (empty string) with a callback
# allows auth to be provided as config option for client
# allows auth and no_ready_check to be provided as config option for client
# allows auth to be provided post-hoc with auth method
# reconnects with appropriate authentication while offline commands are present (424ms)
# should return an error if the password is not correct and a callback has been provided
# should emit an error if the password is not correct and no callback has been provided
# allows auth to be provided post-hoc with auth method again
# does not allow any commands to be processed if not authenticated using no_ready_check true
# does not allow auth to be provided post-hoc with auth method if not authenticated before
# should emit an error if the provided password is faulty
# pubsub working with auth (205ms)
# individual commands work properly with batch
# using options: detect_buffers: false;
# using javascript and IPv4
# allows auth to be provided with 'auth' method
# support redis 2.4 with retrying auth commands if still loading (101ms)
# emits error when auth is bad without callback
# returns an error when auth is bad (empty string) with a callback
# allows auth to be provided as part of redis url and do not fire commands before auth is done
# allows auth and database to be provided as part of redis url query parameter
# allows auth to be provided as config option for client
# allows auth and no_ready_check to be provided as config option for client
# allows auth to be provided post-hoc with auth method
# reconnects with appropriate authentication while offline commands are present (410ms)
# should return an error if the password is not correct and a callback has been provided
# should emit an error if the password is not correct and no callback has been provided
# allows auth to be provided post-hoc with auth method again
# does not allow any commands to be processed if not authenticated using no_ready_check true
# does not allow auth to be provided post-hoc with auth method if not authenticated before
# should emit an error if the provided password is faulty
# pubsub working with auth (206ms)
# individual commands work properly with batch
# using javascript and IPv6
# allows auth to be provided with 'auth' method
# support redis 2.4 with retrying auth commands if still loading (101ms)
# emits error when auth is bad without callback
# returns an error when auth is bad (empty string) with a callback
# allows auth to be provided as config option for client
# allows auth and no_ready_check to be provided as config option for client
# allows auth to be provided post-hoc with auth method
# reconnects with appropriate authentication while offline commands are present (421ms)
# should return an error if the password is not correct and a callback has been provided
# should emit an error if the password is not correct and no callback has been provided
# allows auth to be provided post-hoc with auth method again
# does not allow any commands to be processed if not authenticated using no_ready_check true
# does not allow auth to be provided post-hoc with auth method if not authenticated before
# should emit an error if the provided password is faulty
# pubsub working with auth (204ms)
# individual commands work properly with batch
# using javascript and /tmp/redis.sock
# allows auth to be provided with 'auth' method
# support redis 2.4 with retrying auth commands if still loading (101ms)
# emits error when auth is bad without callback
# returns an error when auth is bad (empty string) with a callback
# allows auth to be provided as config option for client
# allows auth and no_ready_check to be provided as config option for client
# allows auth to be provided post-hoc with auth method
# reconnects with appropriate authentication while offline commands are present (412ms)
# should return an error if the password is not correct and a callback has been provided
# should emit an error if the password is not correct and no callback has been provided
# allows auth to be provided post-hoc with auth method again
# does not allow any commands to be processed if not authenticated using no_ready_check true
# does not allow auth to be provided post-hoc with auth method if not authenticated before
# should emit an error if the provided password is faulty
# pubsub working with auth (207ms)
# individual commands work properly with batch
# The 'batch' method
# using options: detect_buffers: true;
# using javascript and IPv4
# when not connected
# returns an empty array for missing commands
# returns an error for batch with commands
# returns an empty array for missing commands if promisified
# when connected
# returns an empty array and keep the execution order in takt
# runs normal calls inbetween batch
# returns an empty array if promisified
# returns an empty result array
# fail individually when one command fails using chaining notation
# fail individually when one command fails and emit the error if no callback has been provided
# fail individually when one command in an array of commands fails
# handles multiple operations being applied to a set
# allows multiple operations to be performed using constructor with all kinds of syntax
# converts a non string key to a string
# runs a batch without any further commands
# runs a batch without any further commands and without callback
# allows multiple operations to be performed using a chaining API
# allows multiple commands to work the same as normal to be performed using a chaining API
# allows multiple commands to work the same as normal to be performed using a chaining API promisified
# allows an array to be provided indicating multiple operations to perform
# allows multiple operations to be performed on a hash
# should work without any callback or arguments
# using options: detect_buffers: false;
# using javascript and IPv4
# when not connected
# returns an empty array for missing commands
# returns an error for batch with commands
# returns an empty array for missing commands if promisified
# when connected
# returns an empty array and keep the execution order in takt
# runs normal calls inbetween batch
# returns an empty array if promisified
# returns an empty result array
# fail individually when one command fails using chaining notation
# fail individually when one command fails and emit the error if no callback has been provided
# fail individually when one command in an array of commands fails
# handles multiple operations being applied to a set
# allows multiple operations to be performed using constructor with all kinds of syntax
# converts a non string key to a string
# runs a batch without any further commands
# runs a batch without any further commands and without callback
# allows multiple operations to be performed using a chaining API
# allows multiple commands to work the same as normal to be performed using a chaining API
# allows multiple commands to work the same as normal to be performed using a chaining API promisified
# allows an array to be provided indicating multiple operations to perform
# allows multiple operations to be performed on a hash
# should work without any callback or arguments
# master slave sync
# sync process and no master should delay ready being emitted for slaves (125ms)
# connection tests
# unofficially support for a private stream
# quit on lost connections
# calling quit while the connection is down should not end in reconnecting version a
# calling quit while the connection is down should not end in reconnecting version b
# calling quit while the connection is down without offline queue should end the connection right away
# calling quit while connected without offline queue should end the connection when all commands have finished
# do not quit before connected or a connection issue is detected
# quit "succeeds" even if the client connection is closed while doing so
# quit right away if connection drops while quit command is on the fly
# using options: detect_buffers: true;
# using javascript and IPv4
# on lost connection
# emit an error after max retry attempts and do not try to reconnect afterwards (547ms)
# emit an error after max retry timeout and do not try to reconnect afterwards (613ms)
# end connection while retry is still ongoing (208ms)
# can not connect with wrong host / port in the options object
# emits error once if reconnecting after command has been executed but not yet returned without callback
# retryStrategy used to reconnect with individual error (259ms)
# retry_strategy used to reconnect (257ms)
# retryStrategy used to reconnect with defaults (52ms)
# when not connected
# emit an error after the socket timeout exceeded the connect_timeout time (503ms)
# use the system socket timeout if the connect_timeout has not been provided
# clears the socket timeout after a connection has been established
# connect with host and port provided in the options object
# connect with path provided in the options object
# connects correctly with args
# connects correctly with default values
# connects with a port only
# connects correctly to localhost
# connects correctly to the provided host with the port set to null
# connects correctly to localhost and no ready check
# connects correctly to the provided host with the port set to undefined
# connects correctly even if the info command is not present on the redis server
# fake the stream to mock redis
# allows connecting with the redis url to the default host and port, select db 3 and warn about duplicate db option
# allows connecting with the redis url and the default port and auth provided even though it is not required
# allows connecting with the redis url as first parameter and the options as second parameter
# allows connecting with the redis url in the options object and works with protocols other than the redis protocol (e.g. http)
# allows connecting with the redis url and no auth and options as second parameter
# allows connecting with the redis url and no auth and options as third parameter
# redis still loading <= 500 (504ms)
# redis still loading > 1000ms (1006ms)
# using options: detect_buffers: false;
# using javascript and IPv4
# on lost connection
# emit an error after max retry attempts and do not try to reconnect afterwards (547ms)
# emit an error after max retry timeout and do not try to reconnect afterwards (607ms)
# end connection while retry is still ongoing (208ms)
# can not connect with wrong host / port in the options object
# emits error once if reconnecting after command has been executed but not yet returned without callback
# retryStrategy used to reconnect with individual error (256ms)
# retry_strategy used to reconnect (256ms)
# retryStrategy used to reconnect with defaults (52ms)
# when not connected
# emit an error after the socket timeout exceeded the connect_timeout time (502ms)
# use the system socket timeout if the connect_timeout has not been provided
# clears the socket timeout after a connection has been established
# connect with host and port provided in the options object
# connect with path provided in the options object
# connects correctly with args
# connects correctly with default values
# connects with a port only
# connects correctly to localhost
# connects correctly to the provided host with the port set to null
# connects correctly to localhost and no ready check
# connects correctly to the provided host with the port set to undefined
# connects correctly even if the info command is not present on the redis server
# fake the stream to mock redis
# allows connecting with the redis url to the default host and port, select db 3 and warn about duplicate db option
# allows connecting with the redis url and the default port and auth provided even though it is not required
# allows connecting with the redis url as first parameter and the options as second parameter
# allows connecting with the redis url in the options object and works with protocols other than the redis protocol (e.g. http)
# allows connecting with the redis url and no auth and options as second parameter
# allows connecting with the redis url and no auth and options as third parameter
# redis still loading <= 500 (504ms)
# redis still loading > 1000ms (1007ms)
# errors
# AbortError
# should inherit from Error
# should list options properties but not name and message
# should change name and message
# AggregateError
# should inherit from Error and AbortError
# should list options properties but not name and message
# should change name and message
# detect_buffers
# get
# first argument is a string
# returns a string
# returns a string when executed as part of transaction
# first argument is a buffer
# returns a buffer
# returns a bufffer when executed as part of transaction
# multi.hget
# can interleave string and buffer results
# batch.hget
# can interleave string and buffer results
# hmget
# first argument is a string
# returns strings for keys requested
# returns strings for keys requested in transaction
# handles array of strings with undefined values (repro
#344)
# handles array of strings with undefined values in transaction (repro
#344)
# first argument is a buffer
# returns buffers for keys requested
# returns buffers for keys requested in transaction
# returns buffers for keys requested in .batch
# hgetall
# first argument is a string
# returns string values
# returns string values when executed in transaction
# returns string values when executed in .batch
# first argument is a buffer
# returns buffer values
# returns buffer values when executed in transaction
# returns buffer values when executed in .batch
# stack traces
# should return good traces with NODE_ENV=development set (645ms)
# should return good traces with NODE_DEBUG=redis env set (650ms)
# should always return good stack traces for rejected offline commands
# The 'multi' method
# regression test
# saved buffers with charsets different than utf-8 (issue
#913) (634ms)
# pipeline limit
# do not exceed maximum string size (1843ms)
# using options: detect_buffers: true;
# using javascript and IPv4
# when not connected
# reports an error
# reports an error if promisified
# when connected
# executes a pipelined multi properly in combination with the offline queue
# executes a pipelined multi properly after a reconnect in combination with the offline queue (205ms)
# monitor and transactions do not work together
# results in a execabort
# results in a execabort
#2
# sanity check
# when connection is broken
# return an error even if connection is in broken mode if callback is present
# does not emit an error twice if connection is in broken mode with no callback
# when ready
# returns an empty result array
# runs normal calls in-between multis
# runs simultaneous multis with the same client
# runs simultaneous multis with the same client version 2
# roles back a transaction when one command in a sequence of commands fails
# roles back a transaction when one command in an array of commands fails
# handles multiple operations being applied to a set
# allows multiple operations to be performed using constructor with all kinds of syntax
# converts a non string key to a string
# runs a multi without any further commands
# allows multiple operations to be performed using a chaining API
# allows multiple commands to work the same as normal to be performed using a chaining API
# allows multiple commands to work the same as normal to be performed using a chaining API promisified
# allows an array to be provided indicating multiple operations to perform
# allows multiple operations to be performed on a hash
# reports EXECABORT exceptions when they occur (while queueing)
# reports multiple exceptions when they occur (while EXEC is running)
# reports multiple exceptions when they occur (while EXEC is running) promisified
# reports multiple exceptions when they occur (while EXEC is running) and calls cb
# emits an error if no callback has been provided and execabort error occured
# should work without any callback
# should not use a transaction with exec_atomic if no command is used
# should not use a transaction with exec_atomic if only one command is used
# should use transaction with exec_atomic and more than one command used
# do not mutate arguments in the multi constructor
# works properly after a reconnect. issue
#897 (203ms)
# emits error once if reconnecting after multi has been executed but not yet returned without callback (204ms)
# indivdual commands work properly with multi
# using options: detect_buffers: false;
# using javascript and IPv4
# when not connected
# reports an error
# reports an error if promisified
# when connected
# executes a pipelined multi properly in combination with the offline queue
# executes a pipelined multi properly after a reconnect in combination with the offline queue (205ms)
# monitor and transactions do not work together
# results in a execabort
# results in a execabort
#2
# sanity check
# when connection is broken
# return an error even if connection is in broken mode if callback is present
# does not emit an error twice if connection is in broken mode with no callback
# when ready
# returns an empty result array
# runs normal calls in-between multis
# runs simultaneous multis with the same client
# runs simultaneous multis with the same client version 2
# roles back a transaction when one command in a sequence of commands fails
# roles back a transaction when one command in an array of commands fails
# handles multiple operations being applied to a set
# allows multiple operations to be performed using constructor with all kinds of syntax
# converts a non string key to a string
# runs a multi without any further commands
# allows multiple operations to be performed using a chaining API
# allows multiple commands to work the same as normal to be performed using a chaining API
# allows multiple commands to work the same as normal to be performed using a chaining API promisified
# allows an array to be provided indicating multiple operations to perform
# allows multiple operations to be performed on a hash
# reports EXECABORT exceptions when they occur (while queueing)
# reports multiple exceptions when they occur (while EXEC is running)
# reports multiple exceptions when they occur (while EXEC is running) promisified
# reports multiple exceptions when they occur (while EXEC is running) and calls cb
# emits an error if no callback has been provided and execabort error occured
# should work without any callback
# should not use a transaction with exec_atomic if no command is used
# should not use a transaction with exec_atomic if only one command is used
# should use transaction with exec_atomic and more than one command used
# do not mutate arguments in the multi constructor
# works properly after a reconnect. issue
#897 (202ms)
# emits error once if reconnecting after multi has been executed but not yet returned without callback (201ms)
# indivdual commands work properly with multi
# The node_redis client
# individual commands sanity check
# convert minus to underscore in Redis function names
# reset the parser while reconnecting (See
#1190)
# The 'add_command' method
# camel case and snakeCase version exists
# converts special characters in functions names to lowercase
# using options: detect_buffers: true;
# using javascript and IPv4
# when connected
# duplicate
# check if all options got copied properly
# check if all new options replaced the old ones
# works with a callback
# works with a callback and errors out
# works with a promises
# works with a promises and errors
# big data
# safe strings that are bigger than 30000 characters
# safe strings that are bigger than 30000 characters with multi
# send_command
# omitting args should be fine
# using multi with sendCommand should work as individual command instead of using the internal multi
# multi should be handled special
# using another type as cb should throw
# command argument has to be of type string
# args may only be of type Array or undefined
# passing a callback as args and as callback should throw
# multi should be handled special
# the args array may contain a arbitrary number of arguments
# send_command with callback as args
# retry_unfulfilled_commands
# should retry all commands instead of returning an error if a command did not yet return after a connection loss (305ms)
# should retry all commands even if the offline queue is disabled (307ms)
# .end
# used without flush / flush set to false
# used with flush set to true
# does not emit abort errors if no callback was present while not being in debug_mode (101ms)
# commands after using .quit should fail
# return an error in the callback
# return an error in the callback version two (54ms)
# emit an error (52ms)
# when redis closes unexpectedly
# reconnects and can retrieve the pre-existing data (205ms)
# reconnects properly when monitoring (231ms)
# and it's subscribed to a channel
# reconnects, unsubscribes, and can retrieve the pre-existing data (229ms)
# reconnects, unsubscribes, and can retrieve the pre-existing data of a explicit channel (205ms)
# domain
# allows client to be executed from within domain
# keeps the same domain by using the offline queue
# catches all errors from within the domain
# idle
# emits idle as soon as there are no outstanding commands
# utf8
# handles utf-8 keys
# unref
# exits subprocess as soon as final command is processed (474ms)
# execution order / fire query while loading
# keep execution order for commands that may fire while redis is still loading
# socket_nodelay
# true
# fires client.on('ready')
# client is functional
# false
# fires client.on('ready')
# client is functional
# defaults to true
# fires client.on('ready')
# client is functional
# retry_max_delay
# sets upper bound on how long client waits before reconnecting
# protocol error
# should gracefully recover and only fail on the already send commands
# enable_offline_queue
# true
# should emit drain if offline queue is flushed and nothing to buffer
# does not return an error and enqueues operation (76ms)
# enqueues operation and keep the queue while trying to reconnect (1125ms)
# flushes the command queue if connection is lost (548ms)
# false
# stream not writable
# emit an error and does not enqueues operation (53ms)
# flushes the command queue if connection is lost (208ms)
# using options: detect_buffers: false;
# using javascript and IPv4
# when connected
# duplicate
# check if all options got copied properly
# check if all new options replaced the old ones
# works with a callback
# works with a callback and errors out
# works with a promises
# works with a promises and errors
# big data
# safe strings that are bigger than 30000 characters
# safe strings that are bigger than 30000 characters with multi
# send_command
# omitting args should be fine
# using multi with sendCommand should work as individual command instead of using the internal multi
# multi should be handled special
# using another type as cb should throw
# command argument has to be of type string
# args may only be of type Array or undefined
# passing a callback as args and as callback should throw
# multi should be handled special
# the args array may contain a arbitrary number of arguments
# send_command with callback as args
# retry_unfulfilled_commands
# should retry all commands instead of returning an error if a command did not yet return after a connection loss (304ms)
# should retry all commands even if the offline queue is disabled (305ms)
# .end
# used without flush / flush set to false
# used with flush set to true
# does not emit abort errors if no callback was present while not being in debug_mode (101ms)
# commands after using .quit should fail
# return an error in the callback
# return an error in the callback version two (51ms)
# emit an error (51ms)
# when redis closes unexpectedly
# reconnects and can retrieve the pre-existing data (212ms)
# reconnects properly when monitoring (204ms)
# and it's subscribed to a channel
# reconnects, unsubscribes, and can retrieve the pre-existing data (207ms)
# reconnects, unsubscribes, and can retrieve the pre-existing data of a explicit channel (204ms)
# domain
# allows client to be executed from within domain
# keeps the same domain by using the offline queue
# catches all errors from within the domain
# idle
# emits idle as soon as there are no outstanding commands
# utf8
# handles utf-8 keys
# unref
# exits subprocess as soon as final command is processed (440ms)
# execution order / fire query while loading
# keep execution order for commands that may fire while redis is still loading
# socket_nodelay
# true
# fires client.on('ready')
# client is functional
# false
# fires client.on('ready')
# client is functional
# defaults to true
# fires client.on('ready')
# client is functional
# retry_max_delay
# sets upper bound on how long client waits before reconnecting
# protocol error
# should gracefully recover and only fail on the already send commands
# enable_offline_queue
# true
# should emit drain if offline queue is flushed and nothing to buffer
# does not return an error and enqueues operation (75ms)
# enqueues operation and keep the queue while trying to reconnect (1125ms)
# flushes the command queue if connection is lost (565ms)
# false
# stream not writable
# emit an error and does not enqueues operation (53ms)
# flushes the command queue if connection is lost (206ms)
# prefix key names
# using options: detect_buffers: true;
# using javascript and IPv4
# auto prefix set / get
# auto prefix set / get with .batch
# auto prefix set / get with .multi
# using options: detect_buffers: false;
# using javascript and IPv4
# auto prefix set / get
# auto prefix set / get with .batch
# auto prefix set / get with .multi
# publish/subscribe
# using options: detect_buffers: true;
# using javascript and IPv4
# should not publish a message multiple times per command (133ms)
# should not publish a message without any publish command (51ms)
# arguments variants
# disable resubscribe
# does not fire subscribe events after reconnecting (204ms)
# string_numbers and pub sub
# does not fire subscribe events after reconnecting
# subscribe
# fires a subscribe event for each channel subscribed to even after reconnecting (203ms)
# fires a subscribe event for each channel as buffer subscribed to even after reconnecting (206ms)
# receives messages on subscribed channel
# receives messages if subscribe is called after unsubscribe
# handles SUB_UNSUB_MSG_SUB
# handles SUB_UNSUB_MSG_SUB 2
# emits end event if quit is called from within subscribe
# subscribe; close; resubscribe with prototype inherited property names (411ms)
# multiple subscribe / unsubscribe commands
# reconnects properly with pub sub and select command (206ms)
# should not go into pubsub mode with unsubscribe commands
# handles multiple channels with the same channel name properly, even with buffers
# should only resubscribe to channels not unsubscribed earlier on a reconnect (205ms)
# unsubscribes, subscribes, unsubscribes... single and multiple entries mixed. Withouth callbacks
# unsubscribes, subscribes, unsubscribes... single and multiple entries mixed. Without callbacks
# unsubscribes, subscribes, unsubscribes... single and multiple entries mixed. Without callback and concret channels
# unsubscribes, subscribes, unsubscribes... with pattern matching
# unsubscribe
# fires an unsubscribe event
# puts client back into write mode
# does not complain when unsubscribe is called and there are no subscriptions
# executes callback when unsubscribe is called and there are no subscriptions
# psubscribe
# allows all channels to be subscribed to using a * pattern
# allows to listen to pmessageBuffer and pmessage
# punsubscribe
# does not complain when punsubscribe is called and there are no subscriptions
# executes callback when punsubscribe is called and there are no subscriptions
# fail for other commands while in pub sub mode
# return error if only pub sub commands are allowed
# emit error if only pub sub commands are allowed without callback
# using options: detect_buffers: false;
# using javascript and IPv4
# should not publish a message multiple times per command (132ms)
# should not publish a message without any publish command (51ms)
# arguments variants
# disable resubscribe
# does not fire subscribe events after reconnecting (204ms)
# string_numbers and pub sub
# does not fire subscribe events after reconnecting
# subscribe
# fires a subscribe event for each channel subscribed to even after reconnecting (203ms)
# fires a subscribe event for each channel as buffer subscribed to even after reconnecting (205ms)
# receives messages on subscribed channel
# receives messages if subscribe is called after unsubscribe
# handles SUB_UNSUB_MSG_SUB
# handles SUB_UNSUB_MSG_SUB 2
# emits end event if quit is called from within subscribe
# subscribe; close; resubscribe with prototype inherited property names (433ms)
# multiple subscribe / unsubscribe commands
# reconnects properly with pub sub and select command (206ms)
# should not go into pubsub mode with unsubscribe commands
# handles multiple channels with the same channel name properly, even with buffers
# should only resubscribe to channels not unsubscribed earlier on a reconnect (204ms)
# unsubscribes, subscribes, unsubscribes... single and multiple entries mixed. Withouth callbacks
# unsubscribes, subscribes, unsubscribes... single and multiple entries mixed. Without callbacks
# unsubscribes, subscribes, unsubscribes... single and multiple entries mixed. Without callback and concret channels
# unsubscribes, subscribes, unsubscribes... with pattern matching
# unsubscribe
# fires an unsubscribe event
# puts client back into write mode
# does not complain when unsubscribe is called and there are no subscriptions
# executes callback when unsubscribe is called and there are no subscriptions
# psubscribe
# allows all channels to be subscribed to using a * pattern
# allows to listen to pmessageBuffer and pmessage
# punsubscribe
# does not complain when punsubscribe is called and there are no subscriptions
# executes callback when punsubscribe is called and there are no subscriptions
# fail for other commands while in pub sub mode
# return error if only pub sub commands are allowed
# emit error if only pub sub commands are allowed without callback
# rename commands
# using options: detect_buffers: true;
# using javascript and IPv4
# allows to use renamed functions
# should also work with batch
# should also work with multi
# should also work with multi and abort transaction
# should also work prefixed commands
# using options: detect_buffers: false;
# using javascript and IPv4
# allows to use renamed functions
# should also work with batch
# should also work with multi
# should also work with multi and abort transaction
# should also work prefixed commands
# return_buffers
# using options: detect_buffers: true;
# using javascript and IPv4
# get
# first argument is a string
# returns a buffer
# returns a bufffer when executed as part of transaction
# multi.hget
# returns buffers
# batch.hget
# returns buffers
# hmget
# first argument is a string
# handles array of strings with undefined values in transaction (repro
#344)
# first argument is a buffer
# returns buffers for keys requested
# returns buffers for keys requested in transaction
# returns buffers for keys requested in .batch
# hgetall
# first argument is a string
# returns buffer values
# returns buffer values when executed in transaction
# returns buffer values when executed in .batch
# first argument is a buffer
# returns buffer values
# returns buffer values when executed in transaction
# returns buffer values when executed in .batch
# publish/subscribe
# receives buffer messages
# using options: detect_buffers: false;
# using javascript and IPv4
# get
# first argument is a string
# returns a buffer
# returns a bufffer when executed as part of transaction
# multi.hget
# returns buffers
# batch.hget
# returns buffers
# hmget
# first argument is a string
# handles array of strings with undefined values in transaction (repro
#344)
# first argument is a buffer
# returns buffers for keys requested
# returns buffers for keys requested in transaction
# returns buffers for keys requested in .batch
# hgetall
# first argument is a string
# returns buffer values
# returns buffer values when executed in transaction
# returns buffer values when executed in .batch
# first argument is a buffer
# returns buffer values
# returns buffer values when executed in transaction
# returns buffer values when executed in .batch
# publish/subscribe
# receives buffer messages
# TLS connection tests
# 1) "before all" hook
# createClient options
# port as first parameter
# pass the options in the second parameter after a port
# pass the options in the third parameter after a port and host being set to null
# pass the options in the third parameter after a port and host being set to undefined
# pass the options in the third parameter after a port and host
# should throw with three parameters all set to a truthy value
# unix socket as first parameter
# pass the options in the second parameter after a port
# pass the options in the third parameter after a port and host being set to null
# redis url as first parameter
# empty redis url including options as second parameter
# begin with two slashes including options as third parameter
# duplicated, identical query options including options obj
# should throw on duplicated, non-identical query options
# should throw without protocol slashes
# warns on protocol other than redis in the redis url
# no parameters or set to null / undefined
# no parameters
# set to null
# set to undefined
# only an options object is passed
# with options
# without options
# should throw with more parameters
# including url as option
# faulty data
# throws on strange connection info
# utils.js
# clone
# ignore the object prototype and clone a nested array / object
# replace falsy values with an empty object as return value
# transform camelCase options to snake_case and add the camel_case option
# throws on circular data
# print helper
# callback with reply
# callback with error
# reply_in_order
# no elements in either queue. Reply in the next tick with callback
# no elements in either queue. Reply in the next tick without callback
# elements in the offline queue. Reply after the offline queue is empty and respect the command_obj callback
# elements in the offline queue. Reply after the offline queue is empty and respect the command_obj error emit
# elements in the offline queue and the command_queue. Reply all other commands got handled respect the command_obj
# The 'blpop' method
# using options: detect_buffers: true;
# using javascript and IPv4
# pops value immediately if list contains values
# pops value immediately if list contains values using array notation
# waits for value if list is not yet populated
# times out after specified time (1493ms)
# using options: detect_buffers: false;
# using javascript and IPv4
# pops value immediately if list contains values
# pops value immediately if list contains values using array notation
# waits for value if list is not yet populated
# times out after specified time (1483ms)
# The 'client' method
# using options: detect_buffers: true;
# using javascript and IPv4
# list
# lists connected clients
# lists connected clients when invoked with multi's chaining syntax
# lists connected clients when invoked with array syntax on client
# lists connected clients when invoked with multi's array syntax
# reply
# as normal command
# - on
# - off
# - skip
# in a batch context
# - on
# - off
# - skip
# setname / getname
# sets the name
# using options: detect_buffers: false;
# using javascript and IPv4
# list
# lists connected clients
# lists connected clients when invoked with multi's chaining syntax
# lists connected clients when invoked with array syntax on client
# lists connected clients when invoked with multi's array syntax
# reply
# as normal command
# - on
# - off
# - skip
# in a batch context
# - on
# - off
# - skip
# setname / getname
# sets the name
# The 'dbsize' method
# using options: detect_buffers: true;
# using javascript and IPv4
# when not connected
# reports an error
# when connected
# returns a zero db size
# when more data is added to Redis
# returns a larger db size
# using options: detect_buffers: false;
# using javascript and IPv4
# when not connected
# reports an error
# when connected
# returns a zero db size
# when more data is added to Redis
# returns a larger db size
# The 'del' method
# using options: detect_buffers: true;
# using javascript and IPv4
# allows a single key to be deleted
# allows del to be called on a key that does not exist
# allows multiple keys to be deleted
# allows multiple keys to be deleted with the array syntax
# allows multiple keys to be deleted with the array syntax and no callback
# using options: detect_buffers: false;
# using javascript and IPv4
# allows a single key to be deleted
# allows del to be called on a key that does not exist
# allows multiple keys to be deleted
# allows multiple keys to be deleted with the array syntax
# allows multiple keys to be deleted with the array syntax and no callback
# The 'eval' method
# using options: detect_buffers: true;
# using javascript and IPv4
# converts a float to an integer when evaluated
# returns a string
# converts boolean true to integer 1
# converts boolean false to null
# converts lua status code to string representation
# converts lua error to an error response
# represents a lua table appropritely
# populates keys and argv correctly
# allows arguments to be provided in array rather than as multiple parameters
# allows a script to be executed that accesses the redis API without callback
# allows a key to be incremented, and performs appropriate conversion from LUA type
# allows a bulk operation to be performed, and performs appropriate conversion from LUA type
# allows a multi mulk operation to be performed, with the appropriate type conversion
# returns an appropriate representation of Lua status reply
# returns an appropriate representation of a Lua error reply
# returns an appropriate representation of a Lua nil reply
# evalsha
# allows a script to be executed that accesses the redis API
# can execute a script if the SHA exists
# returns an error if SHA does not exist
# emit an error if SHA does not exist without any callback
# emits an error if SHA does not exist and no callback has been provided
# using options: detect_buffers: false;
# using javascript and IPv4
# converts a float to an integer when evaluated
# returns a string
# converts boolean true to integer 1
# converts boolean false to null
# converts lua status code to string representation
# converts lua error to an error response
# represents a lua table appropritely
# populates keys and argv correctly
# allows arguments to be provided in array rather than as multiple parameters
# allows a script to be executed that accesses the redis API without callback
# allows a key to be incremented, and performs appropriate conversion from LUA type
# allows a bulk operation to be performed, and performs appropriate conversion from LUA type
# allows a multi mulk operation to be performed, with the appropriate type conversion
# returns an appropriate representation of Lua status reply
# returns an appropriate representation of a Lua error reply
# returns an appropriate representation of a Lua nil reply
# evalsha
# allows a script to be executed that accesses the redis API
# can execute a script if the SHA exists
# returns an error if SHA does not exist
# emit an error if SHA does not exist without any callback
# emits an error if SHA does not exist and no callback has been provided
# The 'exists' method
# using options: detect_buffers: true;
# using javascript and IPv4
# returns 1 if the key exists
# returns 1 if the key exists with array syntax
# returns 0 if the key does not exist
# using options: detect_buffers: false;
# using javascript and IPv4
# returns 1 if the key exists
# returns 1 if the key exists with array syntax
# returns 0 if the key does not exist
# The 'expire' method
# using options: detect_buffers: true;
# using javascript and IPv4
# expires key after timeout (1053ms)
# expires key after timeout with array syntax (1053ms)
# using options: detect_buffers: false;
# using javascript and IPv4
# expires key after timeout (1053ms)
# expires key after timeout with array syntax (1053ms)
# The 'flushdb' method
# using options: detect_buffers: true;
# using javascript and IPv4
# when not connected
# reports an error
# when connected
# when there is data in Redis
# deletes all the keys
# results in a db size of zero
# results in a db size of zero without a callback
# using options: detect_buffers: false;
# using javascript and IPv4
# when not connected
# reports an error
# when connected
# when there is data in Redis
# deletes all the keys
# results in a db size of zero
# results in a db size of zero without a callback
# The 'geoadd' method
# using options: detect_buffers: true;
# using javascript and IPv4
# - returns 1 if the key exists
# using options: detect_buffers: false;
# using javascript and IPv4
# - returns 1 if the key exists
# The 'get' method
# using options: detect_buffers: true;
# using javascript and IPv4
# when not connected
# reports an error
# reports an error promisified
# when connected
# when the key exists in Redis
# gets the value correctly
# should not throw on a get without callback (even if it's not useful)
# when the key does not exist in Redis
# gets a null value
# using options: detect_buffers: false;
# using javascript and IPv4
# when not connected
# reports an error
# reports an error promisified
# when connected
# when the key exists in Redis
# gets the value correctly
# should not throw on a get without callback (even if it's not useful)
# when the key does not exist in Redis
# gets a null value
# The 'getset' method
# using options: detect_buffers: true;
# using javascript and IPv4
# when not connected
# reports an error
# when connected
# when the key exists in Redis
# gets the value correctly
# gets the value correctly with array syntax
# gets the value correctly with array syntax style 2
# when the key does not exist in Redis
# gets a null value
# using options: detect_buffers: false;
# using javascript and IPv4
# when not connected
# reports an error
# when connected
# when the key exists in Redis
# gets the value correctly
# gets the value correctly with array syntax
# gets the value correctly with array syntax style 2
# when the key does not exist in Redis
# gets a null value
# The 'hgetall' method
# using options: detect_buffers: true;
# using javascript and IPv4
# regular client
# handles simple keys and values
# handles fetching keys set using an object
# handles fetching a messing key
# binary client
# returns binary results
# using options: detect_buffers: false;
# using javascript and IPv4
# regular client
# handles simple keys and values
# handles fetching keys set using an object
# handles fetching a messing key
# binary client
# returns binary results
# The 'hincrby' method
# using options: detect_buffers: true;
# using javascript and IPv4
# increments a key that has already been set
# increments a key that has not been set
# using options: detect_buffers: false;
# using javascript and IPv4
# increments a key that has already been set
# increments a key that has not been set
# The 'hlen' method
# using options: detect_buffers: true;
# using javascript and IPv4
# reports the count of keys
# using options: detect_buffers: false;
# using javascript and IPv4
# reports the count of keys
# The 'hmget' method
# using options: detect_buffers: true;
# using javascript and IPv4
# allows keys to be specified using multiple arguments
# allows keys to be specified by passing an array without manipulating the array
# allows keys to be specified by passing an array as first argument
# allows a single key to be specified in an array
# allows keys to be specified that have not yet been set
# using options: detect_buffers: false;
# using javascript and IPv4
# allows keys to be specified using multiple arguments
# allows keys to be specified by passing an array without manipulating the array
# allows keys to be specified by passing an array as first argument
# allows a single key to be specified in an array
# allows keys to be specified that have not yet been set
# The 'hmset' method
# using options: detect_buffers: true;
# using javascript and IPv4
# handles redis-style syntax
# handles object-style syntax
# handles object-style syntax and the key being a number
# allows a numeric key
# allows a numeric key without callback
# allows an array without callback
# allows an array and a callback
# allows a key plus array without callback
# allows a key plus array and a callback
# handles object-style syntax without callback
# using options: detect_buffers: false;
# using javascript and IPv4
# handles redis-style syntax
# handles object-style syntax
# handles object-style syntax and the key being a number
# allows a numeric key
# allows a numeric key without callback
# allows an array without callback
# allows an array and a callback
# allows a key plus array without callback
# allows a key plus array and a callback
# handles object-style syntax without callback
# The 'hset' method
# using options: detect_buffers: true;
# using javascript and IPv4
# allows a value to be set in a hash
# handles an empty value
# handles empty key and value
# warns if someone passed a array either as field or as value
# does not error when a buffer and date are set as values on the same hash
# does not error when a buffer and date are set as fields on the same hash
# using options: detect_buffers: false;
# using javascript and IPv4
# allows a value to be set in a hash
# handles an empty value
# handles empty key and value
# warns if someone passed a array either as field or as value
# does not error when a buffer and date are set as values on the same hash
# does not error when a buffer and date are set as fields on the same hash
# The 'incr' method
# using options: detect_buffers: true;
# using javascript and IPv4
# when connected and a value in Redis
# count above the safe integers as numbers
# count above the safe integers as strings
# using options: detect_buffers: false;
# using javascript and IPv4
# when connected and a value in Redis
# count above the safe integers as numbers
# count above the safe integers as strings
# The 'info' method
# using options: detect_buffers: true;
# using javascript and IPv4
# update serverInfo after a info command
# works with optional section provided with and without callback
# check redis v.2.4 support
# emit error after a failure
# using options: detect_buffers: false;
# using javascript and IPv4
# update serverInfo after a info command
# works with optional section provided with and without callback
# check redis v.2.4 support
# emit error after a failure
# The 'keys' method
# using options: detect_buffers: true;
# using javascript and IPv4
# returns matching keys
# handles a large packet size
# handles an empty response
# using options: detect_buffers: false;
# using javascript and IPv4
# returns matching keys
# handles a large packet size
# handles an empty response
# The 'mget' method
# using options: detect_buffers: true;
# using javascript and IPv4
# handles fetching multiple keys in argument form
# handles fetching multiple keys via an array
# handles fetching multiple keys, when some keys do not exist
# handles fetching multiple keys, when some keys do not exist promisified
# using options: detect_buffers: false;
# using javascript and IPv4
# handles fetching multiple keys in argument form
# handles fetching multiple keys via an array
# handles fetching multiple keys, when some keys do not exist
# handles fetching multiple keys, when some keys do not exist promisified
# The 'monitor' method
# using options: detect_buffers: true;
# monitors commands on all redis clients and works in the correct order
# monitors returns strings in the rawOutput even with return_buffers activated
# monitors reconnects properly and works with the offline queue (204ms)
# monitors reconnects properly and works with the offline queue in a batch statement (204ms)
# monitor activates even if the command could not be processed properly after a reconnect (204ms)
# monitors works in combination with the pub sub mode and the offline queue (359ms)
# using options: detect_buffers: false;
# monitors commands on all redis clients and works in the correct order
# monitors returns strings in the rawOutput even with return_buffers activated
# monitors reconnects properly and works with the offline queue (203ms)
# monitors reconnects properly and works with the offline queue in a batch statement (203ms)
# monitor activates even if the command could not be processed properly after a reconnect (203ms)
# monitors works in combination with the pub sub mode and the offline queue (357ms)
# The 'mset' method
# using options: detect_buffers: true;
# using javascript and IPv4
# when not connected
# reports an error
# when connected
# and a callback is specified
# with valid parameters
# sets the value correctly
# with undefined 'key' parameter and missing 'value' parameter
# reports an error
# and no callback is specified
# with valid parameters
# sets the value correctly
# sets the value correctly with array syntax
# with undefined 'key' and missing 'value' parameter
# emits an error
# using options: detect_buffers: false;
# using javascript and IPv4
# when not connected
# reports an error
# when connected
# and a callback is specified
# with valid parameters
# sets the value correctly
# with undefined 'key' parameter and missing 'value' parameter
# reports an error
# and no callback is specified
# with valid parameters
# sets the value correctly
# sets the value correctly with array syntax
# with undefined 'key' and missing 'value' parameter
# emits an error
# The 'msetnx' method
# using options: detect_buffers: true;
# using javascript and IPv4
# if any keys exist entire operation fails
# sets multiple keys if all keys are not set
# using options: detect_buffers: false;
# using javascript and IPv4
# if any keys exist entire operation fails
# sets multiple keys if all keys are not set
# The 'randomkey' method
# using options: detect_buffers: true;
# using javascript and IPv4
# returns a random key
# using options: detect_buffers: false;
# using javascript and IPv4
# returns a random key
# The 'rename' method
# using options: detect_buffers: true;
# using javascript and IPv4
# populates the new key
# removes the old key
# using options: detect_buffers: false;
# using javascript and IPv4
# populates the new key
# removes the old key
# The 'renamenx' method
# using options: detect_buffers: true;
# using javascript and IPv4
# renames the key if target does not yet exist
# does not rename the key if the target exists
# using options: detect_buffers: false;
# using javascript and IPv4
# renames the key if target does not yet exist
# does not rename the key if the target exists
# The 'rpush' command
# using options: detect_buffers: true;
# using javascript and IPv4
# inserts multiple values at a time into a list
# using options: detect_buffers: false;
# using javascript and IPv4
# inserts multiple values at a time into a list
# The 'sadd' method
# using options: detect_buffers: true;
# using javascript and IPv4
# allows a single value to be added to the set
# does not add the same value to the set twice
# allows multiple values to be added to the set
# allows multiple values to be added to the set with a different syntax
# using options: detect_buffers: false;
# using javascript and IPv4
# allows a single value to be added to the set
# does not add the same value to the set twice
# allows multiple values to be added to the set
# allows multiple values to be added to the set with a different syntax
# The 'scard' method
# using options: detect_buffers: true;
# using javascript and IPv4
# returns the number of values in a set
# using options: detect_buffers: false;
# using javascript and IPv4
# returns the number of values in a set
# The 'script' method
# using options: detect_buffers: true;
# using javascript and IPv4
# loads script with client.script('load')
# allows a loaded script to be evaluated
# allows a script to be loaded as part of a chained transaction
# allows a script to be loaded using a transaction's array syntax
# using options: detect_buffers: false;
# using javascript and IPv4
# loads script with client.script('load')
# allows a loaded script to be evaluated
# allows a script to be loaded as part of a chained transaction
# allows a script to be loaded using a transaction's array syntax
# The 'sdiff' method
# using options: detect_buffers: true;
# using javascript and IPv4
# returns set difference
# using options: detect_buffers: false;
# using javascript and IPv4
# returns set difference
# The 'sdiffstore' method
# using options: detect_buffers: true;
# using javascript and IPv4
# calculates set difference ands stores it in a key
# using options: detect_buffers: false;
# using javascript and IPv4
# calculates set difference ands stores it in a key
# The 'select' method
# using options: detect_buffers: true;
# using javascript and IPv4
# when not connected
# returns an error if redis is not connected
# when connected
# changes the database and calls the callback
# and a callback is specified
# with a valid db index
# selects the appropriate database
# with an invalid db index
# returns an error
# and no callback is specified
# with a valid db index
# selects the appropriate database
# with an invalid db index
# emits an error when callback not provided
# reconnection occurs
# selects the appropriate database after a reconnect (210ms)
# using options: detect_buffers: false;
# using javascript and IPv4
# when not connected
# returns an error if redis is not connected
# when connected
# changes the database and calls the callback
# and a callback is specified
# with a valid db index
# selects the appropriate database
# with an invalid db index
# returns an error
# and no callback is specified
# with a valid db index
# selects the appropriate database
# with an invalid db index
# emits an error when callback not provided
# reconnection occurs
# selects the appropriate database after a reconnect (202ms)
# The 'set' method
# using options: detect_buffers: true;
# using javascript and IPv4
# when not connected
# reports an error
# when connected
# and a callback is specified
# with valid parameters
# sets the value correctly
# set expire date in seconds
# set expire date in milliseconds
# only set the key if (not) already set
# reports an error with invalid parameters
# undefined 'key' and missing 'value' parameter
# empty array as second parameter
# and no callback is specified
# converts null to 'null'
# emit an error with only the key set
# emit an error without any parameters
# with valid parameters
# sets the value correctly
# sets the value correctly even if the callback is explicitly set to undefined
# sets the value correctly with the array syntax
# with undefined 'key' and missing 'value' parameter
# emits an error without callback
# using options: detect_buffers: false;
# using javascript and IPv4
# when not connected
# reports an error
# when connected
# and a callback is specified
# with valid parameters
# sets the value correctly
# set expire date in seconds
# set expire date in milliseconds
# only set the key if (not) already set
# reports an error with invalid parameters
# undefined 'key' and missing 'value' parameter
# empty array as second parameter
# and no callback is specified
# converts null to 'null'
# emit an error with only the key set
# emit an error without any parameters
# with valid parameters
# sets the value correctly
# sets the value correctly even if the callback is explicitly set to undefined
# sets the value correctly with the array syntax
# with undefined 'key' and missing 'value' parameter
# emits an error without callback
# The 'setex' method
# using options: detect_buffers: true;
# using javascript and IPv4
# sets a key with an expiry
# using options: detect_buffers: false;
# using javascript and IPv4
# sets a key with an expiry
# The 'setnx' method
# using options: detect_buffers: true;
# using javascript and IPv4
# sets key if it does not have a value
# does not set key if it already has a value
# using options: detect_buffers: false;
# using javascript and IPv4
# sets key if it does not have a value
# does not set key if it already has a value
# The 'sinter' method
# using options: detect_buffers: true;
# using javascript and IPv4
# handles two sets being intersected
# handles three sets being intersected
# using options: detect_buffers: false;
# using javascript and IPv4
# handles two sets being intersected
# handles three sets being intersected
# The 'sinterstore' method
# using options: detect_buffers: true;
# using javascript and IPv4
# calculates set intersection and stores it in a key
# using options: detect_buffers: false;
# using javascript and IPv4
# calculates set intersection and stores it in a key
# The 'sismember' method
# using options: detect_buffers: true;
# using javascript and IPv4
# returns 0 if the value is not in the set
# returns 1 if the value is in the set
# using options: detect_buffers: false;
# using javascript and IPv4
# returns 0 if the value is not in the set
# returns 1 if the value is in the set
# The 'slowlog' method
# using options: detect_buffers: true;
# using javascript and IPv4
# logs operations in slowlog
# using options: detect_buffers: false;
# using javascript and IPv4
# logs operations in slowlog
# The 'smembers' method
# using options: detect_buffers: true;
# using javascript and IPv4
# returns all values in a set
# using options: detect_buffers: false;
# using javascript and IPv4
# returns all values in a set
# The 'smove' method
# using options: detect_buffers: true;
# using javascript and IPv4
# moves a value to a set that does not yet exist
# does not move a value if it does not exist in the first set
# using options: detect_buffers: false;
# using javascript and IPv4
# moves a value to a set that does not yet exist
# does not move a value if it does not exist in the first set
# The 'sort' method
# using options: detect_buffers: true;
# using javascript and IPv4
# alphabetical
# sorts in ascending alphabetical order
# sorts in descending alphabetical order
# numeric
# sorts in ascending numeric order
# sorts in descending numeric order
# pattern
# handles sorting with a pattern
# handles sorting with a 'by' pattern and 1 'get' pattern
# handles sorting with a 'by' pattern and 2 'get' patterns
# handles sorting with a 'by' pattern and 2 'get' patterns with the array syntax
# sorting with a 'by' pattern and 2 'get' patterns and stores results
# using options: detect_buffers: false;
# using javascript and IPv4
# alphabetical
# sorts in ascending alphabetical order
# sorts in descending alphabetical order
# numeric
# sorts in ascending numeric order
# sorts in descending numeric order
# pattern
# handles sorting with a pattern
# handles sorting with a 'by' pattern and 1 'get' pattern
# handles sorting with a 'by' pattern and 2 'get' patterns
# handles sorting with a 'by' pattern and 2 'get' patterns with the array syntax
# sorting with a 'by' pattern and 2 'get' patterns and stores results
# The 'spop' method
# using options: detect_buffers: true;
# using javascript and IPv4
# returns a random element from the set
# using options: detect_buffers: false;
# using javascript and IPv4
# returns a random element from the set
# The 'srem' method
# using options: detect_buffers: true;
# using javascript and IPv4
# removes a value
# handles attempting to remove a missing value
# allows multiple values to be removed
# allows multiple values to be removed with send_command
# handles a value missing from the set of values being removed
# using options: detect_buffers: false;
# using javascript and IPv4
# removes a value
# handles attempting to remove a missing value
# allows multiple values to be removed
# allows multiple values to be removed with send_command
# handles a value missing from the set of values being removed
# The 'sunion' method
# using options: detect_buffers: true;
# using javascript and IPv4
# returns the union of a group of sets
# using options: detect_buffers: false;
# using javascript and IPv4
# returns the union of a group of sets
# The 'sunionstore' method
# using options: detect_buffers: true;
# using javascript and IPv4
# stores the result of a union
# using options: detect_buffers: false;
# using javascript and IPv4
# stores the result of a union
# The 'ttl' method
# using options: detect_buffers: true;
# using javascript and IPv4
# returns the current ttl on a key
# using options: detect_buffers: false;
# using javascript and IPv4
# returns the current ttl on a key
# The 'type' method
# using options: detect_buffers: true;
# using javascript and IPv4
# reports string type
# reports list type
# reports set type
# reports zset type
# reports hash type
# reports none for null key
# using options: detect_buffers: false;
# using javascript and IPv4
# reports string type
# reports list type
# reports set type
# reports zset type
# reports hash type
# reports none for null key
# The 'watch' method
# using options: detect_buffers: true;
# using javascript and IPv4
# does not execute transaction if watched key was modified prior to execution
# successfully modifies other keys independently of transaction
# using options: detect_buffers: false;
# using javascript and IPv4
# does not execute transaction if watched key was modified prior to execution
# successfully modifies other keys independently of transaction
# The 'zadd' method
# using options: detect_buffers: true;
# using javascript and IPv4
# reports an error
# return inf / -inf
# using options: detect_buffers: false;
# using javascript and IPv4
# reports an error
# return inf / -inf
# The 'zscan' method
# using options: detect_buffers: true;
# using javascript and IPv4
# return values
# using options: detect_buffers: false;
# using javascript and IPv4
# return values
# The 'zscore' method
# using options: detect_buffers: true;
# using javascript and IPv4
# should return the score of member in the sorted set at key
# using options: detect_buffers: false;
# using javascript and IPv4
# should return the score of member in the sorted set at key
# 952 passing (44s)
# 14 pending
# 1 failing
# 1) TLS connection tests "before all" hook:
# Error: spawn stunnel ENOENT
# at exports._errnoException (util.js:1020:11)
# at Process.ChildProcess._handle.onexit (internal/child_process.js:197:32)
# at onErrorNT (internal/child_process.js:376:16)
# at _combinedTickCallback (internal/process/next_tick.js:80:11)
# at process._tickDomainCallback (internal/process/next_tick.js:128:9)
# ------------------------|----------|----------|----------|----------|----------------|
# File | % Stmts | % Branch | % Funcs | % Lines |Uncovered Lines |
# ------------------------|----------|----------|----------|----------|----------------|
# All files | 99.77 | 99.18 | 99.32 | 99.77 | |
# redis | 99.65 | 98.75 | 100 | 99.65 | |
# index.js | 99.65 | 98.75 | 100 | 99.65 | 24,174 |
# redis/lib | 99.87 | 99.51 | 98.84 | 99.87 | |
# command.js | 100 | 100 | 100 | 100 | |
# commands.js | 98.55 | 95.24 | 80 | 98.55 | 16 |
# createClient.js | 100 | 100 | 100 | 100 | |
# customErrors.js | 100 | 100 | 100 | 100 | |
# debug.js | 100 | 100 | 100 | 100 | |
# extendedApi.js | 100 | 100 | 100 | 100 | |
# individualCommands.js | 100 | 100 | 100 | 100 | |
# multi.js | 100 | 100 | 100 | 100 | |
# utils.js | 100 | 100 | 100 | 100 | |
# ------------------------|----------|----------|----------|----------|----------------|
# npm WARN deprecated win-spawn@2.0.0: use [cross-spawn](https://github.com/IndigoUnited/node-cross-spawn) or [cross-spawn-async](https://github.com/IndigoUnited/node-cross-spawn-async) instead.
# npm WARN deprecated boom@2.10.1: This version is no longer maintained. Please upgrade to the latest version.
# npm WARN deprecated hoek@2.16.3: This version is no longer maintained. Please upgrade to the latest version.
# npm WARN deprecated cryptiles@2.0.5: This version is no longer maintained. Please upgrade to the latest version.
# npm WARN deprecated circular-json@0.3.3: CircularJSON is in maintenance only, flatted is its successor.
# node_redis: Deprecated: The AUTH command contains a "undefined" argument.
# This is converted to a "undefined" string now and will return an error from v.3.0 on.
# Please handle this in your code to make sure everything works as you intended it to.
# node_redis: Deprecated: The AUTH command contains a "undefined" argument.
# This is converted to a "undefined" string now and will return an error from v.3.0 on.
# Please handle this in your code to make sure everything works as you intended it to.
# node_redis: Deprecated: The AUTH command contains a "undefined" argument.
# This is converted to a "undefined" string now and will return an error from v.3.0 on.
# Please handle this in your code to make sure everything works as you intended it to.
# node_redis: Deprecated: The AUTH command contains a "undefined" argument.
# This is converted to a "undefined" string now and will return an error from v.3.0 on.
# Please handle this in your code to make sure everything works as you intended it to.
# node_redis: Deprecated: The AUTH command contains a "undefined" argument.
# This is converted to a "undefined" string now and will return an error from v.3.0 on.
# Please handle this in your code to make sure everything works as you intended it to.
# node_redis: Deprecated: The AUTH command contains a "undefined" argument.
# This is converted to a "undefined" string now and will return an error from v.3.0 on.
# Please handle this in your code to make sure everything works as you intended it to.
# node_redis: max_attempts is deprecated and will be removed in v.3.0.0.
# To reduce the number of options and to improve the reconnection handling please use the new `retry_strategy` option instead.
# This replaces the max_attempts and retry_max_delay option.
# node_redis: max_attempts is deprecated and will be removed in v.3.0.0.
# To reduce the number of options and to improve the reconnection handling please use the new `retry_strategy` option instead.
# This replaces the max_attempts and retry_max_delay option.
# node_redis: WARNING: You passed the db option twice!
# node_redis: WARNING: You passed "http" as protocol instead of the "redis" protocol!
# node_redis: Warning: Redis server does not require a password, but a password was supplied.
# node_redis: max_attempts is deprecated and will be removed in v.3.0.0.
# To reduce the number of options and to improve the reconnection handling please use the new `retry_strategy` option instead.
# This replaces the max_attempts and retry_max_delay option.
# node_redis: max_attempts is deprecated and will be removed in v.3.0.0.
# To reduce the number of options and to improve the reconnection handling please use the new `retry_strategy` option instead.
# This replaces the max_attempts and retry_max_delay option.
# node_redis: WARNING: You passed the db option twice!
# node_redis: WARNING: You passed "http" as protocol instead of the "redis" protocol!
# node_redis: Warning: Redis server does not require a password, but a password was supplied.
# node_redis: max_attempts is deprecated and will be removed in v.3.0.0.
# To reduce the number of options and to improve the reconnection handling please use the new `retry_strategy` option instead.
# This replaces the max_attempts and retry_max_delay option.
# node_redis: max_attempts is deprecated and will be removed in v.3.0.0.
# To reduce the number of options and to improve the reconnection handling please use the new `retry_strategy` option instead.
# This replaces the max_attempts and retry_max_delay option.
# node_redis: max_attempts is deprecated and will be removed in v.3.0.0.
# To reduce the number of options and to improve the reconnection handling please use the new `retry_strategy` option instead.
# This replaces the max_attempts and retry_max_delay option.
# node_redis: max_attempts is deprecated and will be removed in v.3.0.0.
# To reduce the number of options and to improve the reconnection handling please use the new `retry_strategy` option instead.
# This replaces the max_attempts and retry_max_delay option.
# node_redis: socket_nodelay is deprecated and will be removed in v.3.0.0.
# Setting socket_nodelay to false likely results in a reduced throughput. Please use .batch for pipelining instead.
# If you are sure you rely on the NAGLE-algorithm you can activate it by calling client.stream.setNoDelay(false) instead.
# node_redis: socket_nodelay is deprecated and will be removed in v.3.0.0.
# Setting socket_nodelay to false likely results in a reduced throughput. Please use .batch for pipelining instead.
# If you are sure you rely on the NAGLE-algorithm you can activate it by calling client.stream.setNoDelay(false) instead.
# node_redis: retry_max_delay is deprecated and will be removed in v.3.0.0.
# To reduce the amount of options and the improve the reconnection handling please use the new `retry_strategy` option instead.
# This replaces the max_attempts and retry_max_delay option.
# node_redis: max_attempts is deprecated and will be removed in v.3.0.0.
# To reduce the number of options and to improve the reconnection handling please use the new `retry_strategy` option instead.
# This replaces the max_attempts and retry_max_delay option.
# node_redis: max_attempts is deprecated and will be removed in v.3.0.0.
# To reduce the number of options and to improve the reconnection handling please use the new `retry_strategy` option instead.
# This replaces the max_attempts and retry_max_delay option.
# node_redis: max_attempts is deprecated and will be removed in v.3.0.0.
# To reduce the number of options and to improve the reconnection handling please use the new `retry_strategy` option instead.
# This replaces the max_attempts and retry_max_delay option.
# node_redis: socket_nodelay is deprecated and will be removed in v.3.0.0.
# Setting socket_nodelay to false likely results in a reduced throughput. Please use .batch for pipelining instead.
# If you are sure you rely on the NAGLE-algorithm you can activate it by calling client.stream.setNoDelay(false) instead.
# node_redis: socket_nodelay is deprecated and will be removed in v.3.0.0.
# Setting socket_nodelay to false likely results in a reduced throughput. Please use .batch for pipelining instead.
# If you are sure you rely on the NAGLE-algorithm you can activate it by calling client.stream.setNoDelay(false) instead.
# node_redis: retry_max_delay is deprecated and will be removed in v.3.0.0.
# To reduce the amount of options and the improve the reconnection handling please use the new `retry_strategy` option instead.
# This replaces the max_attempts and retry_max_delay option.
# node_redis: max_attempts is deprecated and will be removed in v.3.0.0.
# To reduce the number of options and to improve the reconnection handling please use the new `retry_strategy` option instead.
# This replaces the max_attempts and retry_max_delay option.
# node_redis: max_attempts is deprecated and will be removed in v.3.0.0.
# To reduce the number of options and to improve the reconnection handling please use the new `retry_strategy` option instead.
# This replaces the max_attempts and retry_max_delay option.
# node_redis: max_attempts is deprecated and will be removed in v.3.0.0.
# To reduce the number of options and to improve the reconnection handling please use the new `retry_strategy` option instead.
# This replaces the max_attempts and retry_max_delay option.
# node_redis: Deprecated: The MSET command contains a "undefined" argument.
# This is converted to a "undefined" string now and will return an error from v.3.0 on.
# Please handle this in your code to make sure everything works as you intended it to.
# node_redis: Deprecated: The MSET command contains a "undefined" argument.
# This is converted to a "undefined" string now and will return an error from v.3.0 on.
# Please handle this in your code to make sure everything works as you intended it to.
# node_redis: Deprecated: The SET command contains a "undefined" argument.
# This is converted to a "undefined" string now and will return an error from v.3.0 on.
# Please handle this in your code to make sure everything works as you intended it to.
# node_redis: Deprecated: The SET command contains a "null" argument.
# This is converted to a "null" string now and will return an error from v.3.0 on.
# Please handle this in your code to make sure everything works as you intended it to.
# node_redis: Deprecated: The SET command contains a "undefined" argument.
# This is converted to a "undefined" string now and will return an error from v.3.0 on.
# Please handle this in your code to make sure everything works as you intended it to.
# node_redis: Deprecated: The SET command contains a "null" argument.
# This is converted to a "null" string now and will return an error from v.3.0 on.
# Please handle this in your code to make sure everything works as you intended it to.
# npm ERR! Test failed. See above for more details. duration_ms: 85647 ... 1..1