DATAREDIS-562 - Add reactive BitField support.

Original pull request: #227.
This commit is contained in:
Mark Paluch
2018-05-03 14:52:16 +02:00
parent 10f8553c5a
commit d2871ec032
6 changed files with 208 additions and 5 deletions

View File

@@ -16,13 +16,17 @@
package org.springframework.data.redis.connection.lettuce;
import static org.hamcrest.Matchers.*;
import static org.hamcrest.collection.IsIterableContainingInOrder.contains;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.*;
import static org.junit.Assume.*;
import static org.springframework.data.redis.connection.BitFieldSubCommands.*;
import static org.springframework.data.redis.connection.BitFieldSubCommands.BitFieldIncrBy.Overflow.*;
import static org.springframework.data.redis.connection.BitFieldSubCommands.BitFieldType.*;
import static org.springframework.data.redis.connection.BitFieldSubCommands.Offset.*;
import org.springframework.data.redis.util.ByteUtils;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import reactor.core.publisher.MonoOperator;
import reactor.test.StepVerifier;
import java.nio.ByteBuffer;
@@ -46,6 +50,7 @@ import org.springframework.data.redis.connection.ReactiveStringCommands.SetComma
import org.springframework.data.redis.connection.RedisStringCommands.BitOperation;
import org.springframework.data.redis.core.types.Expiration;
import org.springframework.data.redis.test.util.HexStringUtils;
import org.springframework.data.redis.util.ByteUtils;
/**
* @author Christoph Strobl
@@ -346,6 +351,63 @@ public class LettuceReactiveStringCommandsTests extends LettuceReactiveCommandsT
.verifyComplete();
}
@Test // DATAREDIS-562
public void bitFieldSetShouldWorkCorrectly() {
StepVerifier
.create(connection.stringCommands().bitField(KEY_1_BBUFFER, create().set(INT_8).valueAt(offset(0L)).to(10L)))
.expectNext(Collections.singletonList(0L)).verifyComplete();
StepVerifier
.create(connection.stringCommands().bitField(KEY_1_BBUFFER, create().set(INT_8).valueAt(offset(0L)).to(20L)))
.expectNext(Collections.singletonList(10L)).verifyComplete();
}
@Test // DATAREDIS-562
public void bitFieldGetShouldWorkCorrectly() {
StepVerifier.create(connection.stringCommands().bitField(KEY_1_BBUFFER, create().get(INT_8).valueAt(offset(0L))))
.expectNext(Collections.singletonList(0L)).verifyComplete();
}
@Test // DATAREDIS-562
public void bitFieldIncrByShouldWorkCorrectly() {
StepVerifier
.create(connection.stringCommands().bitField(KEY_1_BBUFFER, create().incr(INT_8).valueAt(offset(100L)).by(1L)))
.expectNext(Collections.singletonList(1L)).verifyComplete();
}
@Test // DATAREDIS-562
public void bitFieldIncrByWithOverflowShouldWorkCorrectly() {
StepVerifier
.create(connection.stringCommands().bitField(KEY_1_BBUFFER,
create().incr(unsigned(2)).valueAt(offset(102L)).overflow(FAIL).by(1L)))
.expectNext(Collections.singletonList(1L)).verifyComplete();
StepVerifier
.create(connection.stringCommands().bitField(KEY_1_BBUFFER,
create().incr(unsigned(2)).valueAt(offset(102L)).overflow(FAIL).by(1L)))
.expectNext(Collections.singletonList(2L)).verifyComplete();
StepVerifier
.create(connection.stringCommands().bitField(KEY_1_BBUFFER,
create().incr(unsigned(2)).valueAt(offset(102L)).overflow(FAIL).by(1L)))
.expectNext(Collections.singletonList(3L)).verifyComplete();
StepVerifier
.create(connection.stringCommands().bitField(KEY_1_BBUFFER,
create().incr(unsigned(2)).valueAt(offset(102L)).overflow(FAIL).by(1L)))
.expectNext(Collections.singletonList(null)).verifyComplete();
}
@Test // DATAREDIS-562
public void bitfieldShouldAllowMultipleSubcommands() {
StepVerifier
.create(connection.stringCommands().bitField(KEY_1_BBUFFER,
create().incr(signed(5)).valueAt(offset(100L)).by(1L).get(unsigned(4)).valueAt(0L)))
.expectNext(Arrays.asList(1L, 0L)).verifyComplete();
}
@Test // DATAREDIS-525
public void bitOpAndShouldWorkAsExpected() {

View File

@@ -17,6 +17,10 @@ package org.springframework.data.redis.core;
import static org.assertj.core.api.Assertions.*;
import static org.junit.Assume.*;
import static org.springframework.data.redis.connection.BitFieldSubCommands.*;
import static org.springframework.data.redis.connection.BitFieldSubCommands.BitFieldIncrBy.Overflow.*;
import static org.springframework.data.redis.connection.BitFieldSubCommands.BitFieldType.*;
import static org.springframework.data.redis.connection.BitFieldSubCommands.Offset.offset;
import reactor.test.StepVerifier;
@@ -24,6 +28,7 @@ import java.nio.ByteBuffer;
import java.time.Duration;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
@@ -372,6 +377,25 @@ public class DefaultReactiveValueOperationsIntegrationTests<K, V> {
StepVerifier.create(valueOperations.getBit(key, 1)).expectNext(false).expectComplete();
}
@Test // DATAREDIS-562
public void bitField() {
K key = keyFactory.instance();
StepVerifier
.create(valueOperations.bitField(key, create().incr(unsigned(2)).valueAt(offset(102L)).overflow(FAIL).by(1L)))
.expectNext(Collections.singletonList(1L)).verifyComplete();
StepVerifier
.create(valueOperations.bitField(key, create().incr(unsigned(2)).valueAt(offset(102L)).overflow(FAIL).by(1L)))
.expectNext(Collections.singletonList(2L)).verifyComplete();
StepVerifier
.create(valueOperations.bitField(key, create().incr(unsigned(2)).valueAt(offset(102L)).overflow(FAIL).by(1L)))
.expectNext(Collections.singletonList(3L)).verifyComplete();
StepVerifier
.create(valueOperations.bitField(key, create().incr(unsigned(2)).valueAt(offset(102L)).overflow(FAIL).by(1L)))
.expectNext(Collections.singletonList(null)).verifyComplete();
}
@Test // DATAREDIS-602
public void delete() {