+++ /dev/null
-/*
- * 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.thrift;
-
-import java.nio.ByteBuffer;
-
-import junit.framework.TestCase;
-
-import org.apache.thrift.protocol.TBinaryProtocol;
-import org.apache.thrift.protocol.TCompactProtocol;
-import org.apache.thrift.protocol.TJSONProtocol;
-import org.apache.thrift.protocol.TProtocolFactory;
-
-import thrift.test.Backwards;
-import thrift.test.OneOfEach;
-import thrift.test.PrimitiveThenStruct;
-import thrift.test.StructWithAUnion;
-import thrift.test.TestUnion;
-
-public class TestTDeserializer extends TestCase {
-
- private static final TProtocolFactory[] PROTOCOLS = new TProtocolFactory[] {
- new TBinaryProtocol.Factory(),
- new TCompactProtocol.Factory(),
- new TJSONProtocol.Factory()
- };
-
- public void testPartialDeserialize() throws Exception {
- //Root:StructWithAUnion
- // 1:Union
- // 1.3:OneOfEach
- OneOfEach level3OneOfEach = Fixtures.oneOfEach;
- TestUnion level2TestUnion = new TestUnion(TestUnion._Fields.STRUCT_FIELD, level3OneOfEach);
- StructWithAUnion level1SWU = new StructWithAUnion(level2TestUnion);
-
- Backwards bw = new Backwards(2, 1);
- PrimitiveThenStruct pts = new PrimitiveThenStruct(12345, 67890, bw);
-
- for (TProtocolFactory factory : PROTOCOLS) {
-
- //Level 2 test
- testPartialDeserialize(factory, level1SWU, new TestUnion(), level2TestUnion, StructWithAUnion._Fields.TEST_UNION);
-
- //Level 3 on 3rd field test
- testPartialDeserialize(factory, level1SWU, new OneOfEach(), level3OneOfEach, StructWithAUnion._Fields.TEST_UNION, TestUnion._Fields.STRUCT_FIELD);
-
- //Test early termination when traversed path Field.id exceeds the one being searched for
- testPartialDeserialize(factory, level1SWU, new OneOfEach(), new OneOfEach(), StructWithAUnion._Fields.TEST_UNION, TestUnion._Fields.I32_FIELD);
-
- //Test that readStructBegin isn't called on primitive
- testPartialDeserialize(factory, pts, new Backwards(), bw, PrimitiveThenStruct._Fields.BW);
-
- //Test primitive types
- TDeserializer deserializer = new TDeserializer(factory);
-
- Boolean expectedBool = level3OneOfEach.isIm_true();
- Boolean resultBool = deserializer.partialDeserializeBool(serialize(level1SWU, factory), StructWithAUnion._Fields.TEST_UNION, TestUnion._Fields.STRUCT_FIELD, OneOfEach._Fields.IM_TRUE);
- assertEquals(expectedBool, resultBool);
-
- Byte expectedByte = level3OneOfEach.getA_bite();
- Byte resultByte = deserializer.partialDeserializeByte(serialize(level1SWU, factory), StructWithAUnion._Fields.TEST_UNION, TestUnion._Fields.STRUCT_FIELD, OneOfEach._Fields.A_BITE);
- assertEquals(expectedByte, resultByte);
-
- Double expectedDouble = level3OneOfEach.getDouble_precision();
- Double resultDouble = deserializer.partialDeserializeDouble(serialize(level1SWU, factory), StructWithAUnion._Fields.TEST_UNION, TestUnion._Fields.STRUCT_FIELD, OneOfEach._Fields.DOUBLE_PRECISION);
- assertEquals(expectedDouble, resultDouble);
-
- Short expectedI16 = level3OneOfEach.getInteger16();
- Short resultI16 = deserializer.partialDeserializeI16(serialize(level1SWU, factory), StructWithAUnion._Fields.TEST_UNION, TestUnion._Fields.STRUCT_FIELD, OneOfEach._Fields.INTEGER16);
- assertEquals(expectedI16, resultI16);
-
- Integer expectedI32 = level3OneOfEach.getInteger32();
- Integer resultI32 = deserializer.partialDeserializeI32(serialize(level1SWU, factory), StructWithAUnion._Fields.TEST_UNION, TestUnion._Fields.STRUCT_FIELD, OneOfEach._Fields.INTEGER32);
- assertEquals(expectedI32, resultI32);
-
- Long expectedI64 = level3OneOfEach.getInteger64();
- Long resultI64= deserializer.partialDeserializeI64(serialize(level1SWU, factory), StructWithAUnion._Fields.TEST_UNION, TestUnion._Fields.STRUCT_FIELD, OneOfEach._Fields.INTEGER64);
- assertEquals(expectedI64, resultI64);
-
- String expectedString = level3OneOfEach.getSome_characters();
- String resultString = deserializer.partialDeserializeString(serialize(level1SWU, factory), StructWithAUnion._Fields.TEST_UNION, TestUnion._Fields.STRUCT_FIELD, OneOfEach._Fields.SOME_CHARACTERS);
- assertEquals(expectedString, resultString);
-
- byte[] expectedBinary = level3OneOfEach.getBase64();
- ByteBuffer resultBinary = deserializer.partialDeserializeByteArray(serialize(level1SWU, factory), StructWithAUnion._Fields.TEST_UNION, TestUnion._Fields.STRUCT_FIELD, OneOfEach._Fields.BASE64);
- assertEquals(expectedBinary.length, resultBinary.limit() - resultBinary.position() - resultBinary.arrayOffset());
- assertEquals(ByteBuffer.wrap(expectedBinary), resultBinary);
-
- // Test field id in Union
- short id = deserializer.partialDeserializeSetFieldIdInUnion(serialize(level1SWU, factory), StructWithAUnion._Fields.TEST_UNION);
- assertEquals(level2TestUnion.getSetField().getThriftFieldId(), id);
- }
- }
-
- public static void testPartialDeserialize(TProtocolFactory protocolFactory, TBase input, TBase output, TBase expected, TFieldIdEnum fieldIdPathFirst, TFieldIdEnum ... fieldIdPathRest) throws TException {
- byte[] record = serialize(input, protocolFactory);
- TDeserializer deserializer = new TDeserializer(protocolFactory);
- for (int i = 0; i < 2; i++) {
- TBase outputCopy = output.deepCopy();
- deserializer.partialDeserialize(outputCopy, record, fieldIdPathFirst, fieldIdPathRest);
- assertEquals("on attempt " + i + ", with " + protocolFactory.toString()
- + ", expected " + expected + " but got " + outputCopy,
- expected, outputCopy);
- }
- }
-
- private static byte[] serialize(TBase input, TProtocolFactory protocolFactory) throws TException{
- return new TSerializer(protocolFactory).serialize(input);
- }
-}