package voldemort.serialization;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import org.apache.avro.util.Utf8;
import org.junit.Test;
public class StringSerializerTest {
String schemaInfo;
public StringSerializerTest() {
}
public Serializer<Object> getStringSerializer(String schemaInfo) {
SerializerDefinition def;
if(schemaInfo != null) {
def = new SerializerDefinition(DefaultSerializerFactory.STRING_SERIALIZER_TYPE_NAME,
schemaInfo);
} else {
def = new SerializerDefinition(DefaultSerializerFactory.STRING_SERIALIZER_TYPE_NAME);
}
return (Serializer<Object>) new DefaultSerializerFactory().getSerializer(def);
}
@Test
public void testStringSerializer() {
String[] schemaInfos = { "utf8", "utf-8", "UTF8", "UTF-8", null };
for(String schemaInfo: schemaInfos) {
Serializer<Object> ser = getStringSerializer(schemaInfo);
assertInverse(ser, "abc");
assertInverse(ser, null);
assertSerializationFails(ser, new Utf8("foobar"));
assertSerializationFails(ser, 'C');
assertSerializationFails(ser, 123);
assertSerializationFails(ser, new Integer(123));
assertSerializationFails(ser, new byte[5]);
}
}
private void assertSerializationFails(Serializer<Object> ser, Object s) {
try {
ser.toBytes(s);
fail("Serialization should have failed");
} catch(Exception e) {
}
}
private void assertInverse(Serializer<Object> ser, Object s) {
Object returnValue = ser.toObject(ser.toBytes(s));
assertEquals("serialized and deserialized value is different", s, returnValue);
}
}