Commit 76ed030a authored by Nick Craver's avatar Nick Craver

SWAPDB: Add tests + fix

This wasn't actually working due to needing a "needs DB" exemption, fixed up!
parent 30bbb4b6
...@@ -562,6 +562,7 @@ internal static bool RequiresDatabase(RedisCommand command) ...@@ -562,6 +562,7 @@ internal static bool RequiresDatabase(RedisCommand command)
case RedisCommand.SLAVEOF: case RedisCommand.SLAVEOF:
case RedisCommand.SLOWLOG: case RedisCommand.SLOWLOG:
case RedisCommand.SUBSCRIBE: case RedisCommand.SUBSCRIBE:
case RedisCommand.SWAPDB:
case RedisCommand.SYNC: case RedisCommand.SYNC:
case RedisCommand.TIME: case RedisCommand.TIME:
case RedisCommand.UNSUBSCRIBE: case RedisCommand.UNSUBSCRIBE:
......
...@@ -82,5 +82,39 @@ public async Task MultiDatabases() ...@@ -82,5 +82,39 @@ public async Task MultiDatabases()
Assert.Equal("c", await c); // db:2 Assert.Equal("c", await c); // db:2
} }
} }
[Fact]
public async Task SwapDatabases()
{
using (var muxer = Create(allowAdmin: true))
{
RedisKey key = Me();
var db0id = TestConfig.GetDedicatedDB(muxer);
var db0 = muxer.GetDatabase(db0id);
var db1id = TestConfig.GetDedicatedDB(muxer);
var db1 = muxer.GetDatabase(db1id);
db0.KeyDelete(key, CommandFlags.FireAndForget);
db1.KeyDelete(key, CommandFlags.FireAndForget);
db0.StringSet(key, "a", flags: CommandFlags.FireAndForget);
db1.StringSet(key, "b", flags: CommandFlags.FireAndForget);
var a = db0.StringGetAsync(key);
var b = db1.StringGetAsync(key);
Assert.Equal("a", await a); // db:0
Assert.Equal("b", await b); // db:1
var server = GetServer(muxer);
server.SwapDatabases(db0id, db1id);
var aNew = db1.StringGetAsync(key);
var bNew = db0.StringGetAsync(key);
Assert.Equal("a", await aNew); // db:1
Assert.Equal("b", await bNew); // db:0
}
}
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment