/***********************************************************************************
*
* Copyright (c) 2014 Kamil Baczkowicz
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v1.0 which accompany this distribution.
*
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* The Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
*
* Kamil Baczkowicz - initial API and implementation and/or initial documentation
*
*/
package pl.baczkowicz.mqttspy.logger;
import static org.junit.Assert.assertEquals;
import org.apache.commons.codec.binary.Base64;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.jmock.Mockery;
import org.jmock.lib.legacy.ClassImposteriser;
import org.junit.Test;
import pl.baczkowicz.mqttspy.common.generated.MessageLog;
import pl.baczkowicz.mqttspy.common.generated.MessageLogEnum;
import pl.baczkowicz.mqttspy.connectivity.BaseMqttConnection;
import pl.baczkowicz.mqttspy.messages.FormattedMqttMessage;
/**
* Tests for the SimpleMessageLogComposer.
*/
public class SimpleMessageLogComposerTest
{
private static final String SAMPLE_PAYLOAD = "payload";
private Mockery context = new Mockery()
{
{
setImposteriser(ClassImposteriser.INSTANCE);
}
};
/**
* Test method for {@link pl.baczkowicz.mqttspy.logger.MqttMessageLogParserUtils#createReceivedMessageLog(pl.baczkowicz.mqttspy.messages.BaseMqttMessageWithSubscriptions, pl.baczkowicz.mqttspy.common.generated.MessageLog)}.
*/
@Test
public void testCreateReceivedMessageLogWithPlainPayload()
{
final MqttMessage mqttMessage = new MqttMessage();
mqttMessage.setPayload(SAMPLE_PAYLOAD.getBytes());
final BaseMqttConnection connection = context.mock(BaseMqttConnection.class);
final FormattedMqttMessage message = new FormattedMqttMessage(1, "topic", mqttMessage, connection);
final MessageLog messageLog = new MessageLog(MessageLogEnum.XML_WITH_PLAIN_PAYLOAD, null, false, false, false, false, false);
final long timestamp = message.getDate().getTime();
final String loggedMessage = "<MqttMessage id=\"1\" timestamp=\"" + timestamp + "\" topic=\"topic\">" + SAMPLE_PAYLOAD + "</MqttMessage>";
assertEquals(loggedMessage, SimpleMqttMessageLogComposer.createReceivedMessageLog(message, messageLog));
}
/**
* Test method for {@link pl.baczkowicz.mqttspy.logger.MqttMessageLogParserUtils#createReceivedMessageLog(pl.baczkowicz.mqttspy.messages.BaseMqttMessageWithSubscriptions, pl.baczkowicz.mqttspy.common.generated.MessageLog)}.
*
* This is to cover Issue 18.
*/
@Test
public void testCreateReceivedMessageLogWithEncodedPayload()
{
final MqttMessage mqttMessage = new MqttMessage();
mqttMessage.setPayload("payload".getBytes());
final BaseMqttConnection connection = context.mock(BaseMqttConnection.class);
final FormattedMqttMessage message = new FormattedMqttMessage(1, "topic", mqttMessage, connection);
final MessageLog messageLog = new MessageLog(MessageLogEnum.XML_WITH_ENCODED_PAYLOAD, null, false, false, false, false, false);
final long timestamp = message.getDate().getTime();
final String loggedMessage = "<MqttMessage id=\"1\" timestamp=\"" + timestamp + "\" topic=\"topic\" encoded=\"true\">" +
Base64.encodeBase64String(SAMPLE_PAYLOAD.getBytes()) + "</MqttMessage>";
assertEquals(loggedMessage, SimpleMqttMessageLogComposer.createReceivedMessageLog(message, messageLog));
}
}