Merge pull request #51 from coyotesqrl/master
Issue with masked errors is withTransaction()
diff --git a/src/groovy/grails/plugin/redis/RedisService.groovy b/src/groovy/grails/plugin/redis/RedisService.groovy
index 0a57401..b8ab9de 100644
--- a/src/groovy/grails/plugin/redis/RedisService.groovy
+++ b/src/groovy/grails/plugin/redis/RedisService.groovy
@@ -67,11 +67,12 @@
Transaction transaction = redis.multi()
try {
closure(transaction)
- transaction.exec()
} catch(Exception exception) {
transaction.discard()
throw exception
}
+
+ transaction.exec()
}
}
diff --git a/test/integration/grails/plugin/redis/RedisServiceTests.groovy b/test/integration/grails/plugin/redis/RedisServiceTests.groovy
index c88bce8..8f8fe78 100644
--- a/test/integration/grails/plugin/redis/RedisServiceTests.groovy
+++ b/test/integration/grails/plugin/redis/RedisServiceTests.groovy
@@ -6,6 +6,7 @@
import org.junit.Before
import org.junit.Test
import redis.clients.jedis.exceptions.JedisConnectionException
+import redis.clients.jedis.exceptions.JedisDataException
import static grails.plugin.redis.RedisService.NO_EXPIRATION_TTL
import redis.clients.jedis.Jedis
@@ -525,6 +526,29 @@
assert "bar" == redisService.foo
}
+ @Test
+ public void testWithTransactionEmptyMapException() {
+ redisService.withRedis { Jedis redis ->
+ assert redis.get("foo") == null
+ }
+
+ shouldFail(JedisDataException) {
+ try {
+ redisService.withTransaction { Transaction transaction ->
+ def emptyMap = [:]
+ transaction.hmset("foo", emptyMap)
+ }
+ } catch (any) {
+ assert any.message.startsWith("EXECABORT")
+ throw any
+ }
+ }
+
+ redisService.withRedis { Jedis redis ->
+ assert redis.get("foo") == null
+ }
+ }
+
def testMethodNotOnJedisThrowsMethodMissingException() {
def result = shouldFail { redisService.methodThatDoesNotExistAndNeverWill() }