/*
* Copyright 2016-2017 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.data.redis.connection.lettuce;
import static org.hamcrest.collection.IsIterableContainingInAnyOrder.*;
import static org.hamcrest.core.AnyOf.*;
import static org.hamcrest.core.Is.*;
import static org.hamcrest.core.IsEqual.*;
import static org.hamcrest.core.IsNull.*;
import static org.junit.Assert.*;
import reactor.test.StepVerifier;
import java.util.Arrays;
import org.junit.Test;
public class LettuceReactiveSetCommandsTests extends LettuceReactiveCommandsTestsBase {
@Test // DATAREDIS-525
public void sAddShouldAddSingleValue() {
assertThat(connection.setCommands().sAdd(KEY_1_BBUFFER, VALUE_1_BBUFFER).block(), is(1L));
}
@Test // DATAREDIS-525
public void sAddShouldAddValues() {
assertThat(connection.setCommands().sAdd(KEY_1_BBUFFER, Arrays.asList(VALUE_1_BBUFFER, VALUE_2_BBUFFER)).block(),
is(2L));
}
@Test // DATAREDIS-525
public void sRemShouldRemoveSingleValue() {
nativeCommands.sadd(KEY_1, VALUE_1, VALUE_2, VALUE_3);
assertThat(connection.setCommands().sRem(KEY_1_BBUFFER, VALUE_1_BBUFFER).block(), is(1L));
assertThat(nativeCommands.sismember(KEY_1, VALUE_1), is(false));
}
@Test // DATAREDIS-525
public void sRemShouldRemoveValues() {
nativeCommands.sadd(KEY_1, VALUE_1, VALUE_2, VALUE_3);
assertThat(connection.setCommands().sRem(KEY_1_BBUFFER, Arrays.asList(VALUE_1_BBUFFER, VALUE_2_BBUFFER)).block(),
is(2L));
assertThat(nativeCommands.sismember(KEY_1, VALUE_1), is(false));
assertThat(nativeCommands.sismember(KEY_1, VALUE_2), is(false));
}
@Test // DATAREDIS-525
public void sPopShouldRetrieveRandomValue() {
nativeCommands.sadd(KEY_1, VALUE_1, VALUE_2, VALUE_3);
assertThat(connection.setCommands().sPop(KEY_1_BBUFFER).block(), is(notNullValue()));
}
@Test // DATAREDIS-525
public void sPopShouldReturnNullWhenNotPresent() {
assertThat(connection.setCommands().sPop(KEY_1_BBUFFER).block(), is(nullValue()));
}
@Test // DATAREDIS-525
public void sMoveShouldMoveValueCorrectly() {
nativeCommands.sadd(KEY_1, VALUE_1, VALUE_2, VALUE_3);
nativeCommands.sadd(KEY_2, VALUE_1);
assertThat(connection.setCommands().sMove(KEY_1_BBUFFER, KEY_2_BBUFFER, VALUE_3_BBUFFER).block(), is(true));
assertThat(nativeCommands.sismember(KEY_2, VALUE_3), is(true));
}
@Test // DATAREDIS-525
public void sMoveShouldReturnFalseIfValueIsNotAMember() {
nativeCommands.sadd(KEY_1, VALUE_1, VALUE_2);
nativeCommands.sadd(KEY_2, VALUE_1);
assertThat(connection.setCommands().sMove(KEY_1_BBUFFER, KEY_2_BBUFFER, VALUE_3_BBUFFER).block(), is(false));
assertThat(nativeCommands.sismember(KEY_2, VALUE_3), is(false));
}
@Test // DATAREDIS-525
public void sMoveShouldReturnOperateCorrectlyWhenValueAlreadyPresentInTarget() {
nativeCommands.sadd(KEY_1, VALUE_1, VALUE_2, VALUE_3);
nativeCommands.sadd(KEY_2, VALUE_1, VALUE_3);
assertThat(connection.setCommands().sMove(KEY_1_BBUFFER, KEY_2_BBUFFER, VALUE_3_BBUFFER).block(), is(true));
assertThat(nativeCommands.sismember(KEY_1, VALUE_3), is(false));
assertThat(nativeCommands.sismember(KEY_2, VALUE_3), is(true));
}
@Test // DATAREDIS-525
public void sCardShouldCountValuesCorrectly() {
nativeCommands.sadd(KEY_1, VALUE_1, VALUE_2, VALUE_3);
assertThat(connection.setCommands().sCard(KEY_1_BBUFFER).block(), is(3L));
}
@Test // DATAREDIS-525
public void sIsMemberShouldReturnTrueWhenValueContainedInKey() {
nativeCommands.sadd(KEY_1, VALUE_1, VALUE_2);
assertThat(connection.setCommands().sIsMember(KEY_1_BBUFFER, VALUE_1_BBUFFER).block(), is(true));
}
@Test // DATAREDIS-525
public void sIsMemberShouldReturnFalseWhenValueNotContainedInKey() {
nativeCommands.sadd(KEY_1, VALUE_1, VALUE_2);
assertThat(connection.setCommands().sIsMember(KEY_1_BBUFFER, VALUE_3_BBUFFER).block(), is(false));
}
@Test // DATAREDIS-525
public void sInterShouldIntersectSetsCorrectly() {
nativeCommands.sadd(KEY_1, VALUE_1, VALUE_2);
nativeCommands.sadd(KEY_2, VALUE_2, VALUE_3);
StepVerifier.create(connection.setCommands().sInter(Arrays.asList(KEY_1_BBUFFER, KEY_2_BBUFFER))) //
.expectNext(VALUE_2_BBUFFER) //
.verifyComplete();
}
@Test // DATAREDIS-525
public void sInterStoreShouldReturnSizeCorrectly() {
nativeCommands.sadd(KEY_1, VALUE_1, VALUE_2);
nativeCommands.sadd(KEY_2, VALUE_2, VALUE_3);
assertThat(connection.setCommands().sInterStore(KEY_3_BBUFFER, Arrays.asList(KEY_1_BBUFFER, KEY_2_BBUFFER)).block(),
is(1L));
assertThat(nativeCommands.sismember(KEY_3, VALUE_2), is(true));
}
@Test // DATAREDIS-525
public void sUnionShouldCombineSetsCorrectly() {
nativeCommands.sadd(KEY_1, VALUE_1, VALUE_2);
nativeCommands.sadd(KEY_2, VALUE_2, VALUE_3);
StepVerifier.create(connection.setCommands().sUnion(Arrays.asList(KEY_1_BBUFFER, KEY_2_BBUFFER))) //
.expectNextCount(3) //
.expectComplete();
}
@Test // DATAREDIS-525
public void sUnionStoreShouldReturnSizeCorrectly() {
nativeCommands.sadd(KEY_1, VALUE_1, VALUE_2);
nativeCommands.sadd(KEY_2, VALUE_2, VALUE_3);
assertThat(connection.setCommands().sUnionStore(KEY_3_BBUFFER, Arrays.asList(KEY_1_BBUFFER, KEY_2_BBUFFER)).block(),
is(3L));
}
@Test // DATAREDIS-525
public void sDiffShouldBeExcecutedCorrectly() {
nativeCommands.sadd(KEY_1, VALUE_1, VALUE_2);
nativeCommands.sadd(KEY_2, VALUE_2, VALUE_3);
StepVerifier.create(connection.setCommands().sDiff(Arrays.asList(KEY_1_BBUFFER, KEY_2_BBUFFER))) //
.expectNext(VALUE_1_BBUFFER) //
.verifyComplete();
}
@Test // DATAREDIS-525
public void sDiffStoreShouldBeExcecutedCorrectly() {
nativeCommands.sadd(KEY_1, VALUE_1, VALUE_2);
nativeCommands.sadd(KEY_2, VALUE_2, VALUE_3);
assertThat(connection.setCommands().sDiffStore(KEY_3_BBUFFER, Arrays.asList(KEY_1_BBUFFER, KEY_2_BBUFFER)).block(),
is(1L));
}
@Test // DATAREDIS-525
public void sMembersReadsValuesFromSetCorrectly() {
nativeCommands.sadd(KEY_1, VALUE_1, VALUE_2, VALUE_3);
StepVerifier.create(connection.setCommands().sMembers(KEY_1_BBUFFER).buffer(3)) //
.consumeNextWith(
list -> assertThat(list, containsInAnyOrder(VALUE_1_BBUFFER, VALUE_2_BBUFFER, VALUE_3_BBUFFER))) //
.verifyComplete();
}
@Test // DATAREDIS-525
public void sRandMemberReturnsRandomMember() {
nativeCommands.sadd(KEY_1, VALUE_1, VALUE_2, VALUE_3);
assertThat(connection.setCommands().sRandMember(KEY_1_BBUFFER).block(),
anyOf(equalTo(VALUE_1_BBUFFER), equalTo(VALUE_2_BBUFFER), equalTo(VALUE_3_BBUFFER)));
}
@Test // DATAREDIS-525
public void sRandMemberReturnsRandomMembers() {
nativeCommands.sadd(KEY_1, VALUE_1, VALUE_2, VALUE_3);
StepVerifier.create(connection.setCommands().sRandMember(KEY_1_BBUFFER, 2L)) //
.expectNextCount(2) //
.verifyComplete();
}
}