// Copyright (C) 2011 - Will Glozer. All rights reserved.
package com.lambdaworks.redis;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import java.util.Arrays;
import java.util.List;
import static org.junit.Assert.*;
public class TransactionCommandTest extends AbstractCommandTest {
@Rule
public ExpectedException exception = ExpectedException.none();
@Test
public void discard() throws Exception {
assertEquals("OK", redis.multi());
redis.set(key, value);
assertEquals("OK", redis.discard());
assertNull(redis.get(key));
}
@Test
public void exec() throws Exception {
assertEquals("OK", redis.multi());
redis.set(key, value);
assertEquals(list("OK"), redis.exec());
assertEquals(value, redis.get(key));
}
@Test
public void watch() throws Exception {
assertEquals("OK", redis.watch(key));
RedisConnection<String, String> redis2 = client.connect();
redis2.set(key, value + "X");
redis2.close();
redis.multi();
redis.append(key, "foo");
assertEquals(list(), redis.exec());
}
@Test
public void unwatch() throws Exception {
assertEquals("OK", redis.unwatch());
}
@Test
public void commandsReturnNullInMulti() throws Exception {
assertEquals("OK", redis.multi());
assertNull(redis.set(key, value));
assertNull(redis.get(key));
assertEquals(list("OK", value), redis.exec());
assertEquals(value, redis.get(key));
}
@Test
public void execmulti() throws Exception {
redis.multi();
redis.set("one", "1");
redis.set("two", "2");
redis.mget("one", "two");
redis.llen(key);
assertEquals(list("OK", "OK", list("1", "2"), 0L), redis.exec());
}
@Test
public void errorInMulti() throws Exception {
redis.multi();
redis.set(key, value);
redis.lpop(key);
redis.get(key);
List<Object> values = redis.exec();
assertEquals("OK", values.get(0));
assertTrue(values.get(1) instanceof RedisException);
assertEquals(value, values.get(2));
}
@Test
public void execWithoutMulti() throws Exception {
exception.expect(RedisException.class);
exception.expectMessage("ERR EXEC without MULTI");
redis.exec();
}
protected List<Object> list(Object... args) {
return Arrays.asList(args);
}
}