From acb1eb594f82704576f2a2850fec059d53746288 Mon Sep 17 00:00:00 2001 From: Jonathan Leibiusky Date: Wed, 11 May 2011 14:56:05 -0300 Subject: [PATCH] throw a JedisConnectionException if unsubscribing from a not subscribed JedisPubSub instance --- .../java/redis/clients/jedis/JedisPubSub.java | 5 ++++ .../PublishSubscribeCommandsTest.java | 26 +++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/main/java/redis/clients/jedis/JedisPubSub.java b/src/main/java/redis/clients/jedis/JedisPubSub.java index 48a1a72..d07a409 100644 --- a/src/main/java/redis/clients/jedis/JedisPubSub.java +++ b/src/main/java/redis/clients/jedis/JedisPubSub.java @@ -10,6 +10,7 @@ import static redis.clients.jedis.Protocol.Keyword.UNSUBSCRIBE; import java.util.Arrays; import java.util.List; +import redis.clients.jedis.exceptions.JedisConnectionException; import redis.clients.jedis.exceptions.JedisException; import redis.clients.util.SafeEncoder; @@ -31,6 +32,10 @@ public abstract class JedisPubSub { public abstract void onPSubscribe(String pattern, int subscribedChannels); public void unsubscribe() { + if (client == null) { + throw new JedisConnectionException( + "JedisPubSub was not subscribed to a Jedis instance."); + } client.unsubscribe(); client.flush(); } diff --git a/src/test/java/redis/clients/jedis/tests/commands/PublishSubscribeCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/PublishSubscribeCommandsTest.java index 9ce0147..39f8465 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/PublishSubscribeCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/PublishSubscribeCommandsTest.java @@ -9,6 +9,7 @@ import org.junit.Test; import redis.clients.jedis.BinaryJedisPubSub; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPubSub; +import redis.clients.jedis.exceptions.JedisConnectionException; import redis.clients.jedis.exceptions.JedisDataException; import redis.clients.util.SafeEncoder; @@ -501,4 +502,29 @@ public class PublishSubscribeCommandsTest extends JedisCommandTestBase { // this is OK because we are not sending AUTH command } } + + @Test(expected = JedisConnectionException.class) + public void unsubscribeWhenNotSusbscribed() throws InterruptedException { + JedisPubSub pubsub = new JedisPubSub() { + public void onMessage(String channel, String message) { + } + + public void onPMessage(String pattern, String channel, + String message) { + } + + public void onSubscribe(String channel, int subscribedChannels) { + } + + public void onUnsubscribe(String channel, int subscribedChannels) { + } + + public void onPUnsubscribe(String pattern, int subscribedChannels) { + } + + public void onPSubscribe(String pattern, int subscribedChannels) { + } + }; + pubsub.unsubscribe(); + } } \ No newline at end of file