Skip to content

Commit d63ce5a

Browse files
committed
Merge pull request #8 from mcweba/master
Ensure API backward compatibility
2 parents ff8145e + 2879234 commit d63ce5a

File tree

3 files changed

+164
-3
lines changed

3 files changed

+164
-3
lines changed

src/main/java/org/swisspush/redisques/util/RedisquesAPI.java

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package org.swisspush.redisques.util;
22

33
import io.vertx.core.json.JsonObject;
4+
import io.vertx.core.logging.Logger;
5+
import io.vertx.core.logging.LoggerFactory;
6+
import org.swisspush.redisques.RedisQues;
47

58
/**
69
* Class RedisquesAPI listing the operations and response values which are supported in Redisques.
@@ -23,15 +26,48 @@ public class RedisquesAPI {
2326
public static final String REQUESTED_BY = "requestedBy";
2427
public static final String NO_SUCH_LOCK = "No such lock";
2528

29+
private static Logger log = LoggerFactory.getLogger(RedisquesAPI.class);
30+
2631
public enum QueueOperation {
27-
enqueue, check, reset, stop, getQueueItems, addQueueItem, deleteQueueItem,
28-
getQueueItem, replaceQueueItem, deleteAllQueueItems, getAllLocks, putLock,
29-
getLock, deleteLock, getQueues, getQueuesCount, getQueueItemsCount;
32+
enqueue(null),
33+
check(null),
34+
reset(null),
35+
stop(null),
36+
getQueueItems("getListRange"),
37+
addQueueItem("addItem"),
38+
deleteQueueItem("deleteItem"),
39+
getQueueItem("getItem"),
40+
replaceQueueItem("replaceItem"),
41+
deleteAllQueueItems(null),
42+
getAllLocks(null),
43+
putLock(null),
44+
getLock(null),
45+
deleteLock(null),
46+
getQueues(null),
47+
getQueuesCount(null),
48+
getQueueItemsCount(null);
49+
50+
private final String legacyName;
51+
52+
QueueOperation(String legacyName){
53+
this.legacyName = legacyName;
54+
}
55+
56+
public String getLegacyName() {
57+
return legacyName;
58+
}
59+
60+
public boolean hasLegacyName(){
61+
return legacyName != null;
62+
}
3063

3164
public static QueueOperation fromString(String op){
3265
for (QueueOperation queueOperation : values()) {
3366
if(queueOperation.name().equalsIgnoreCase(op)){
3467
return queueOperation;
68+
} else if(queueOperation.hasLegacyName() && queueOperation.getLegacyName().equalsIgnoreCase(op)){
69+
log.warn("Legacy queue operation used. This may be removed in future releases. Use '"+queueOperation.name()+"' instead of '" + queueOperation.getLegacyName() + "'");
70+
return queueOperation;
3571
}
3672
}
3773
return null;

src/test/java/org/swisspush/redisques/RedisQuesTest.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,24 @@ public void addQueueItem(TestContext context) {
187187
});
188188
}
189189

190+
@Test
191+
public void addQueueItemWithLegacyOperationName(TestContext context) {
192+
Async async = context.async();
193+
flushAll();
194+
assertKeyCount(context, QUEUES_PREFIX, 0);
195+
196+
JsonObject op = new JsonObject();
197+
op.put(OPERATION, "addItem");
198+
op.put(PAYLOAD, new JsonObject().put(QUEUENAME, "queue2").put("buffer", "fooBar"));
199+
200+
eventBusSend(op, message -> {
201+
context.assertEquals(OK, message.result().body().getString(STATUS));
202+
assertKeyCount(context, QUEUES_PREFIX, 1);
203+
context.assertEquals("fooBar", jedis.lindex(QUEUES_PREFIX + "queue2", 0));
204+
async.complete();
205+
});
206+
}
207+
190208
@Test
191209
public void getQueueItemsWithQueueSizeInformation(TestContext context) {
192210
Async async = context.async();
@@ -245,6 +263,27 @@ public void replaceQueueItem(TestContext context) {
245263
});
246264
}
247265

266+
@Test
267+
public void replaceQueueItemWithLegacyOperationName(TestContext context) {
268+
Async async = context.async();
269+
flushAll();
270+
eventBusSend(buildAddQueueItemOperation("queue1", "foo"), message -> {
271+
context.assertEquals(OK, message.result().body().getString(STATUS));
272+
assertKeyCount(context, QUEUES_PREFIX, 1);
273+
context.assertEquals("foo", jedis.lindex(QUEUES_PREFIX + "queue1", 0));
274+
275+
JsonObject op = new JsonObject();
276+
op.put(OPERATION, "replaceItem");
277+
op.put(PAYLOAD, new JsonObject().put(QUEUENAME, "queue1").put("index", 0).put("buffer", "bar"));
278+
279+
eventBusSend(op, message1 -> {
280+
context.assertEquals(OK, message1.result().body().getString(STATUS));
281+
context.assertEquals("bar", jedis.lindex(QUEUES_PREFIX + "queue1", 0));
282+
async.complete();
283+
});
284+
});
285+
}
286+
248287
@Test
249288
public void deleteQueueItem(TestContext context) {
250289
Async async = context.async();
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
package org.swisspush.redisques.util;
2+
3+
import io.vertx.ext.unit.TestContext;
4+
import io.vertx.ext.unit.junit.VertxUnitRunner;
5+
import org.junit.Test;
6+
import org.junit.runner.RunWith;
7+
8+
import static org.swisspush.redisques.util.RedisquesAPI.*;
9+
10+
/**
11+
* Tests for {@link RedisquesAPI} class.
12+
*
13+
* @author https://github.com/mcweba [Marc-Andre Weber]
14+
*/
15+
@RunWith(VertxUnitRunner.class)
16+
public class RedisquesAPITest {
17+
18+
@Test
19+
public void testQueueOperationFromString(TestContext context){
20+
context.assertNull(QueueOperation.fromString("abc"));
21+
context.assertNull(QueueOperation.fromString("dummy"));
22+
context.assertNull(QueueOperation.fromString("doEnqueueThisItemPlease"));
23+
24+
context.assertEquals(QueueOperation.check, QueueOperation.fromString("check"));
25+
context.assertEquals(QueueOperation.check, QueueOperation.fromString("CHECK"));
26+
27+
context.assertEquals(QueueOperation.getAllLocks, QueueOperation.fromString("getAllLocks"));
28+
context.assertEquals(QueueOperation.getAllLocks, QueueOperation.fromString("getallLOCKS"));
29+
30+
context.assertEquals(QueueOperation.getQueueItems, QueueOperation.fromString("getListRange")); // legacy
31+
context.assertEquals(QueueOperation.getQueueItems, QueueOperation.fromString("GETLISTRANGE")); // legacy
32+
context.assertEquals(QueueOperation.getQueueItems, QueueOperation.fromString("getQueueItems"));
33+
34+
context.assertEquals(QueueOperation.addQueueItem, QueueOperation.fromString("addItem")); // legacy
35+
context.assertEquals(QueueOperation.addQueueItem, QueueOperation.fromString("addITEM")); // legacy
36+
context.assertEquals(QueueOperation.addQueueItem, QueueOperation.fromString("addQueueItem"));
37+
context.assertEquals(QueueOperation.addQueueItem, QueueOperation.fromString("addQUEUEItem"));
38+
39+
context.assertEquals(QueueOperation.deleteQueueItem, QueueOperation.fromString("deleteItem")); // legacy
40+
context.assertEquals(QueueOperation.deleteQueueItem, QueueOperation.fromString("DELETEItem")); // legacy
41+
context.assertEquals(QueueOperation.deleteQueueItem, QueueOperation.fromString("deleteQueueItem"));
42+
context.assertEquals(QueueOperation.deleteQueueItem, QueueOperation.fromString("DELETEQueueItem"));
43+
44+
context.assertEquals(QueueOperation.getQueueItem, QueueOperation.fromString("getItem")); // legacy
45+
context.assertEquals(QueueOperation.getQueueItem, QueueOperation.fromString("getitem")); // legacy
46+
context.assertEquals(QueueOperation.getQueueItem, QueueOperation.fromString("getQueueItem"));
47+
context.assertEquals(QueueOperation.getQueueItem, QueueOperation.fromString("GETQueUEItem"));
48+
49+
context.assertEquals(QueueOperation.replaceQueueItem, QueueOperation.fromString("replaceItem")); // legacy
50+
context.assertEquals(QueueOperation.replaceQueueItem, QueueOperation.fromString("replACeIteM")); // legacy
51+
context.assertEquals(QueueOperation.replaceQueueItem, QueueOperation.fromString("replaceQueueItem"));
52+
context.assertEquals(QueueOperation.replaceQueueItem, QueueOperation.fromString("REPLACEQUEUEITEM"));
53+
54+
context.assertEquals(QueueOperation.getQueues, QueueOperation.fromString("getQueues"));
55+
context.assertEquals(QueueOperation.getQueuesCount, QueueOperation.fromString("getQueuesCount"));
56+
context.assertEquals(QueueOperation.getQueueItemsCount, QueueOperation.fromString("getQueueItemsCount"));
57+
}
58+
59+
@Test
60+
public void testLegacyName(TestContext context){
61+
context.assertTrue(QueueOperation.getQueueItems.hasLegacyName());
62+
context.assertTrue(QueueOperation.addQueueItem.hasLegacyName());
63+
context.assertTrue(QueueOperation.deleteQueueItem.hasLegacyName());
64+
context.assertTrue(QueueOperation.getQueueItem.hasLegacyName());
65+
context.assertTrue(QueueOperation.replaceQueueItem.hasLegacyName());
66+
67+
context.assertEquals("getListRange", QueueOperation.getQueueItems.getLegacyName());
68+
context.assertEquals("addItem", QueueOperation.addQueueItem.getLegacyName());
69+
context.assertEquals("deleteItem", QueueOperation.deleteQueueItem.getLegacyName());
70+
context.assertEquals("getItem", QueueOperation.getQueueItem.getLegacyName());
71+
context.assertEquals("replaceItem", QueueOperation.replaceQueueItem.getLegacyName());
72+
73+
context.assertFalse(QueueOperation.enqueue.hasLegacyName());
74+
context.assertFalse(QueueOperation.check.hasLegacyName());
75+
context.assertFalse(QueueOperation.reset.hasLegacyName());
76+
context.assertFalse(QueueOperation.stop.hasLegacyName());
77+
context.assertFalse(QueueOperation.deleteAllQueueItems.hasLegacyName());
78+
context.assertFalse(QueueOperation.getAllLocks.hasLegacyName());
79+
context.assertFalse(QueueOperation.putLock.hasLegacyName());
80+
context.assertFalse(QueueOperation.getLock.hasLegacyName());
81+
context.assertFalse(QueueOperation.deleteLock.hasLegacyName());
82+
context.assertFalse(QueueOperation.getQueues.hasLegacyName());
83+
context.assertFalse(QueueOperation.getQueuesCount.hasLegacyName());
84+
context.assertFalse(QueueOperation.getQueueItemsCount.hasLegacyName());
85+
}
86+
}

0 commit comments

Comments
 (0)