/*
* Copyright 2002-2013 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.xd.dirt.integration.redis;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import org.joda.time.DateTime;
import org.junit.Before;
import org.junit.Test;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.xd.tuple.Tuple;
import org.springframework.xd.tuple.TupleBuilder;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
/**
* @author David Turanski
*
*/
public abstract class AbstractRedisSerializerTests {
private RedisSerializer<Object> serializer;
protected abstract RedisSerializer<Object> getSerializer();
@Before
public void setUp() {
serializer = getSerializer();
}
@Test
public void testRandomObjectSerialization() {
Foo foo = new Foo("hello");
byte[] bytes = serializer.serialize(foo);
Object obj = serializer.deserialize(bytes);
assertTrue(obj instanceof Foo);
assertEquals("hello", ((Foo) obj).bar);
}
@Test
public void testDateSerialization() {
Date d = new Date();
byte[] bytes = serializer.serialize(d);
Date obj = (Date) serializer.deserialize(bytes);
assertEquals(d, obj);
}
@Test
public void testDateTimeSerialization() {
DateTime d = new DateTime();
byte[] bytes = serializer.serialize(d);
DateTime obj = (DateTime) serializer.deserialize(bytes);
assertEquals(d, obj);
}
@Test
public void testStringSerialization() {
String s = new String("hello");
byte[] bytes = serializer.serialize(s);
Object obj = serializer.deserialize(bytes);
assertEquals(s, obj);
}
@Test
public void testLongSerialization() {
byte[] bytes = serializer.serialize(100L);
long obj = (Long) serializer.deserialize(bytes);
assertEquals(100, obj);
}
@Test
public void testFloatSerialization() {
byte[] bytes = serializer.serialize(99.9f);
double obj = (Double) serializer.deserialize(bytes);
assertEquals(99.9, obj, 0.1);
}
@Test
public void testBooleanSerialization() {
byte[] bytes = serializer.serialize(true);
boolean obj = (Boolean) serializer.deserialize(bytes);
assertTrue(obj);
}
@Test
public void testMapSerialization() {
Map<String, String> map = new HashMap<String, String>();
map.put("foo", "bar");
byte[] bytes = serializer.serialize(map);
Map<?, ?> obj = (Map<?, ?>) serializer.deserialize(bytes);
assertEquals("bar", obj.get("foo"));
}
@Test
public void testListSerialization() {
List<String> list = new LinkedList<String>();
list.add("foo");
byte[] bytes = serializer.serialize(list);
List<?> obj = (List<?>) serializer.deserialize(bytes);
assertEquals("foo", obj.get(0));
}
@Test
public void testSetSerialization() {
Set<String> set = new TreeSet<String>();
set.add("foo");
byte[] bytes = serializer.serialize(set);
Set<?> obj = (Set<?>) serializer.deserialize(bytes);
assertEquals("foo", obj.iterator().next());
}
@Test
public void testTupleSerialization() {
Tuple t = TupleBuilder.tuple().of("foo", "bar");
byte[] bytes = serializer.serialize(t);
Tuple obj = (Tuple) serializer.deserialize(bytes);
assertEquals("bar", obj.getString("foo"));
}
public static class Foo {
@JsonCreator
public Foo(@JsonProperty("bar") String val) {
bar = val;
}
public String bar;
}
}