com.spotify.netty4.handler.codec.zmtp.ZMTPMessageTest.java Source code

Java tutorial

Introduction

Here is the source code for com.spotify.netty4.handler.codec.zmtp.ZMTPMessageTest.java

Source

/*
 * Copyright (c) 2012-2014 Spotify AB
 *
 * Licensed 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 com.spotify.netty4.handler.codec.zmtp;

import com.google.common.base.Function;
import com.google.common.collect.Lists;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

import java.nio.CharBuffer;
import java.util.ArrayList;
import java.util.List;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;
import io.netty.buffer.ByteBufUtil;
import io.netty.buffer.Unpooled;
import io.netty.buffer.UnpooledByteBufAllocator;

import static io.netty.util.CharsetUtil.UTF_8;
import static java.util.Arrays.asList;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.not;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;

@RunWith(Parameterized.class)
public class ZMTPMessageTest {

    private final static ByteBufAllocator ALLOC = new UnpooledByteBufAllocator(false);

    @Parameterized.Parameters(name = "{0}")
    public static Iterable<Object[]> versions() {
        final List<Object[]> versions = new ArrayList<Object[]>();
        for (final ZMTPVersion version : ZMTPVersion.supportedVersions()) {
            versions.add(new Object[] { version });
        }
        return versions;
    }

    @Parameterized.Parameter(0)
    public ZMTPVersion version;

    @Test
    public void testNotEquals() {
        final ZMTPMessage m1 = ZMTPMessage.fromUTF8(ALLOC, "hello", "world");
        final ZMTPMessage m2 = ZMTPMessage.fromUTF8(ALLOC, "foo", "bar");
        assertThat(m1, is(not(m2)));
    }

    @Test
    public void testEquals() {
        final ZMTPMessage m1 = ZMTPMessage.fromUTF8(ALLOC, "hello", "world");
        final ZMTPMessage m2 = ZMTPMessage.fromUTF8(ALLOC, "hello", "world");
        assertThat(m1, is(m2));
    }

    @Test
    public void testIdentityEquals() {
        final ZMTPMessage m = ZMTPMessage.fromUTF8(ALLOC, "hello", "world");
        assertThat(m, is(m));
    }

    @Test
    public void testWriteAndRead() throws ZMTPParsingException {
        final ZMTPMessage message = ZMTPMessage.fromUTF8(ALLOC, "hello", "world");
        final ByteBuf buffer = message.write(ALLOC, version);
        final ZMTPMessage read = ZMTPMessage.read(buffer, version);
        assertThat(read, is(message));
    }

    @Test
    public void testWriteAndReadTwoMessages() throws ZMTPParsingException {
        final ZMTPMessage m1 = ZMTPMessage.fromUTF8(ALLOC, "hello", "world");
        final ZMTPMessage m2 = ZMTPMessage.fromUTF8(ALLOC, "foo", "bar");
        final ByteBuf buffer = Unpooled.buffer();
        m1.write(buffer, version);
        m2.write(buffer, version);
        final ZMTPMessage r1 = ZMTPMessage.read(buffer, version);
        final ZMTPMessage r2 = ZMTPMessage.read(buffer, version);
        assertThat(r1, is(m1));
        assertThat(r2, is(m2));
    }

    @Test
    public void testFromStringsUTF8() {
        assertEquals(ZMTPMessage.fromUTF8(ALLOC, ""), message(""));
        assertEquals(ZMTPMessage.fromUTF8(ALLOC, "a"), message("a"));
        assertEquals(ZMTPMessage.fromUTF8(ALLOC, "aa"), message("aa"));
        assertEquals(ZMTPMessage.fromUTF8(ALLOC, "aa", "bb"), message("aa", "bb"));
        assertEquals(ZMTPMessage.fromUTF8(ALLOC, "aa", "", "bb"), message("aa", "", "bb"));
    }

    private ZMTPMessage message(final String... frames) {
        return ZMTPMessage.from(frames(asList(frames)));
    }

    private static List<ByteBuf> frames(final List<String> frames) {
        return Lists.transform(frames, new Function<String, ByteBuf>() {
            @Override
            public ByteBuf apply(final String input) {
                return ByteBufUtil.encodeString(ALLOC, CharBuffer.wrap(input), UTF_8);
            }
        });
    }
}