com.couchbase.client.core.endpoint.util.ByteBufJsonHelperTest.java Source code

Java tutorial

Introduction

Here is the source code for com.couchbase.client.core.endpoint.util.ByteBufJsonHelperTest.java

Source

/*
 * Copyright (c) 2016 Couchbase, Inc.
 *
 * 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.couchbase.client.core.endpoint.util;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.util.CharsetUtil;
import org.junit.Test;

import static org.junit.Assert.*;

public class ByteBufJsonHelperTest {

    @Test
    public void testFindNextChar() throws Exception {
        ByteBuf source = Unpooled.copiedBuffer("ABCDEF", CharsetUtil.UTF_8);

        assertEquals(3, ByteBufJsonHelper.findNextChar(source, 'D'));
        assertEquals(-1, ByteBufJsonHelper.findNextChar(source, 'G'));
        assertEquals(0, source.readerIndex());

    }

    @Test
    public void testFindNextCharNotPrefixedBy() throws Exception {
        ByteBuf source = Unpooled.copiedBuffer("the \\\"end\\\" of a string\"", CharsetUtil.UTF_8);

        assertEquals(5, ByteBufJsonHelper.findNextCharNotPrefixedBy(source, '\"', 'a'));
        assertEquals(23, ByteBufJsonHelper.findNextCharNotPrefixedBy(source, '\"', '\\'));
        assertEquals(-1, ByteBufJsonHelper.findNextCharNotPrefixedBy(source, 'a', ' '));
        assertEquals(-1, ByteBufJsonHelper.findNextCharNotPrefixedBy(source, 'z', ' '));
        assertEquals(0, source.readerIndex());
    }

    /**
     * See JVMCBC-239.
     */
    @Test
    public void testFindNextCharNotPrefixedByAfterReaderIndexMoved() throws Exception {
        //before JVMCBC-239 the fact that the head of the buffer, with skipped data, is larger than its tail would
        //cause an negative search length and the method would return a -1.
        ByteBuf source = Unpooled.copiedBuffer("sectionWithLotsAndLotsOfDataToSkip\": \"123456\\\"78901234567890\"",
                CharsetUtil.UTF_8);
        source.skipBytes(38);

        assertEquals(22, ByteBufJsonHelper.findNextCharNotPrefixedBy(source, '"', '\\'));
    }

    @Test
    public void shouldFindSectionClosingPositionIfAtStartSection() throws Exception {
        ByteBuf source = Unpooled.copiedBuffer("{123}", CharsetUtil.UTF_8);

        assertEquals(4, ByteBufJsonHelper.findSectionClosingPosition(source, '{', '}'));
        assertEquals(0, source.readerIndex());
    }

    @Test
    public void shouldNotFindSectionClosingPositionIfAfterStartSection() throws Exception {
        ByteBuf source = Unpooled.copiedBuffer("123}", CharsetUtil.UTF_8);

        assertEquals(-1, ByteBufJsonHelper.findSectionClosingPosition(source, '{', '}'));
        assertEquals(0, source.readerIndex());
    }

    @Test
    public void shouldFindSectionClosingPositionWithOffset() throws Exception {
        ByteBuf source = Unpooled.copiedBuffer("{{{}{123}", CharsetUtil.UTF_8);

        assertEquals(8, ByteBufJsonHelper.findSectionClosingPosition(source, 4, '{', '}'));
        assertEquals(0, source.readerIndex());
    }

    @Test
    public void shouldFindSectionClosingInRealLifeExample() {
        ByteBuf source = Unpooled.copiedBuffer(
                "rics\":{\"elapsedTime\":\"128.21463ms\",\"executionTime\":\"127.21463ms\",\"resultCount\":1,\"resultSize\":0,\"mutationCount\":0,\"errorCount\":0,\"warningCount\":0}}",
                CharsetUtil.UTF_8);

        assertNotEquals(-1, ByteBufJsonHelper.findSectionClosingPosition(source, '{', '}'));
    }

}