Package org.axonframework.serializer

Source Code of org.axonframework.serializer.SerializedDomainEventMessageTest

/*
* Copyright (c) 2010-2012. Axon Framework
*
* 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.axonframework.serializer;

import org.axonframework.domain.DomainEventMessage;
import org.axonframework.domain.GenericDomainEventMessage;
import org.axonframework.domain.MetaData;
import org.axonframework.eventstore.jpa.DomainEventEntry;
import org.joda.time.DateTime;
import org.junit.*;

import java.util.Collections;
import java.util.Map;
import java.util.UUID;

import static org.junit.Assert.*;
import static org.mockito.Mockito.*;

/**
* @author Allard Buijze
*/
public class SerializedDomainEventMessageTest {

    private SerializedObject<String> serializedPayload = new SimpleSerializedObject<String>("serialized",
                                                                                            String.class,
                                                                                            "java.lang.Object",
                                                                                            "1");
    private SerializedObject<String> serializedMetaData = new SerializedMetaData<String>("serialized",
                                                                                         String.class);

    private Object deserializedPayload = new Object();
    private MetaData deserializedMetaData = MetaData.emptyInstance();
    private Serializer serializer = mock(Serializer.class);
    private SerializedDomainEventData domainEventData = mock(SerializedDomainEventData.class);
    private final UUID id = UUID.randomUUID();
    private final long seqNo = 1L;

    @Before
    public void setUp() {
        when(domainEventData.getAggregateIdentifier()).thenReturn(id);
        when(domainEventData.getEventIdentifier()).thenReturn("eventId");
        when(domainEventData.getMetaData()).thenReturn(serializedMetaData);
        when(domainEventData.getPayload()).thenReturn(serializedPayload);
        when(domainEventData.getSequenceNumber()).thenReturn(seqNo);
        when(domainEventData.getTimestamp()).thenReturn(new DateTime());
        when(serializer.deserialize(serializedMetaData)).thenReturn(deserializedMetaData);
        when(serializer.deserialize(serializedPayload)).thenReturn(deserializedPayload);
        when(serializer.classForType(isA(SerializedType.class))).thenReturn(Object.class);
    }

    @Test
    public void testConstructor() {
        SerializedDomainEventMessage<Object> message1 = new SerializedDomainEventMessage<Object>(domainEventData,
                                                                                                 serializer);

        assertSame(id, message1.getAggregateIdentifier());
        assertEquals(seqNo, message1.getSequenceNumber());


        assertSame(MetaData.emptyInstance(), message1.getMetaData());
        assertEquals(Object.class, message1.getPayloadType());
        assertFalse(message1.isPayloadDeserialized());
        assertEquals(Object.class, message1.getPayload().getClass());
        assertTrue(message1.isPayloadDeserialized());
    }

    @Test
    public void testWithMetaData() {
        Map<String, Object> metaDataMap = Collections.singletonMap("key", (Object) "value");
        MetaData metaData = MetaData.from(metaDataMap);
        when(serializer.deserialize(serializedMetaData)).thenReturn(metaData);
        SerializedDomainEventMessage<Object> message = new SerializedDomainEventMessage<Object>(domainEventData,
                                                                                                serializer);
        DomainEventMessage<Object> message1 = message.withMetaData(MetaData.emptyInstance());
        DomainEventMessage<Object> message2 = message.withMetaData(
                MetaData.from(Collections.singletonMap("key", (Object) "otherValue")));

        assertEquals(0, message1.getMetaData().size());
        assertEquals(1, message2.getMetaData().size());
    }

    @Test
    public void testAndMetaData() {
        Map<String, Object> metaDataMap = Collections.singletonMap("key", (Object) "value");
        MetaData metaData = MetaData.from(metaDataMap);
        when(serializer.deserialize(serializedMetaData)).thenReturn(metaData);
        DomainEventMessage<Object> message = new SerializedDomainEventMessage<Object>(domainEventData, serializer);
        DomainEventMessage<Object> message1 = message.andMetaData(MetaData.emptyInstance());
        DomainEventMessage<Object> message2 = message.andMetaData(
                MetaData.from(Collections.singletonMap("key", (Object) "otherValue")));

        assertEquals(1, message1.getMetaData().size());
        assertEquals("value", message1.getMetaData().get("key"));
        assertEquals(1, message2.getMetaData().size());
        assertEquals("otherValue", message2.getMetaData().get("key"));
    }

    @Test
    public void testIdentifierStaysIdenticalWhenAddingMetaData() {
        Serializer serializer = new JavaSerializer();
        DomainEventMessage<String> message = new GenericDomainEventMessage<String>("ID", 0, "Payload",
                                                                                     MetaData.emptyInstance());

        SerializedObject<byte[]> payload = serializer.serialize(message.getPayload(), byte[].class);
        SerializedObject<byte[]> metaData = serializer.serialize(message.getMetaData(), byte[].class);

        SerializedDomainEventData data = new DomainEventEntry("Object", message, payload, metaData);

        SerializedDomainEventMessage<String> sdem = new SerializedDomainEventMessage<String>(data, serializer);

        assertEquals(sdem.getIdentifier(),
                     sdem.withMetaData(Collections.singletonMap("Key1", "Value1")).getIdentifier());

        sdem.getPayload(); // trigger deserialization

        assertEquals(sdem.getIdentifier(),
                     sdem.withMetaData(Collections.singletonMap("Key2", "Value2")).getIdentifier());
    }
}
TOP

Related Classes of org.axonframework.serializer.SerializedDomainEventMessageTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.