/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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.apache.camel.component.redis; import java.util.HashSet; import java.util.Set; import org.apache.camel.impl.JndiRegistry; import org.junit.Before; import org.junit.Test; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.SetOperations; import static org.mockito.Matchers.anyCollection; import static org.mockito.Matchers.anyObject; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; public class RedisSetTest extends RedisTestSupport { private RedisTemplate redisTemplate; private SetOperations setOperations; @Override protected JndiRegistry createRegistry() throws Exception { when(redisTemplate.opsForSet()).thenReturn(setOperations); JndiRegistry registry = super.createRegistry(); registry.bind("redisTemplate", redisTemplate); return registry; } @Before public void setUp() throws Exception { redisTemplate = mock(RedisTemplate.class); setOperations = mock(SetOperations.class); super.setUp(); } @Test public void shouldExecuteSADD() throws Exception { when(setOperations.add(anyString(), anyObject())).thenReturn(null); Object result = sendHeaders( RedisConstants.COMMAND, "SADD", RedisConstants.KEY, "key", RedisConstants.VALUE, "value"); verify(setOperations).add("key", "value"); assertEquals(null, result); } @Test public void shouldExecuteSCARD() throws Exception { when(setOperations.size(anyString())).thenReturn(2L); Object result = sendHeaders( RedisConstants.COMMAND, "SCARD", RedisConstants.KEY, "key"); verify(setOperations).size("key"); assertEquals(2L, result); } @Test public void shouldExecuteSDIFF() throws Exception { Set<String> difference = new HashSet<>(); difference.add("a"); difference.add("b"); when(setOperations.difference(anyString(), anyCollection())).thenReturn(difference); Set<String> keys = new HashSet<>(); keys.add("key2"); keys.add("key3"); Object result = sendHeaders( RedisConstants.COMMAND, "SDIFF", RedisConstants.KEY, "key", RedisConstants.KEYS, keys); verify(setOperations).difference("key", keys); assertEquals(difference, result); } @Test public void shouldExecuteSDIFFSTORE() throws Exception { Set<String> keys = new HashSet<>(); keys.add("key2"); keys.add("key3"); sendHeaders( RedisConstants.COMMAND, "SDIFFSTORE", RedisConstants.KEY, "key", RedisConstants.KEYS, keys, RedisConstants.DESTINATION, "destination"); verify(setOperations).differenceAndStore("key", keys, "destination"); } @Test public void shouldExecuteSINTER() throws Exception { Set<String> difference = new HashSet<>(); difference.add("a"); difference.add("b"); when(setOperations.intersect(anyString(), anyCollection())).thenReturn(difference); Set<String> keys = new HashSet<>(); keys.add("key2"); keys.add("key3"); Object result = sendHeaders( RedisConstants.COMMAND, "SINTER", RedisConstants.KEY, "key", RedisConstants.KEYS, keys); verify(setOperations).intersect("key", keys); assertEquals(difference, result); } @Test public void shouldExecuteSINTERSTORE() throws Exception { Set<String> keys = new HashSet<>(); keys.add("key2"); keys.add("key3"); sendHeaders( RedisConstants.COMMAND, "SINTERSTORE", RedisConstants.KEY, "key", RedisConstants.DESTINATION, "destination", RedisConstants.KEYS, keys); verify(setOperations).intersectAndStore("key", keys, "destination"); } @Test public void shouldExecuteSISMEMBER() throws Exception { when(setOperations.isMember(anyString(), anyObject())).thenReturn(true); Object result = sendHeaders( RedisConstants.COMMAND, "SISMEMBER", RedisConstants.KEY, "key", RedisConstants.VALUE, "set"); verify(setOperations).isMember("key", "set"); assertEquals(true, result); } @Test public void shouldExecuteSMEMBERS() throws Exception { Set<String> keys = new HashSet<>(); keys.add("key2"); keys.add("key3"); when(setOperations.members(anyString())).thenReturn(keys); Object result = sendHeaders( RedisConstants.COMMAND, "SMEMBERS", RedisConstants.KEY, "key"); verify(setOperations).members("key"); assertEquals(keys, result); } @Test public void shouldExecuteSMOVE() throws Exception { sendHeaders( RedisConstants.COMMAND, "SMOVE", RedisConstants.KEY, "key", RedisConstants.VALUE, "value", RedisConstants.DESTINATION, "destination"); verify(setOperations).move("key", "value", "destination"); } @Test public void shouldExecuteSPOP() throws Exception { String field = "value"; when(setOperations.pop(anyString())).thenReturn(field); Object result = sendHeaders( RedisConstants.COMMAND, "SPOP", RedisConstants.KEY, "key"); verify(setOperations).pop("key"); assertEquals(field, result); } @Test public void shouldExecuteSRANDMEMBER() throws Exception { String field = "value"; when(setOperations.randomMember(anyString())).thenReturn(field); Object result = sendHeaders( RedisConstants.COMMAND, "SRANDMEMBER", RedisConstants.KEY, "key"); verify(setOperations).randomMember("key"); assertEquals(field, result); } @Test public void shouldExecuteSREM() throws Exception { when(setOperations.remove(anyString(), anyObject())).thenReturn(Long.valueOf(1)); Object result = sendHeaders( RedisConstants.COMMAND, "SREM", RedisConstants.KEY, "key", RedisConstants.VALUE, "value"); verify(setOperations).remove("key", "value"); assertEquals(1L, result); } @Test public void shouldExecuteSUNION() throws Exception { Set<String> resultKeys = new HashSet<>(); resultKeys.add("key2"); resultKeys.add("key3"); when(setOperations.union(anyString(), anyCollection())).thenReturn(resultKeys); Set<String> keys = new HashSet<>(); keys.add("key2"); keys.add("key4"); Object result = sendHeaders( RedisConstants.COMMAND, "SUNION", RedisConstants.KEY, "key", RedisConstants.KEYS, keys); verify(setOperations).union("key", keys); assertEquals(resultKeys, result); } @Test public void shouldExecuteSUNIONSTORE() throws Exception { Set<String> keys = new HashSet<>(); keys.add("key2"); keys.add("key4"); sendHeaders( RedisConstants.COMMAND, "SUNIONSTORE", RedisConstants.KEY, "key", RedisConstants.KEYS, keys, RedisConstants.DESTINATION, "destination"); verify(setOperations).unionAndStore("key", keys, "destination"); } }