Skip to content

Commit c94321f

Browse files
authored
Add hincrByFloat in JedisCluster (#2204)
* Add hincrByFloat in JedisCluster * Reformat commands (within Cluster) test codes * Test hincrByFloat in cluster
1 parent c8eef19 commit c94321f

File tree

6 files changed

+142
-227
lines changed

6 files changed

+142
-227
lines changed

src/main/java/redis/clients/jedis/JedisCluster.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -571,6 +571,16 @@ public Long execute(Jedis connection) {
571571
}.run(key);
572572
}
573573

574+
@Override
575+
public Double hincrByFloat(final String key, final String field, final double value) {
576+
return new JedisClusterCommand<Double>(connectionHandler, maxAttempts) {
577+
@Override
578+
public Double execute(Jedis connection) {
579+
return connection.hincrByFloat(key, field, value);
580+
}
581+
}.run(key);
582+
}
583+
574584
@Override
575585
public Boolean hexists(final String key, final String field) {
576586
return new JedisClusterCommand<Boolean>(connectionHandler, maxAttempts) {

src/main/java/redis/clients/jedis/commands/JedisClusterCommands.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@ public interface JedisClusterCommands {
9797

9898
Long hincrBy(String key, String field, long value);
9999

100+
Double hincrByFloat(String key, String field, double value);
101+
100102
Boolean hexists(String key, String field);
101103

102104
Long hdel(String key, String... field);
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
package redis.clients.jedis.tests.commands;
2+
3+
import static org.junit.Assert.assertArrayEquals;
4+
import static org.junit.Assert.assertEquals;
5+
import static org.junit.Assert.assertTrue;
6+
import static redis.clients.jedis.Protocol.Command.*;
7+
8+
import java.util.ArrayList;
9+
import java.util.HashMap;
10+
import java.util.List;
11+
import java.util.Set;
12+
13+
import org.junit.Test;
14+
15+
import redis.clients.jedis.util.SafeEncoder;
16+
17+
public class ClusterBinaryValuesCommandsTest extends ClusterJedisCommandsTestBase {
18+
19+
@Test
20+
public void testBinaryGetAndSet() {
21+
byte[] byteKey = "foo".getBytes();
22+
byte[] byteValue = "2".getBytes();
23+
jedisCluster.set(byteKey, byteValue);
24+
assertArrayEquals(byteValue, jedisCluster.get(byteKey));
25+
}
26+
27+
@Test
28+
public void testIncr() {
29+
byte[] byteKey = "foo".getBytes();
30+
byte[] byteValue = "2".getBytes();
31+
jedisCluster.set(byteKey, byteValue);
32+
jedisCluster.incr(byteKey);
33+
assertArrayEquals("3".getBytes(), jedisCluster.get(byteKey));
34+
}
35+
36+
@Test
37+
public void testSadd() {
38+
byte[] byteKey = "languages".getBytes();
39+
byte[] firstLanguage = "java".getBytes();
40+
byte[] secondLanguage = "python".getBytes();
41+
byte[][] listLanguages = { firstLanguage, secondLanguage };
42+
jedisCluster.sadd(byteKey, listLanguages);
43+
Set<byte[]> setLanguages = jedisCluster.smembers(byteKey);
44+
List<String> languages = new ArrayList<>();
45+
for (byte[] language : setLanguages) {
46+
languages.add(new String(language));
47+
}
48+
assertTrue(languages.contains("java"));
49+
assertTrue(languages.contains("python"));
50+
}
51+
52+
@Test
53+
public void testHmset() {
54+
byte[] key = "jedis".getBytes();
55+
byte[] field = "language".getBytes();
56+
byte[] value = "java".getBytes();
57+
HashMap<byte[], byte[]> map = new HashMap();
58+
map.put(field, value);
59+
jedisCluster.hmset(key, map);
60+
List<byte[]> listResults = jedisCluster.hmget(key, field);
61+
for (byte[] result : listResults) {
62+
assertArrayEquals(value, result);
63+
}
64+
}
65+
66+
@Test
67+
public void testRpush() {
68+
byte[] value1 = "value1".getBytes();
69+
byte[] value2 = "value2".getBytes();
70+
byte[] key = "key1".getBytes();
71+
jedisCluster.del(key);
72+
jedisCluster.rpush(key, value1);
73+
jedisCluster.rpush(key, value2);
74+
assertEquals(2, (long) jedisCluster.llen(key));
75+
}
76+
77+
@Test
78+
public void testKeys() {
79+
assertEquals(0, jedisCluster.keys("{f}o*".getBytes()).size());
80+
jedisCluster.set("{f}oo1".getBytes(), "bar".getBytes());
81+
jedisCluster.set("{f}oo2".getBytes(), "bar".getBytes());
82+
jedisCluster.set("{f}oo3".getBytes(), "bar".getBytes());
83+
assertEquals(3, jedisCluster.keys("{f}o*".getBytes()).size());
84+
}
85+
86+
@Test
87+
public void testBinaryGeneralCommand(){
88+
byte[] key = "x".getBytes();
89+
byte[] value = "1".getBytes();
90+
jedisCluster.sendCommand("z".getBytes(), SET, key, value);
91+
jedisCluster.sendCommand("y".getBytes(), INCR, key);
92+
Object returnObj = jedisCluster.sendCommand("w".getBytes(), GET, key);
93+
assertEquals("2", SafeEncoder.encode((byte[])returnObj));
94+
}
95+
96+
@Test
97+
public void testGeneralCommand(){
98+
jedisCluster.sendCommand("z", SET, "x", "1");
99+
jedisCluster.sendCommand("y", INCR, "x");
100+
Object returnObj = jedisCluster.sendCommand("w", GET, "x");
101+
assertEquals("2", SafeEncoder.encode((byte[])returnObj));
102+
}
103+
104+
105+
@Test(expected = IllegalArgumentException.class)
106+
public void failKeys() {
107+
jedisCluster.keys("*".getBytes());
108+
}
109+
}

src/test/java/redis/clients/jedis/tests/commands/ClusterBinaryJedisCommandsTest.java renamed to src/test/java/redis/clients/jedis/tests/commands/ClusterJedisCommandsTestBase.java

Lines changed: 1 addition & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,20 @@
11
package redis.clients.jedis.tests.commands;
22

3-
import static org.junit.Assert.assertArrayEquals;
4-
import static org.junit.Assert.assertEquals;
5-
import static org.junit.Assert.assertTrue;
6-
import static redis.clients.jedis.Protocol.Command.*;
7-
8-
import java.util.ArrayList;
9-
import java.util.HashMap;
103
import java.util.HashSet;
11-
import java.util.List;
124
import java.util.Set;
135

146
import org.junit.After;
157
import org.junit.AfterClass;
168
import org.junit.Before;
17-
import org.junit.Test;
189

1910
import redis.clients.jedis.HostAndPort;
2011
import redis.clients.jedis.Jedis;
2112
import redis.clients.jedis.JedisCluster;
2213
import redis.clients.jedis.JedisPoolConfig;
2314
import redis.clients.jedis.tests.HostAndPortUtil;
2415
import redis.clients.jedis.util.JedisClusterCRC16;
25-
import redis.clients.jedis.util.SafeEncoder;
2616

27-
public class ClusterBinaryJedisCommandsTest {
17+
public abstract class ClusterJedisCommandsTestBase {
2818
private Jedis node1;
2919
private static Jedis node2;
3020
private static Jedis node3;
@@ -103,102 +93,6 @@ public void tearDown() {
10393
node3.clusterDelSlots(slotsToDelete);
10494
}
10595

106-
@SuppressWarnings("unchecked")
107-
@Test
108-
public void testBinaryGetAndSet() {
109-
byte[] byteKey = "foo".getBytes();
110-
byte[] byteValue = "2".getBytes();
111-
jedisCluster.set(byteKey, byteValue);
112-
assertArrayEquals(byteValue, jedisCluster.get(byteKey));
113-
}
114-
115-
@SuppressWarnings("unchecked")
116-
@Test
117-
public void testIncr() {
118-
byte[] byteKey = "foo".getBytes();
119-
byte[] byteValue = "2".getBytes();
120-
jedisCluster.set(byteKey, byteValue);
121-
jedisCluster.incr(byteKey);
122-
assertArrayEquals("3".getBytes(), jedisCluster.get(byteKey));
123-
}
124-
125-
@SuppressWarnings("unchecked")
126-
@Test
127-
public void testSadd() {
128-
byte[] byteKey = "languages".getBytes();
129-
byte[] firstLanguage = "java".getBytes();
130-
byte[] secondLanguage = "python".getBytes();
131-
byte[][] listLanguages = { firstLanguage, secondLanguage };
132-
jedisCluster.sadd(byteKey, listLanguages);
133-
Set<byte[]> setLanguages = jedisCluster.smembers(byteKey);
134-
List<String> languages = new ArrayList<>();
135-
for (byte[] language : setLanguages) {
136-
languages.add(new String(language));
137-
}
138-
assertTrue(languages.contains("java"));
139-
assertTrue(languages.contains("python"));
140-
}
141-
142-
@SuppressWarnings("unchecked")
143-
@Test
144-
public void testHmset() {
145-
byte[] key = "jedis".getBytes();
146-
byte[] field = "language".getBytes();
147-
byte[] value = "java".getBytes();
148-
HashMap<byte[], byte[]> map = new HashMap();
149-
map.put(field, value);
150-
jedisCluster.hmset(key, map);
151-
List<byte[]> listResults = jedisCluster.hmget(key, field);
152-
for (byte[] result : listResults) {
153-
assertArrayEquals(value, result);
154-
}
155-
}
156-
157-
@SuppressWarnings("unchecked")
158-
@Test
159-
public void testRpush() {
160-
byte[] value1 = "value1".getBytes();
161-
byte[] value2 = "value2".getBytes();
162-
byte[] key = "key1".getBytes();
163-
jedisCluster.del(key);
164-
jedisCluster.rpush(key, value1);
165-
jedisCluster.rpush(key, value2);
166-
assertEquals(2, (long) jedisCluster.llen(key));
167-
}
168-
169-
@Test
170-
public void testKeys() {
171-
assertEquals(0, jedisCluster.keys("{f}o*".getBytes()).size());
172-
jedisCluster.set("{f}oo1".getBytes(), "bar".getBytes());
173-
jedisCluster.set("{f}oo2".getBytes(), "bar".getBytes());
174-
jedisCluster.set("{f}oo3".getBytes(), "bar".getBytes());
175-
assertEquals(3, jedisCluster.keys("{f}o*".getBytes()).size());
176-
}
177-
178-
@Test
179-
public void testBinaryGeneralCommand(){
180-
byte[] key = "x".getBytes();
181-
byte[] value = "1".getBytes();
182-
jedisCluster.sendCommand("z".getBytes(), SET, key, value);
183-
jedisCluster.sendCommand("y".getBytes(), INCR, key);
184-
Object returnObj = jedisCluster.sendCommand("w".getBytes(), GET, key);
185-
assertEquals("2", SafeEncoder.encode((byte[])returnObj));
186-
}
187-
188-
@Test
189-
public void testGeneralCommand(){
190-
jedisCluster.sendCommand("z", SET, "x", "1");
191-
jedisCluster.sendCommand("y", INCR, "x");
192-
Object returnObj = jedisCluster.sendCommand("w", GET, "x");
193-
assertEquals("2", SafeEncoder.encode((byte[])returnObj));
194-
}
195-
196-
197-
@Test(expected = IllegalArgumentException.class)
198-
public void failKeys() {
199-
jedisCluster.keys("*".getBytes());
200-
}
201-
20296
private static String getNodeId(String infoOutput) {
20397
for (String infoLine : infoOutput.split("\n")) {
20498
if (infoLine.contains("myself")) {

0 commit comments

Comments
 (0)