/* * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */ package org.mule.tck.core.internal.serialization; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertNull; import static org.hamcrest.CoreMatchers.equalTo; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mule.runtime.api.message.Message.of; import org.mule.runtime.core.api.Event; import org.mule.runtime.core.internal.message.InternalMessage; import org.mule.runtime.core.api.serialization.SerializationProtocol; import org.mule.runtime.core.el.datetime.DateTime; import org.mule.tck.junit4.AbstractMuleContextTestCase; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.util.Calendar; import java.util.Locale; import org.junit.Test; public abstract class AbstractSerializerProtocolContractTestCase extends AbstractMuleContextTestCase { private static final String STRING_MESSAGE = "Hello World"; protected SerializationProtocol serializationProtocol; @Test(expected = IllegalArgumentException.class) public final void nullBytes() throws Exception { serializationProtocol.deserialize((byte[]) null); } @Test(expected = IllegalArgumentException.class) public final void nullStream() throws Exception { serializationProtocol.deserialize((InputStream) null); } @Test public final void nullObject() throws Exception { byte[] bytes = serializationProtocol.serialize(null); Object object = serializationProtocol.deserialize(bytes); assertNull(object); } @Test public final void inputStreamClosed() throws Exception { final byte[] bytes = serializationProtocol.serialize(STRING_MESSAGE); InputStream inputStream = spy(new ByteArrayInputStream(bytes)); String output = serializationProtocol.deserialize(inputStream); verify(inputStream, atLeastOnce()).close(); assertThat(output, equalTo(STRING_MESSAGE)); } @Test public final void serializeWithoutDefaultConstructor() throws Exception { Calendar calendar = Calendar.getInstance(); Locale locale = Locale.ITALIAN; DateTime dateTime = new DateTime(calendar, locale); dateTime.changeTimeZone("Pacific/Midway"); Event event = eventBuilder().message(of(dateTime)).build(); byte[] bytes = serializationProtocol.serialize(event.getMessage()); InternalMessage message = serializationProtocol.deserialize(bytes); DateTime deserealized = (DateTime) message.getPayload().getValue(); assertEquals(calendar, deserealized.toCalendar()); assertEquals(dateTime.format(), deserealized.format()); } }