redict/tests/unit
antirez 96e0fe6232 Fix semantics of Lua calls to SELECT.
Lua scripts are executed in the context of the currently selected
database (as selected by the caller of the script).

However Lua scripts are also free to use the SELECT command in order to
affect other DBs. When SELECT is called frm Lua, the old behavior, before
this commit, was to automatically set the Lua caller selected DB to the
last DB selected by Lua. See for example the following sequence of
commands:

    SELECT 0
    SET x 10
    EVAL "redis.call('select','1')" 0
    SET x 20

Before this commit after the execution of this sequence of commands,
we'll have x=10 in DB 0, and x=20 in DB 1.

Because of the problem above, there was a bug affecting replication of
Lua scripts, because of the actual implementation of replication. It was
possible to fix the implementation of Lua scripts in order to fix the
issue, but looking closely, the bug is the consequence of the behavior
of Lua ability to set the caller's DB.

Under the old semantics, a script selecting a different DB, has no simple
ways to restore the state and select back the previously selected DB.
Moreover the script auhtor must remember that the restore is needed,
otherwise the new commands executed by the caller, will be executed in
the context of a different DB.

So this commit fixes both the replication issue, and this hard-to-use
semantics, by removing the ability of Lua, after the script execution,
to force the caller to switch to the DB selected by the Lua script.

The new behavior of the previous sequence of commadns is to just set
X=20 in DB 0. However Lua scripts are still capable of writing / reading
from different DBs if needed.

WARNING: This is a semantical change that will break programs that are
conceived to select the client selected DB via Lua scripts.

This fixes issue #1811.
2014-06-12 16:05:52 +02:00
..
type Fix blocking operations from missing new lists 2014-05-21 09:52:52 -04:00
aofrw.tcl Tests modified to account for INFO fields renaming. 2012-05-25 15:20:59 +02:00
auth.tcl Return a specific NOAUTH error if authentication is required. 2013-02-12 16:25:41 +01:00
basic.tcl Add test for deleting an expired key 2014-04-10 18:32:19 -04:00
bitops.tcl BITPOS fuzzy testing. 2014-02-27 15:27:05 +01:00
dump.tcl Test: dump.tcl fixed for RESTORE new error msg. 2014-05-22 15:56:17 +02:00
expire.tcl Test: regression test for issue #1026. 2013-03-28 11:46:14 +01:00
hyperloglog.tcl HyperLogLog regression test for issue #1762. 2014-05-19 15:44:04 +02:00
introspection.tcl Test: avoid false positives in CLIENT SETNAME closed connection test. 2013-02-12 13:27:24 +01:00
limits.tcl More robust maxclients test. 2012-04-18 11:34:18 +02:00
maxmemory.tcl Maxmemory test 2011-07-28 12:32:52 +02:00
memefficiency.tcl Fix false positive in memory efficiency test. 2013-11-25 10:21:46 +01:00
multi.tcl Test: test replication of MULTI/EXEC. 2013-03-27 11:44:50 +01:00
obuf-limits.tcl Test: obuf-limits test false positive removed. 2013-03-25 11:56:34 +01:00
other.tcl Test: MULTI/EXEC tests moved into multi.tcl. 2012-11-22 10:32:12 +01:00
printver.tcl Print version info before running the test 2011-05-20 11:44:54 +02:00
protocol.tcl Return proper error on requests with an unbalanced number of quotes. 2013-12-08 12:58:12 +02:00
pubsub.tcl Test: stress events flags to/from string conversion. 2014-01-08 17:18:30 +01:00
quit.tcl Add tests for OK on QUIT 2010-10-15 12:54:53 +02:00
scan.tcl Added tests for [SHZ]SCAN with MATCH. 2013-11-05 15:19:44 +01:00
scripting.tcl Fix semantics of Lua calls to SELECT. 2014-06-12 16:05:52 +02:00
slowlog.tcl Slowlog: don't log EXEC but just the executed commands. 2013-01-19 12:53:21 +01:00
sort.tcl Fix eval usage in tests to conform with eval semantics 2014-04-06 17:20:01 +03:00