package com.github.fhuss.storm.elasticsearch.state;
import org.junit.Assert;
import org.junit.Test;
import storm.trident.state.OpaqueValue;
import storm.trident.state.TransactionalValue;
import java.io.IOException;
import static com.github.fhuss.storm.elasticsearch.state.ValueSerializer.*;
/**
* Unit tests for {@link ValueSerializer} implementations.
*
* @author fhussonnois
*/
public class ValueSerializerTest {
public static class FooDocument {
public String value;
// dummy constructor
public FooDocument() {
}
public FooDocument(String value) {
this.value = value;
}
}
@Test
public void shouldDeSerializeNonTransactionValue( ) throws IOException {
NonTransactionalValueSerializer<FooDocument> serializer = new NonTransactionalValueSerializer<>(FooDocument.class);
byte[] value = serializer.serialize(new FooDocument("foo"));
FooDocument actual = serializer.deserialize(value);
Assert.assertNotNull(actual);
Assert.assertEquals("foo", actual.value);
}
@Test
public void shouldSerializeTransactionValue( ) throws IOException {
TransactionalValueSerializer<FooDocument> serializer = new TransactionalValueSerializer<>(FooDocument.class);
byte[] value = serializer.serialize(new TransactionalValue<>(1L, new FooDocument("foo")));
TransactionalValue<FooDocument> actual = serializer.deserialize(value);
Assert.assertNotNull(actual);
Assert.assertEquals(1L, (long)actual.getTxid());
Assert.assertEquals("foo", actual.getVal().value);
}
@Test
public void shouldSerializeOpaqueValueWithNoPreviousValue( ) throws IOException {
OpaqueValueSerializer<FooDocument> serializer = new OpaqueValueSerializer<>(FooDocument.class);
byte[] value = serializer.serialize(new OpaqueValue<>(1L, new FooDocument("foo")));
OpaqueValue<FooDocument> actual = serializer.deserialize(value);
Assert.assertNotNull(actual);
Assert.assertEquals(1L, (long)actual.getCurrTxid());
Assert.assertEquals("foo", actual.getCurr().value);
}
@Test
public void shouldSerializeOpaqueValueWithPreviousValue( ) throws IOException {
OpaqueValueSerializer<FooDocument> serializer = new OpaqueValueSerializer<>(FooDocument.class);
byte[] value = serializer.serialize(new OpaqueValue<>(1L, new FooDocument("foo"), new FooDocument("bar")));
OpaqueValue<FooDocument> actual = serializer.deserialize(value);
Assert.assertNotNull(actual);
Assert.assertEquals(1L, (long)actual.getCurrTxid());
Assert.assertEquals("foo", actual.getCurr().value);
Assert.assertEquals("bar", actual.getPrev().value);
}
}