org.apache.usergrid.persistence.qakka.serialization.queuemessages.DatabaseQueueMessageSerializationTest.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.usergrid.persistence.qakka.serialization.queuemessages.DatabaseQueueMessageSerializationTest.java

Source

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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.apache.usergrid.persistence.qakka.serialization.queuemessages;

import com.datastax.driver.core.DataType;
import com.datastax.driver.core.ProtocolVersion;
import com.google.inject.Injector;
import org.apache.commons.lang.RandomStringUtils;
import org.apache.usergrid.persistence.qakka.AbstractTest;
import org.apache.usergrid.persistence.qakka.core.QakkaUtils;
import org.apache.usergrid.persistence.qakka.serialization.sharding.Shard;
import org.apache.usergrid.persistence.qakka.serialization.sharding.ShardSerialization;
import org.junit.Test;

import java.io.*;
import java.nio.ByteBuffer;
import java.util.UUID;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;

public class DatabaseQueueMessageSerializationTest extends AbstractTest {

    static class ThingToSave implements Serializable {
        String value;
    }

    @Test
    public void writeNewMessage() {

        QueueMessageSerialization queueMessageSerialization = getInjector()
                .getInstance(QueueMessageSerialization.class);

        Shard shard1 = new Shard("test", "region1", Shard.Type.DEFAULT, 100L, null);

        DatabaseQueueMessage message1 = new DatabaseQueueMessage(QakkaUtils.getTimeUuid(),
                DatabaseQueueMessage.Type.DEFAULT, "test", "region1", shard1.getShardId(),
                System.currentTimeMillis(), null, null);

        UUID queueMessageId = queueMessageSerialization.writeMessage(message1);
    }

    @Test
    public void deleteMessage() {

        Injector injector = getInjector();

        QueueMessageSerialization queueMessageSerialization = injector.getInstance(QueueMessageSerialization.class);

        ShardSerialization shardSerialization = injector.getInstance(ShardSerialization.class);

        String queueName = "dqmst_queue_" + RandomStringUtils.randomAlphanumeric(20);
        String region = "dummy_region";

        Shard shard1 = new Shard(queueName, region, Shard.Type.DEFAULT, 1L, null);
        shardSerialization.createShard(shard1);

        UUID messageId = QakkaUtils.getTimeUuid();

        DatabaseQueueMessage message = new DatabaseQueueMessage(messageId, DatabaseQueueMessage.Type.DEFAULT,
                queueName, region, shard1.getShardId(), System.currentTimeMillis(), null, null);

        UUID queueMessageId = queueMessageSerialization.writeMessage(message);

        queueMessageSerialization.deleteMessage(queueName, region, shard1.getShardId(),
                DatabaseQueueMessage.Type.DEFAULT, queueMessageId);

        assertNull(queueMessageSerialization.loadMessage(queueName, region, shard1.getShardId(),
                DatabaseQueueMessage.Type.DEFAULT, queueMessageId));
    }

    @Test
    public void loadNullMessage() {

        QueueMessageSerialization queueMessageSerialization = getInjector()
                .getInstance(QueueMessageSerialization.class);

        Shard shard1 = new Shard("junk", "region1", Shard.Type.DEFAULT, 100L, null);

        assertNull(queueMessageSerialization.loadMessage(RandomStringUtils.randomAlphanumeric(20), "dummy_region",
                shard1.getShardId(), DatabaseQueueMessage.Type.DEFAULT, null));
    }

    @Test
    public void writeNewMessageData() {

        QueueMessageSerialization queueMessageSerialization = getInjector()
                .getInstance(QueueMessageSerialization.class);

        Shard shard1 = new Shard("test", "region1", Shard.Type.DEFAULT, 100L, null);

        UUID messageId = QakkaUtils.getTimeUuid();

        final String data = "my test data";

        final DatabaseQueueMessageBody messageBody = new DatabaseQueueMessageBody(
                DataType.serializeValue(data, ProtocolVersion.NEWEST_SUPPORTED), "text/plain");

        queueMessageSerialization.writeMessageData(messageId, messageBody);

        final DatabaseQueueMessageBody returnedData = queueMessageSerialization.loadMessageData(messageId);
    }

    @Test
    public void loadMessageData() throws Exception {

        QueueMessageSerialization queueMessageSerialization = getInjector()
                .getInstance(QueueMessageSerialization.class);

        Shard shard1 = new Shard("test", "region1", Shard.Type.DEFAULT, 100L, null);

        UUID messageId = QakkaUtils.getTimeUuid();

        final String data = "my test data";

        final DatabaseQueueMessageBody messageBody = new DatabaseQueueMessageBody(
                DataType.serializeValue(data, ProtocolVersion.NEWEST_SUPPORTED), "text/plain");

        queueMessageSerialization.writeMessageData(messageId, messageBody);

        final DatabaseQueueMessageBody returnedBody = queueMessageSerialization.loadMessageData(messageId);
        String returnedData = new String(returnedBody.getBlob().array(), "UTF-8");

        assertEquals(data, returnedData);
    }

    @Test
    public void loadMessageObjectData() throws Exception {

        QueueMessageSerialization queueMessageSerialization = getInjector()
                .getInstance(QueueMessageSerialization.class);

        Shard shard1 = new Shard("test", "region1", Shard.Type.DEFAULT, 100L, null);

        UUID messageId = QakkaUtils.getTimeUuid();

        final String data = "my test data";

        final DatabaseQueueMessageBody messageBody = new DatabaseQueueMessageBody(
                DataType.serializeValue(data, ProtocolVersion.NEWEST_SUPPORTED), "text/plain");

        queueMessageSerialization.writeMessageData(messageId, messageBody);

        final DatabaseQueueMessageBody returnedBody = queueMessageSerialization.loadMessageData(messageId);
        String returnedData = new String(returnedBody.getBlob().array(), "UTF-8");

        assertEquals(data, returnedData);
    }

    @Test
    public void deleteMessageData() throws UnsupportedEncodingException {

        QueueMessageSerialization queueMessageSerialization = getInjector()
                .getInstance(QueueMessageSerialization.class);

        Shard shard1 = new Shard("test", "region1", Shard.Type.DEFAULT, 100L, null);

        UUID messageId = QakkaUtils.getTimeUuid();

        final String data = "my test data";

        final DatabaseQueueMessageBody messageBody = new DatabaseQueueMessageBody(
                DataType.serializeValue(data, ProtocolVersion.NEWEST_SUPPORTED), "text/plain");

        queueMessageSerialization.writeMessageData(messageId, messageBody);

        final DatabaseQueueMessageBody returnedBody = queueMessageSerialization.loadMessageData(messageId);
        final String returnedData = new String(returnedBody.getBlob().array(), "UTF-8");

        assertEquals(data, returnedData);

        queueMessageSerialization.deleteMessageData(messageId);

        assertNull(queueMessageSerialization.loadMessageData(messageId));

    }

    /**
     * Persist to blob using Java serialization.
     */
    @Test
    public void persistJavaObjectData() throws Exception {

        QueueMessageSerialization queueMessageSerialization = getInjector()
                .getInstance(QueueMessageSerialization.class);

        // serialize Java object to byte buffer

        final ThingToSave data = new ThingToSave();
        data.value = "my test data";

        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(bos);
        oos.writeObject(data);
        oos.flush();
        oos.close();
        ByteBuffer byteBuffer = ByteBuffer.wrap(bos.toByteArray());

        // write to Cassandra

        final DatabaseQueueMessageBody messageBody = new DatabaseQueueMessageBody(byteBuffer,
                "application/octet-stream");

        UUID messageId = QakkaUtils.getTimeUuid();
        queueMessageSerialization.writeMessageData(messageId, messageBody);

        // load from Cassandra

        final DatabaseQueueMessageBody returnedBody = queueMessageSerialization.loadMessageData(messageId);

        // deserialize byte buffer

        ByteBuffer messageData = returnedBody.getBlob();
        ByteArrayInputStream bais = new ByteArrayInputStream(messageData.array());

        // throws exception -> java.io.StreamCorruptedException: invalid stream header: 00000000
        ObjectInputStream ios = new ObjectInputStream(bais);
        ThingToSave returnedData = (ThingToSave) ios.readObject();

        assertEquals(data.value, returnedData.value);
    }

}