首页 > 解决方案 > 我正在使用 CouchbaseMock 进行单元测试,其中 Couchbase 客户端会将 N1QL 查询发送到模拟服务器

问题描述

这是将数据保存到模拟沙发库并使用其 id 获取刚刚保存的数据的单元测试用例:

@Test
    public void saveTest() throws JSONException {
        JSONObject jo = new JSONObject();
        jo.put("id", 136);
        jo.put("name", "testName");
        jo.put("email", "testEmail");
        String result = couchBaseServerDataAccessImpl.save(jo.toString());

        String queryResult = couchBaseServerDataAccessImpl.getById("136");
        Assert.assertEquals(queryResult, result);


    }

这是跟踪:

com.couchbase.client.core.CouchbaseException: java.lang.IndexOutOfBoundsException: readerIndex(0) + length(1) 超过 writerIndex(0): PooledUnsafeDirectByteBuf(ridx: 0, widx: 0, cap: 256) 在 com.couchbase。 client.core.endpoint.AbstractGenericHandler.decode(AbstractGenericHandler.java:369) 在 com.couchbase.client.deps.io.netty.handler.codec.MessageToMessageCodec$2.decode(MessageToMessageCodec.java:81) 在 com.couchbase.client .deps.io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:88) 在 com.couchbase.client.deps.io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) 在 com .couchbase.client.deps.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:356) 在 com.couchbase.client.deps.io.netty。channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342) 在 com.couchbase.client.deps.io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:335) 在 com.couchbase.client.deps.io.netty。 channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:438) 在 com.couchbase.client.deps.io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:312) 在 com.couchbase.client.deps。 io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:286) 在 com.couchbase.client.deps.io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:253) 在 com.couchbase.client。 deps.io.netty.channel。AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:356) 在 com.couchbase.client.deps.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342) 在 com.couchbase.client.deps.io.netty.channel。 AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:335) 在 com.couchbase.client.deps.io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:286) 在 com.couchbase.client.deps.io.netty。 channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:356) 在 com.couchbase.client.deps.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342) 在 com.couchbase.client.deps.io.netty。通道.AbstractChannelHandlerContext。fireChannelRead(AbstractChannelHandlerContext.java:335) 在 com.couchbase.client.deps.io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1304) 在 com.couchbase.client.deps.io.netty.channel。 AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:356) 在 com.couchbase.client.deps.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342) 在 com.couchbase.client.deps.io.netty.channel。 DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:921) 在 com.couchbase.client.deps.io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:135) 在 com.couchbase.client.deps.io。 com.couchbase 上的 netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:646)。client.deps.io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:581) at com.couchbase.client.deps.io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:498) at com.couchbase.client.deps.io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:460) 在 com.couchbase.client.deps.io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor. java:131) at com.couchbase.client.deps.io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.lang.Thread.run(Thread.java:748) 原因:java .lang.IndexOutOfBoundsException: readerIndex(0) + length(1) 超过 writerIndex(0): PooledUnsafeDirectByteBuf(ridx: 0, widx: 0, cap: 256) at com.couchbase.client.deps.io.netty.buffer.AbstractByteBuf .checkReadableBytes0(AbstractByteBuf.java:1161) 在 com.couchbase.client.deps.io.netty.buffer.AbstractByteBuf.readByte(AbstractByteBuf.java:591) 在 com.couchbase.client.core.utils.yasjl.ByteBufJsonParser.readNextChar( ByteBufJsonParser.java:458) 在 com.couchbase.client.core.utils.yasjl.ByteBufJsonParser.parse(ByteBufJsonParser.java:109) 在 com.couchbase.client.core.endpoint.query.parser.YasjlQueryResponseParser.parse(YasjlQueryResponseParser. java:337) 在 com.couchbase.client.core.endpoint.query.QueryHandlerV2.decodeResponse(QueryHandlerV2.java:175) 在 com.couchbase.client.core.endpoint.query.QueryHandlerV2.decodeResponse(QueryHandlerV2.java:62)在 com.couchbase.client.core.endpoint.AbstractGenericHandler.decode(AbstractGenericHandler.java:338) ... 29 更多netty.buffer.AbstractByteBuf.readByte(AbstractByteBuf.java:591) 在 com.couchbase.client.core.utils.yasjl.ByteBufJsonParser.readNextChar(ByteBufJsonParser.java:458) 在 com.couchbase.client.core.utils.yasjl。 com.couchbase.client.core.endpoint.query.parser.YasjlQueryResponseParser.parse(YasjlQueryResponseParser.java:337) 上 com.couchbase.client.core.endpoint.query.QueryHandlerV2 上的 ByteBufJsonParser.parse(ByteBufJsonParser.java:109)。 com.couchbase.client.core.endpoint.query.QueryHandlerV2.decodeResponse(QueryHandlerV2.java:62) 处的 decodeResponse(QueryHandlerV2.java:175) com.couchbase.client.core.endpoint.AbstractGenericHandler.decode(AbstractGenericHandler.java: 338) ... 29 更多netty.buffer.AbstractByteBuf.readByte(AbstractByteBuf.java:591) 在 com.couchbase.client.core.utils.yasjl.ByteBufJsonParser.readNextChar(ByteBufJsonParser.java:458) 在 com.couchbase.client.core.utils.yasjl。 com.couchbase.client.core.endpoint.query.parser.YasjlQueryResponseParser.parse(YasjlQueryResponseParser.java:337) 上 com.couchbase.client.core.endpoint.query.QueryHandlerV2 上的 ByteBufJsonParser.parse(ByteBufJsonParser.java:109)。 com.couchbase.client.core.endpoint.query.QueryHandlerV2.decodeResponse(QueryHandlerV2.java:62) 处的 decodeResponse(QueryHandlerV2.java:175) com.couchbase.client.core.endpoint.AbstractGenericHandler.decode(AbstractGenericHandler.java: 338) ... 29 更多readNextChar(ByteBufJsonParser.java:458) 在 com.couchbase.client.core.utils.yasjl.ByteBufJsonParser.parse(ByteBufJsonParser.java:109) 在 com.couchbase.client.core.endpoint.query.parser.YasjlQueryResponseParser.parse( YasjlQueryResponseParser.java:337) 在 com.couchbase.client.core.endpoint.query.QueryHandlerV2.decodeResponse(QueryHandlerV2.java:175) 在 com.couchbase.client.core.endpoint.query.QueryHandlerV2.decodeResponse(QueryHandlerV2.java: 62) 在 com.couchbase.client.core.endpoint.AbstractGenericHandler.decode(AbstractGenericHandler.java:338) ... 29 更多readNextChar(ByteBufJsonParser.java:458) 在 com.couchbase.client.core.utils.yasjl.ByteBufJsonParser.parse(ByteBufJsonParser.java:109) 在 com.couchbase.client.core.endpoint.query.parser.YasjlQueryResponseParser.parse( YasjlQueryResponseParser.java:337) 在 com.couchbase.client.core.endpoint.query.QueryHandlerV2.decodeResponse(QueryHandlerV2.java:175) 在 com.couchbase.client.core.endpoint.query.QueryHandlerV2.decodeResponse(QueryHandlerV2.java: 62) 在 com.couchbase.client.core.endpoint.AbstractGenericHandler.decode(AbstractGenericHandler.java:338) ... 29 更多337) 在 com.couchbase.client.core.endpoint.query.QueryHandlerV2.decodeResponse(QueryHandlerV2.java:175) 在 com.couchbase.client.core.endpoint.query.QueryHandlerV2.decodeResponse(QueryHandlerV2.java:62) 在 com .couchbase.client.core.endpoint.AbstractGenericHandler.decode(AbstractGenericHandler.java:338) ... 29 更多337) 在 com.couchbase.client.core.endpoint.query.QueryHandlerV2.decodeResponse(QueryHandlerV2.java:175) 在 com.couchbase.client.core.endpoint.query.QueryHandlerV2.decodeResponse(QueryHandlerV2.java:62) 在 com .couchbase.client.core.endpoint.AbstractGenericHandler.decode(AbstractGenericHandler.java:338) ... 29 更多

标签: couchbaseindexoutofboundsexceptionn1ql

解决方案


推荐阅读