DATAKV-44

+ integration tests for the new BoundKeyOperations interface
This commit is contained in:
Costin Leau
2011-03-15 21:53:48 +02:00
parent 31533a9dc2
commit 689af37119
2 changed files with 177 additions and 0 deletions

View File

@@ -0,0 +1,105 @@
/*
* Copyright 2011 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.keyvalue.redis.support;
import static org.junit.Assert.*;
import java.util.Collection;
import java.util.concurrent.TimeUnit;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import org.springframework.data.keyvalue.redis.ConnectionFactoryTracker;
import org.springframework.data.keyvalue.redis.connection.RedisConnection;
import org.springframework.data.keyvalue.redis.connection.RedisConnectionFactory;
import org.springframework.data.keyvalue.redis.core.BoundKeyOperations;
import org.springframework.data.keyvalue.redis.support.collections.ObjectFactory;
/**
* @author Costin Leau
*/
@RunWith(Parameterized.class)
public class BoundKeyOperationsTest {
private RedisConnectionFactory factory;
private BoundKeyOperations<Object> keyOps;
private ObjectFactory<Object> objFactory;
public BoundKeyOperationsTest(BoundKeyOperations<Object> keyOps, ObjectFactory<Object> objFactory,
RedisConnectionFactory factory) {
this.factory = factory;
this.objFactory = objFactory;
this.keyOps = keyOps;
ConnectionFactoryTracker.add(factory);
}
@After
public void stop() {
RedisConnection connection = factory.getConnection();
connection.close();
}
@AfterClass
public static void cleanUp() {
ConnectionFactoryTracker.cleanUp();
}
@Parameters
public static Collection<Object[]> testParams() {
return BoundKeyParams.testParams();
}
@Test
public void testRename() throws Exception {
Object key = keyOps.getKey();
assertNotNull(key);
Object newName = objFactory.instance();
keyOps.rename(newName);
assertEquals(newName, keyOps.getKey());
keyOps.rename(key);
assertEquals(key, keyOps.getKey());
}
@Test
public void testRenameIfAbsent() throws Exception {
Object key = keyOps.getKey();
assertNotNull(key);
Object newName = objFactory.instance();
keyOps.renameIfAbsent(newName);
assertEquals(newName, keyOps.getKey());
keyOps.rename(key);
}
@Test
public void testExpire() throws Exception {
assertEquals(Long.valueOf(-1), keyOps.getExpire());
assertTrue(keyOps.expire(10, TimeUnit.SECONDS));
long expire = keyOps.getExpire().longValue();
assertTrue(expire <= 10 && expire > 5);
}
@Test
public void testPersist() throws Exception {
assertEquals(Long.valueOf(-1), keyOps.getExpire());
assertTrue(keyOps.expire(10, TimeUnit.SECONDS));
assertTrue(keyOps.getExpire().longValue() > 0);
keyOps.persist();
assertTrue(keyOps.getExpire().longValue() > 0);
}
}

View File

@@ -0,0 +1,72 @@
/*
* Copyright 2011 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.keyvalue.redis.support;
import java.util.Arrays;
import java.util.Collection;
import org.springframework.data.keyvalue.redis.SettingsUtils;
import org.springframework.data.keyvalue.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.keyvalue.redis.connection.jredis.JredisConnectionFactory;
import org.springframework.data.keyvalue.redis.core.StringRedisTemplate;
import org.springframework.data.keyvalue.redis.support.atomic.RedisAtomicInteger;
import org.springframework.data.keyvalue.redis.support.atomic.RedisAtomicLong;
import org.springframework.data.keyvalue.redis.support.collections.DefaultRedisList;
import org.springframework.data.keyvalue.redis.support.collections.DefaultRedisMap;
import org.springframework.data.keyvalue.redis.support.collections.DefaultRedisSet;
import org.springframework.data.keyvalue.redis.support.collections.RedisList;
import org.springframework.data.keyvalue.redis.support.collections.StringObjectFactory;
/**
* @author Costin Leau
*/
public class BoundKeyParams {
public static Collection<Object[]> testParams() {
// create Jedis Factory
JedisConnectionFactory jedisConnFactory = new JedisConnectionFactory();
jedisConnFactory.setPort(SettingsUtils.getPort());
jedisConnFactory.setHostName(SettingsUtils.getHost());
jedisConnFactory.afterPropertiesSet();
// jredis factory
JredisConnectionFactory jredisConnFactory = new JredisConnectionFactory();
jredisConnFactory.setUsePool(true);
jredisConnFactory.setPort(SettingsUtils.getPort());
jredisConnFactory.setHostName(SettingsUtils.getHost());
jredisConnFactory.afterPropertiesSet();
StringRedisTemplate templateJS = new StringRedisTemplate(jedisConnFactory);
StringRedisTemplate templateJR = new StringRedisTemplate(jredisConnFactory);
StringObjectFactory sof = new StringObjectFactory();
DefaultRedisMap mapJS = new DefaultRedisMap("bound:key:map", templateJS);
mapJS.put("foo", "bar");
DefaultRedisSet setJS = new DefaultRedisSet("bound:key:set", templateJS);
setJS.add("foo");
RedisList list = new DefaultRedisList("bound:key:list", templateJS);
list.add("foo");
return Arrays.asList(new Object[][] {
{ new RedisAtomicInteger("bound:key:int", jedisConnFactory), sof, jedisConnFactory },
{ new RedisAtomicLong("bound:key:long", jedisConnFactory), sof, jedisConnFactory },
{ list, sof, jedisConnFactory },
{ setJS, sof, jedisConnFactory }, { mapJS, sof, jedisConnFactory } });
}
}