TAP version 13 not ok 1 - redis v2.8.0 The canary is dead: ---
# undefinedadded 425 packages from 581 contributors and audited 853 packages in 29.96s
# found 22 vulnerabilities (16 low, 5 moderate, 1 critical)
# run `npm audit fix` to fix them, or `npm audit` for details
# > redis@2.8.0 test /tmp/a15058f2-14b8-4aae-ae42-fbc59b92c36a/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 (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 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 (408ms)
# 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 (100ms)
# 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 (408ms)
# 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)
# 1) 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 (409ms)
# 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)
# 2) 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 (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 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 (205ms)
# 3) 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 (409ms)
# 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)
# 4) 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 (408ms)
# 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 (203ms)
# 5) 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
# 6) sync process and no master should delay ready being emitted for slaves
# 7) "after all" hook
# 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
# 8) calling quit while connected without offline queue should end the connection when all commands have finished
# 9) do not quit before connected or a connection issue is detected
# 10) "after each" hook for "do not quit before connected or a connection issue is detected"
# 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
# 11) "before each" hook for "returns a string"
# 12) "before each" hook for "returns a string"
# stack traces
# 13) should return good traces with NODE_ENV=development set
# 14) should return good traces with NODE_DEBUG=redis env set
# should always return good stack traces for rejected offline commands
# The 'multi' method
# regression test
# 15) saved buffers with charsets different than utf-8 (issue
#913)
# 16) saved buffers with charsets different than utf-8 (issue
#913)
# pipeline limit
# using options: detect_buffers: true;
# using javascript and IPv4
# when not connected
# reports an error
# using options: detect_buffers: false;
# using javascript and IPv4
# when not connected
# 17) "before each" hook
# when connected
# 18) executes a pipelined multi properly in combination with the offline queue
# 19) executes a pipelined multi properly in combination with the offline queue
# monitor and transactions do not work together
# 20) results in a execabort
# 21) "before each" hook
# 22) "before each" hook
# The node_redis client
# 23) "after each" hook
# 24) "after all" hook
# 149 passing (15s)
# 24 failing
# 1) client authentication using options: detect_buffers: true; using javascript and IPv6 individual commands work properly with batch:
# Uncaught AssertionError [ERR_ASSERTION]: '1' === '0'
# + expected - actual
# -1
# +0
#
# at test/auth.spec.js:322:32
# at Object.callbackOrEmit [as callback_or_emit] (lib/utils.js:13:831)
# at lib/individualCommands.js:34:149
# at Command.batch_callback [as callback] (lib/multi.js:12:150)
# at normal_reply (index.js:73:1175)
# at RedisClient.return_reply (index.js:90:901)
# at JavascriptRedisParser.returnReply (index.js:26:1888)
# at JavascriptRedisParser.execute (node_modules/redis-parser/lib/parser.js:574:12)
# at Socket. (index.js:42:42)
# at addChunk (_stream_readable.js:263:12)
# at readableAddChunk (_stream_readable.js:250:11)
# at Socket.Readable.push (_stream_readable.js:208:10)
# at TCP.onread (net.js:601:20)
# 2) client authentication using options: detect_buffers: true; using javascript and /tmp/redis.sock individual commands work properly with batch:
# Uncaught AssertionError [ERR_ASSERTION]: '1' === '0'
# + expected - actual
# -1
# +0
#
# at test/auth.spec.js:322:32
# at Object.callbackOrEmit [as callback_or_emit] (lib/utils.js:13:831)
# at lib/individualCommands.js:34:149
# at Command.batch_callback [as callback] (lib/multi.js:12:150)
# at normal_reply (index.js:73:1175)
# at RedisClient.return_reply (index.js:90:901)
# at JavascriptRedisParser.returnReply (index.js:26:1888)
# at JavascriptRedisParser.execute (node_modules/redis-parser/lib/parser.js:574:12)
# at Socket. (index.js:42:42)
# at addChunk (_stream_readable.js:263:12)
# at readableAddChunk (_stream_readable.js:250:11)
# at Socket.Readable.push (_stream_readable.js:208:10)
# at TCP.onread (net.js:601:20)
# 3) client authentication using options: detect_buffers: false; using javascript and IPv4 individual commands work properly with batch:
# Uncaught AssertionError [ERR_ASSERTION]: '1' === '0'
# + expected - actual
# -1
# +0
#
# at test/auth.spec.js:322:32
# at Object.callbackOrEmit [as callback_or_emit] (lib/utils.js:13:831)
# at lib/individualCommands.js:34:149
# at Command.batch_callback [as callback] (lib/multi.js:12:150)
# at normal_reply (index.js:73:1175)
# at RedisClient.return_reply (index.js:90:901)
# at JavascriptRedisParser.returnReply (index.js:26:1888)
# at JavascriptRedisParser.execute (node_modules/redis-parser/lib/parser.js:574:12)
# at Socket. (index.js:42:42)
# at addChunk (_stream_readable.js:263:12)
# at readableAddChunk (_stream_readable.js:250:11)
# at Socket.Readable.push (_stream_readable.js:208:10)
# at TCP.onread (net.js:601:20)
# 4) client authentication using options: detect_buffers: false; using javascript and IPv6 individual commands work properly with batch:
# Uncaught AssertionError [ERR_ASSERTION]: '1' === '0'
# + expected - actual
# -1
# +0
#
# at test/auth.spec.js:322:32
# at Object.callbackOrEmit [as callback_or_emit] (lib/utils.js:13:831)
# at lib/individualCommands.js:34:149
# at Command.batch_callback [as callback] (lib/multi.js:12:150)
# at normal_reply (index.js:73:1175)
# at RedisClient.return_reply (index.js:90:901)
# at JavascriptRedisParser.returnReply (index.js:26:1888)
# at JavascriptRedisParser.execute (node_modules/redis-parser/lib/parser.js:574:12)
# at Socket. (index.js:42:42)
# at addChunk (_stream_readable.js:263:12)
# at readableAddChunk (_stream_readable.js:250:11)
# at Socket.Readable.push (_stream_readable.js:208:10)
# at TCP.onread (net.js:601:20)
# 5) client authentication using options: detect_buffers: false; using javascript and /tmp/redis.sock individual commands work properly with batch:
# Uncaught AssertionError [ERR_ASSERTION]: '1' === '0'
# + expected - actual
# -1
# +0
#
# at test/auth.spec.js:322:32
# at Object.callbackOrEmit [as callback_or_emit] (lib/utils.js:13:831)
# at lib/individualCommands.js:34:149
# at Command.batch_callback [as callback] (lib/multi.js:12:150)
# at normal_reply (index.js:73:1175)
# at RedisClient.return_reply (index.js:90:901)
# at JavascriptRedisParser.returnReply (index.js:26:1888)
# at JavascriptRedisParser.execute (node_modules/redis-parser/lib/parser.js:574:12)
# at Socket. (index.js:42:42)
# at addChunk (_stream_readable.js:263:12)
# at readableAddChunk (_stream_readable.js:250:11)
# at Socket.Readable.push (_stream_readable.js:208:10)
# at TCP.onread (net.js:601:20)
# 6) master slave sync sync process and no master should delay ready being emitted for slaves:
# Error: Timeout of 8000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.
#
# 7) master slave sync "after all" hook:
# AbortError: Ready check failed: Connection forcefully ended and command aborted. It might have been processed.
# at RedisClient.flush_and_error (index.js:51:159)
# at RedisClient.end (lib/extendedApi.js:13:65)
# at Context. (test/conect.slave.spec.js:90:15)
# 8) connection tests quit on lost connections calling quit while connected without offline queue should end the connection when all commands have finished:
# Uncaught ReplyError: Ready check failed: NOAUTH Authentication required.
# at parseError (node_modules/redis-parser/lib/parser.js:193:12)
# at parseType (node_modules/redis-parser/lib/parser.js:303:14)
# 9) connection tests quit on lost connections do not quit before connected or a connection issue is detected:
# Uncaught ReplyError: Ready check failed: NOAUTH Authentication required.
# at parseError (node_modules/redis-parser/lib/parser.js:193:12)
# at parseType (node_modules/redis-parser/lib/parser.js:303:14)
# 10) connection tests "after each" hook for "do not quit before connected or a connection issue is detected":
# AssertionError [ERR_ASSERTION]: expected string 'OK', got error: AbortError: Connection forcefully ended and command aborted.
# at Command.callback (test/helper.js:73:20)
# at RedisClient.flush_and_error (index.js:51:975)
# at RedisClient.end (lib/extendedApi.js:13:65)
# at Context. (test/connection.spec.js:17:16)
# 11) detect_buffers "before each" hook for "returns a string":
# AbortError: Connection forcefully ended and command aborted.
# at RedisClient.flush_and_error (index.js:51:159)
# at RedisClient.end (lib/extendedApi.js:13:65)
# at Context. (test/detect_buffers.spec.js:28:16)
# 12) detect_buffers "before each" hook for "returns a string":
# AbortError: Connection forcefully ended and command aborted.
# at RedisClient.flush_and_error (index.js:51:159)
# at RedisClient.end (lib/extendedApi.js:13:65)
# at Context. (test/detect_buffers.spec.js:28:16)
# 13) stack traces should return good traces with NODE_ENV=development set:
# Uncaught AssertionError [ERR_ASSERTION]: 1 === 0
# + expected - actual
# -1
# +0
#
# at ChildProcess. (test/good_traces.spec.js:24:20)
# at maybeClose (internal/child_process.js:915:16)
# at Process.ChildProcess._handle.onexit (internal/child_process.js:209:5)
# 14) stack traces should return good traces with NODE_DEBUG=redis env set:
# Uncaught AssertionError [ERR_ASSERTION]: 1 === 0
# + expected - actual
# -1
# +0
#
# at ChildProcess. (test/good_traces.spec.js:44:20)
# at maybeClose (internal/child_process.js:915:16)
# at Socket.stream.socket.on (internal/child_process.js:336:11)
# at Pipe._handle.close [as _onclose] (net.js:561:12)
# 15) The 'multi' method regression test saved buffers with charsets different than utf-8 (issue
#913):
# AbortError: Connection forcefully ended and command aborted.
# at RedisClient.flush_and_error (index.js:51:159)
# at RedisClient.end (lib/extendedApi.js:13:65)
# at Context. (test/multi.spec.js:14:16)
# 16) The 'multi' method regression test saved buffers with charsets different than utf-8 (issue
#913):
# AbortError: Connection forcefully ended and command aborted.
# at RedisClient.flush_and_error (index.js:51:159)
# at RedisClient.end (lib/extendedApi.js:13:65)
# at Context. (test/multi.spec.js:14:16)
# 17) The 'multi' method using options: detect_buffers: false; using javascript and IPv4 when not connected "before each" hook:
# Uncaught ReplyError: Ready check failed: NOAUTH Authentication required.
# at parseError (node_modules/redis-parser/lib/parser.js:193:12)
# at parseType (node_modules/redis-parser/lib/parser.js:303:14)
# 18) The 'multi' method using options: detect_buffers: false; using javascript and IPv4 when connected executes a pipelined multi properly in combination with the offline queue:
# AbortError: Connection forcefully ended and command aborted.
# at RedisClient.flush_and_error (index.js:51:159)
# at RedisClient.end (lib/extendedApi.js:13:65)
# at Context. (test/multi.spec.js:14:16)
# 19) The 'multi' method using options: detect_buffers: false; using javascript and IPv4 when connected executes a pipelined multi properly in combination with the offline queue:
# AbortError: Connection forcefully ended and command aborted.
# at RedisClient.flush_and_error (index.js:51:159)
# at RedisClient.end (lib/extendedApi.js:13:65)
# at Context. (test/multi.spec.js:14:16)
# 20) The 'multi' method using options: detect_buffers: false; using javascript and IPv4 when connected monitor and transactions do not work together results in a execabort:
# Uncaught AssertionError [ERR_ASSERTION]: 'NR_CLOSED' === 'EXECABORT'
# + expected - actual
# -NR_CLOSED
# +EXECABORT
#
# at RedisClient. (test/multi.spec.js:139:40)
# at multi_callback (lib/multi.js:7:151)
# at lib/multi.js:11:212
# at callbackOrEmit (lib/utils.js:13:831)
# at lib/utils.js:15:508
# at _combinedTickCallback (internal/process/next_tick.js:132:7)
# at process._tickCallback (internal/process/next_tick.js:181:9)
# 21) The 'multi' method using options: detect_buffers: false; using javascript and IPv4 when connected "before each" hook:
# TypeError: Cannot read property 'call' of undefined
#
# 22) The 'multi' method using options: detect_buffers: false; using javascript and IPv4 when connected "before each" hook:
# TypeError: Cannot read property 'call' of undefined
#
# 23) The 'multi' method "after each" hook:
# TypeError: Cannot read property 'call' of undefined
#
# 24) "after all" hook:
# Uncaught TypeError: Cannot set property 'state' of undefined
# at Object.callbackOrEmit [as callback_or_emit] (lib/utils.js:13:831)
# at Command.callback (lib/individualCommands.js:26:103)
# at RedisClient.flush_and_error (index.js:51:975)
# at RedisClient.connection_gone (index.js:68:180)
# at Socket. (index.js:42:682)
# at endReadableNT (_stream_readable.js:1064:12)
# at _combinedTickCallback (internal/process/next_tick.js:139:11)
# at process._tickCallback (internal/process/next_tick.js:181:9)
# ------------------------|----------|----------|----------|----------|----------------|
# File | % Stmts | % Branch | % Funcs | % Lines |Uncovered Lines |
# ------------------------|----------|----------|----------|----------|----------------|
# All files | 71.99 | 63.66 | 76.03 | 71.99 | |
# redis | 77.1 | 69.47 | 80 | 77.1 | |
# index.js | 77.1 | 69.47 | 80 | 77.1 |... 4,1072,1078 |
# redis/lib | 68.06 | 59.12 | 73.26 | 68.06 | |
# command.js | 100 | 100 | 100 | 100 | |
# commands.js | 86.96 | 83.33 | 80 | 86.96 |... 42,43,44,45 |
# createClient.js | 80 | 78.13 | 100 | 80 |... 54,61,71,76 |
# customErrors.js | 100 | 100 | 100 | 100 | |
# debug.js | 100 | 100 | 100 | 100 | |
# extendedApi.js | 29.23 | 10 | 12.5 | 29.23 |... 109,110,112 |
# individualCommands.js | 59.72 | 46.43 | 73.33 | 59.72 |... 613,615,616 |
# multi.js | 86.24 | 72.92 | 92.31 | 86.24 |... 5,98,99,100 |
# utils.js | 77.19 | 77.14 | 80 | 77.19 |... 117,118,120 |
# ------------------------|----------|----------|----------|----------|----------------|
# 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 hoek@2.16.3: The major version is no longer supported. Please update to 4.x or newer
# npm notice created a lockfile as package-lock.json. You should commit this file.
# (node:10315) Warning: process.on(SIGPROF) is reserved while debugging
# 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.
# events.js:183
# throw er; // Unhandled 'error' event
# ^
# ReplyError: NOAUTH Authentication required.
# at new Command (/tmp/a15058f2-14b8-4aae-ae42-fbc59b92c36a/redis/lib/command.js:1:2326)
# at RedisClient.info (/tmp/a15058f2-14b8-4aae-ae42-fbc59b92c36a/redis/lib/individualCommands.js:35:610)
# at RedisClient.ready_check (/tmp/a15058f2-14b8-4aae-ae42-fbc59b92c36a/redis/index.js:64:68)
# at RedisClient.on_connect (/tmp/a15058f2-14b8-4aae-ae42-fbc59b92c36a/redis/index.js:55:769)
# at Socket. (/tmp/a15058f2-14b8-4aae-ae42-fbc59b92c36a/redis/index.js:40:525)
# at Object.onceWrapper (events.js:313:30)
# at emitNone (events.js:111:20)
# at Socket.emit (events.js:208:7)
# at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1177:10)
# npm ERR! Test failed. See above for more details. duration_ms: 54146 ... 1..1