Package org.apache.cassandra.streaming

Source Code of org.apache.cassandra.streaming.SerializationsTest

package org.apache.cassandra.streaming;
/*
*
* 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.
*
*/


import org.apache.cassandra.AbstractSerializationsTester;
import org.apache.cassandra.db.RowMutation;
import org.apache.cassandra.db.Table;
import org.apache.cassandra.db.filter.QueryPath;
import org.apache.cassandra.dht.BigIntegerToken;
import org.apache.cassandra.dht.BytesToken;
import org.apache.cassandra.dht.Range;
import org.apache.cassandra.io.sstable.Descriptor;
import org.apache.cassandra.io.sstable.SSTable;
import org.apache.cassandra.net.Message;
import org.apache.cassandra.utils.FBUtilities;
import org.apache.cassandra.utils.Pair;
import org.junit.Test;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

public class SerializationsTest extends AbstractSerializationsTester
{
    private void testPendingFileWrite() throws IOException
    {
        // make sure to test serializing null and a pf with no sstable.
        PendingFile normal = makePendingFile(true, "fake_component", 100);
        PendingFile noSections = makePendingFile(true, "not_real", 0);
        PendingFile noSST = makePendingFile(false, "also_fake", 100);
       
        DataOutputStream out = getOutput("streaming.PendingFile.bin");
        PendingFile.serializer().serialize(normal, out);
        PendingFile.serializer().serialize(noSections, out);
        PendingFile.serializer().serialize(noSST, out);
        PendingFile.serializer().serialize(null, out);
        out.close();
    }
   
    @Test
    public void testPendingFileRead() throws IOException
    {
        if (EXECUTE_WRITES)
            testPendingFileWrite();
       
        DataInputStream in = getInput("streaming.PendingFile.bin");
        assert PendingFile.serializer().deserialize(in) != null;
        assert PendingFile.serializer().deserialize(in) != null;
        assert PendingFile.serializer().deserialize(in) != null;
        assert PendingFile.serializer().deserialize(in) == null;
        in.close();
    }
   
    private void testStreamHeaderWrite() throws IOException
    {
        StreamHeader sh0 = new StreamHeader("Keyspace1", 123L, makePendingFile(true, "zz", 100));
        StreamHeader sh1 = new StreamHeader("Keyspace1", 124L, makePendingFile(false, "zz", 100));
        Collection<PendingFile> files = new ArrayList<PendingFile>();
        for (int i = 0; i < 50; i++)
            files.add(makePendingFile(i % 2 == 0, "aa", 100));
        StreamHeader sh2 = new StreamHeader("Keyspace1", 125L, makePendingFile(true, "bb", 100), files);
        StreamHeader sh3 = new StreamHeader("Keyspace1", 125L, null, files);
        StreamHeader sh4 = new StreamHeader("Keyspace1", 125L, makePendingFile(true, "bb", 100), new ArrayList<PendingFile>());
       
        DataOutputStream out = getOutput("streaming.StreamHeader.bin");
        StreamHeader.serializer().serialize(sh0, out);
        StreamHeader.serializer().serialize(sh1, out);
        StreamHeader.serializer().serialize(sh2, out);
        StreamHeader.serializer().serialize(sh3, out);
        StreamHeader.serializer().serialize(sh4, out);
        out.close();
    }
   
    @Test
    public void testStreamHeaderRead() throws IOException
    {
        if (EXECUTE_WRITES)
            testStreamHeaderWrite();
       
        DataInputStream in = getInput("streaming.StreamHeader.bin");
        assert StreamHeader.serializer().deserialize(in) != null;
        assert StreamHeader.serializer().deserialize(in) != null;
        assert StreamHeader.serializer().deserialize(in) != null;
        assert StreamHeader.serializer().deserialize(in) != null;
        assert StreamHeader.serializer().deserialize(in) != null;
        in.close();
    }
   
    private void testStreamReplyWrite() throws IOException
    {
        StreamReply rep = new StreamReply("this is a file", 123L, StreamReply.Status.FILE_FINISHED);
        DataOutputStream out = getOutput("streaming.StreamReply.bin");
        StreamReply.serializer.serialize(rep, out);
        Message.serializer().serialize(rep.createMessage(), out);
        out.close();
    }
   
    @Test
    public void testStreamReplyRead() throws IOException
    {
        if (EXECUTE_WRITES)
            testStreamReplyWrite();
       
        DataInputStream in = getInput("streaming.StreamReply.bin");
        assert StreamReply.serializer.deserialize(in) != null;
        assert Message.serializer().deserialize(in) != null;
        in.close();
    }
   
    private static PendingFile makePendingFile(boolean sst, String comp, int numSecs)
    {
        Descriptor desc = new Descriptor("z", new File("path/doesn't/matter"), "Keyspace1", "Standard1", 23, false);
        List<Pair<Long, Long>> sections = new ArrayList<Pair<Long, Long>>();
        for (int i = 0; i < numSecs; i++)
            sections.add(new Pair<Long, Long>(new Long(i), new Long(i * i)));
        return new PendingFile(sst ? makeSSTable() : null, desc, comp, sections);
    }
   
    private void testStreamRequestMessageWrite() throws IOException
    {
        Collection<Range> ranges = new ArrayList<Range>();
        for (int i = 0; i < 5; i++)
            ranges.add(new Range(new BytesToken(ByteBuffer.wrap(Integer.toString(10*i).getBytes())), new BytesToken(ByteBuffer.wrap(Integer.toString(10*i+5).getBytes()))));
        StreamRequestMessage msg0 = new StreamRequestMessage(FBUtilities.getLocalAddress(), ranges, "Keyspace1", 123L);
        StreamRequestMessage msg1 = new StreamRequestMessage(FBUtilities.getLocalAddress(), makePendingFile(true, "aa", 100), 124L);
        StreamRequestMessage msg2 = new StreamRequestMessage(FBUtilities.getLocalAddress(), makePendingFile(false, "aa", 100), 124L);
       
        DataOutputStream out = getOutput("streaming.StreamRequestMessage.bin");
        StreamRequestMessage.serializer().serialize(msg0, out);
        StreamRequestMessage.serializer().serialize(msg1, out);
        StreamRequestMessage.serializer().serialize(msg2, out);
        Message.serializer().serialize(msg0.makeMessage(), out);
        Message.serializer().serialize(msg1.makeMessage(), out);
        Message.serializer().serialize(msg2.makeMessage(), out);
        out.close();
    }
   
    @Test
    public void testStreamRequestMessageRead() throws IOException
    {
        if (EXECUTE_WRITES)
            testStreamRequestMessageWrite();
       
        DataInputStream in = getInput("streaming.StreamRequestMessage.bin");
        assert StreamRequestMessage.serializer().deserialize(in) != null;
        assert StreamRequestMessage.serializer().deserialize(in) != null;
        assert StreamRequestMessage.serializer().deserialize(in) != null;
        assert Message.serializer().deserialize(in) != null;
        assert Message.serializer().deserialize(in) != null;
        assert Message.serializer().deserialize(in) != null;
        in.close();
    }
   
    private static SSTable makeSSTable()
    {
        Table t = Table.open("Keyspace1");
        for (int i = 0; i < 100; i++)
        {
            RowMutation rm = new RowMutation(t.name, ByteBuffer.wrap(Long.toString(System.nanoTime()).getBytes()));
            rm.add(new QueryPath("Standard1", null, ByteBuffer.wrap("cola".getBytes())), ByteBuffer.wrap("value".getBytes()), 0);
            try
            {
                rm.apply();
            }
            catch (IOException ex)
            {
                throw new RuntimeException(ex);
            }
        }
        try
        {
            t.getColumnFamilyStore("Standard1").forceBlockingFlush();
            return t.getColumnFamilyStore("Standard1").getSSTables().iterator().next();
        }
        catch (Exception any)
        {
            throw new RuntimeException(any);
        }
    }
}
TOP

Related Classes of org.apache.cassandra.streaming.SerializationsTest

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.