/**
 * Copyright 2016 Evokly S.A.
 * See LICENSE file for License
 **/

package com.evokly.kafka.connect.mqtt;

import static org.junit.Assert.assertEquals;

import org.apache.kafka.connect.source.SourceRecord;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.junit.Before;
import org.junit.Test;

import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MqttSourceTaskTest {
    private MqttSourceTask mTask;
    private Map<String, String> mEmptyConfig = new HashMap<String, String>();

    /**
     * Several tests need similar objects created before they can run.
     */
    @Before
    public void beforeEach() {
        mTask = new MqttSourceTask();
        mTask.start(mEmptyConfig);
    }

    @Test
    public void testPoll() throws Exception {
        // empty queue
        assertEquals(mTask.mQueue.size(), 0);

        // add dummy message to queue
        MqttMessage mqttMessage = new MqttMessage();
        mqttMessage.setPayload("test_message".getBytes(StandardCharsets.UTF_8));
        mTask.messageArrived("test_topic", mqttMessage);

        // check message to be process
        assertEquals(mTask.mQueue.size(), 1);

        // generate and validate SourceRecord
        List<SourceRecord> sourceRecords = mTask.poll();

        assertEquals(sourceRecords.size(), 1);
        assertEquals(sourceRecords.get(0).key(), "test_topic");
        assertEquals(new String((byte[]) sourceRecords.get(0).value(), "UTF-8"), "test_message");

        // empty queue
        assertEquals(mTask.mQueue.size(), 0);
    }
}