http://git-wip-us.apache.org/repos/asf/ignite/blob/303d79eb/modules/platforms/cpp/core-test/src/portable_reader_writer_test.cpp ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/core-test/src/portable_reader_writer_test.cpp b/modules/platforms/cpp/core-test/src/portable_reader_writer_test.cpp deleted file mode 100644 index 3ec5a15..0000000 --- a/modules/platforms/cpp/core-test/src/portable_reader_writer_test.cpp +++ /dev/null @@ -1,2373 +0,0 @@ -/* - * 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. - */ - -#ifndef _MSC_VER - #define BOOST_TEST_DYN_LINK -#endif - -#include <boost/test/unit_test.hpp> - -#include "ignite/impl/interop/interop.h" -#include "ignite/portable/portable.h" - -#include "ignite/portable_test_defs.h" -#include "ignite/portable_test_utils.h" - -using namespace ignite; -using namespace ignite::impl::interop; -using namespace ignite::impl::portable; -using namespace ignite::portable; -using namespace ignite_test::core::portable; - -template<typename T> -void CheckPrimitive(T val) -{ - TemplatedPortableIdResolver<PortableDummy> idRslvr; - - InteropUnpooledMemory mem(1024); - - InteropOutputStream out(&mem); - out.Position(IGNITE_DFLT_HDR_LEN); - - PortableWriterImpl writerImpl(&out, &idRslvr, NULL, NULL, 0); - PortableWriter writer(&writerImpl); - - try - { - Write<T>(writer, NULL, val); - - BOOST_FAIL("Not restricted."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - Write<T>(writer, "test", val); - - writerImpl.PostWrite(); - - out.Synchronize(); - - InteropInputStream in(&mem); - - in.Synchronize(); - - int32_t footerBegin = in.ReadInt32(IGNITE_OFFSET_SCHEMA_OR_RAW_OFF); - int32_t footerEnd = footerBegin + 5; - - PortableReaderImpl readerImpl(&in, &idRslvr, 0, true, idRslvr.GetTypeId(), 0, 100, 100, footerBegin, footerEnd, OFFSET_TYPE_1_BYTE); - PortableReader reader(&readerImpl); - - try - { - Read<T>(reader, NULL); - - BOOST_FAIL("Not restricted."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - try - { - T readVal = Read<T>(reader, "test"); - - BOOST_REQUIRE(readVal == val); - } - catch (IgniteError& err) - { - BOOST_FAIL(err.GetText()); - } -} - -template<typename T> -void CheckPrimitiveArray(T dflt, T val1, T val2) -{ - const char* fieldName = "test"; - - TemplatedPortableIdResolver<PortableDummy> idRslvr; - - InteropUnpooledMemory mem(1024); - - InteropOutputStream out(&mem); - PortableWriterImpl writerImpl(&out, &idRslvr, NULL, NULL, 0); - PortableWriter writer(&writerImpl); - - out.Position(IGNITE_DFLT_HDR_LEN); - - try - { - T nullFieldArr[2]; - - nullFieldArr[0] = val1; - nullFieldArr[1] = val2; - - WriteArray<T>(writer, NULL, nullFieldArr, 2); - - BOOST_FAIL("Not restricted."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - T arr1[2]; - arr1[0] = dflt; - arr1[1] = dflt; - - T arr2[2]; - arr2[0] = val1; - arr2[1] = val2; - - { - // 1. Write NULL and see what happens. - WriteArray<T>(writer, fieldName, NULL, 0); - - writerImpl.PostWrite(); - - out.Synchronize(); - - InteropInputStream in(&mem); - - in.Synchronize(); - - int32_t footerBegin = in.ReadInt32(IGNITE_OFFSET_SCHEMA_OR_RAW_OFF); - int32_t footerEnd = footerBegin + 5; - - PortableReaderImpl readerImpl(&in, &idRslvr, 0, true, idRslvr.GetTypeId(), 0, 100, 100, footerBegin, footerEnd, OFFSET_TYPE_1_BYTE); - PortableReader reader(&readerImpl); - - in.Position(IGNITE_DFLT_HDR_LEN); - BOOST_REQUIRE(ReadArray<T>(reader, fieldName, NULL, 0) == -1); - - in.Position(IGNITE_DFLT_HDR_LEN); - BOOST_REQUIRE(ReadArray<T>(reader, fieldName, NULL, 2) == -1); - - in.Position(IGNITE_DFLT_HDR_LEN); - BOOST_REQUIRE(ReadArray<T>(reader, fieldName, arr1, 1) == -1); - - BOOST_REQUIRE(arr1[0] == dflt); - BOOST_REQUIRE(arr1[1] == dflt); - } - - { - // 2. Write empty array. - out.Position(IGNITE_DFLT_HDR_LEN); - - WriteArray<T>(writer, fieldName, arr2, 0); - - writerImpl.PostWrite(); - - out.Synchronize(); - - InteropInputStream in(&mem); - - in.Synchronize(); - - int32_t footerBegin = in.ReadInt32(IGNITE_OFFSET_SCHEMA_OR_RAW_OFF); - int32_t footerEnd = footerBegin + 5; - - PortableReaderImpl readerImpl(&in, &idRslvr, 0, true, idRslvr.GetTypeId(), 0, 100, 100, footerBegin, footerEnd, OFFSET_TYPE_1_BYTE); - PortableReader reader(&readerImpl); - - in.Position(IGNITE_DFLT_HDR_LEN); - BOOST_REQUIRE(ReadArray<T>(reader, fieldName, NULL, 0) == 0); - - in.Position(IGNITE_DFLT_HDR_LEN); - BOOST_REQUIRE(ReadArray<T>(reader, fieldName, NULL, 2) == 0); - - in.Position(IGNITE_DFLT_HDR_LEN); - BOOST_REQUIRE(ReadArray<T>(reader, fieldName, arr1, 0) == 0); - BOOST_REQUIRE(arr1[0] == dflt); - BOOST_REQUIRE(arr1[1] == dflt); - - in.Position(IGNITE_DFLT_HDR_LEN); - BOOST_REQUIRE(ReadArray<T>(reader, fieldName, arr1, 2) == 0); - BOOST_REQUIRE(arr1[0] == dflt); - BOOST_REQUIRE(arr1[1] == dflt); - } - - { - // 3. Partial array write. - out.Position(IGNITE_DFLT_HDR_LEN); - - WriteArray<T>(writer, fieldName, arr2, 1); - - writerImpl.PostWrite(); - - out.Synchronize(); - - InteropInputStream in(&mem); - - in.Synchronize(); - - int32_t footerBegin = in.ReadInt32(IGNITE_OFFSET_SCHEMA_OR_RAW_OFF); - int32_t footerEnd = footerBegin + 5; - - PortableReaderImpl readerImpl(&in, &idRslvr, 0, true, idRslvr.GetTypeId(), 0, 100, 100, footerBegin, footerEnd, OFFSET_TYPE_1_BYTE); - PortableReader reader(&readerImpl); - - in.Position(IGNITE_DFLT_HDR_LEN); - BOOST_REQUIRE(ReadArray<T>(reader, fieldName, NULL, 0) == 1); - BOOST_REQUIRE(ReadArray<T>(reader, fieldName, NULL, 2) == 1); - BOOST_REQUIRE(ReadArray<T>(reader, fieldName, arr1, 0) == 1); - BOOST_REQUIRE(arr1[0] == dflt); - BOOST_REQUIRE(arr1[1] == dflt); - - in.Position(IGNITE_DFLT_HDR_LEN); - BOOST_REQUIRE(ReadArray<T>(reader, fieldName, arr1, 1) == 1); - BOOST_REQUIRE(arr1[0] == val1); - BOOST_REQUIRE(arr1[1] == dflt); - arr1[0] = dflt; - - in.Position(IGNITE_DFLT_HDR_LEN); - BOOST_REQUIRE(ReadArray<T>(reader, fieldName, arr1, 2) == 1); - BOOST_REQUIRE(arr1[0] == val1); - BOOST_REQUIRE(arr1[1] == dflt); - arr1[0] = dflt; - } - - { - // 4. Full array write. - out.Position(IGNITE_DFLT_HDR_LEN); - - WriteArray<T>(writer, fieldName, arr2, 2); - - writerImpl.PostWrite(); - - out.Synchronize(); - - InteropInputStream in(&mem); - - in.Synchronize(); - - int32_t footerBegin = in.ReadInt32(IGNITE_OFFSET_SCHEMA_OR_RAW_OFF); - int32_t footerEnd = footerBegin + 5; - - PortableReaderImpl readerImpl(&in, &idRslvr, 0, true, idRslvr.GetTypeId(), 0, 100, 100, footerBegin, footerEnd, OFFSET_TYPE_1_BYTE); - PortableReader reader(&readerImpl); - - in.Position(IGNITE_DFLT_HDR_LEN); - BOOST_REQUIRE(ReadArray<T>(reader, fieldName, NULL, 0) == 2); - - in.Position(IGNITE_DFLT_HDR_LEN); - BOOST_REQUIRE(ReadArray<T>(reader, fieldName, NULL, 2) == 2); - - try - { - ReadArray<T>(reader, NULL, arr1, 2); - - BOOST_FAIL("Not restricted."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - BOOST_REQUIRE(ReadArray<T>(reader, fieldName, arr1, 0) == 2); - BOOST_REQUIRE(arr1[0] == dflt); - BOOST_REQUIRE(arr1[1] == dflt); - - BOOST_REQUIRE(ReadArray<T>(reader, fieldName, arr1, 1) == 2); - BOOST_REQUIRE(arr1[0] == dflt); - BOOST_REQUIRE(arr1[1] == dflt); - - BOOST_REQUIRE(ReadArray<T>(reader, fieldName, arr1, 2) == 2); - BOOST_REQUIRE(arr1[0] == val1); - BOOST_REQUIRE(arr1[1] == val2); - } -} - -void CheckWritesRestricted(PortableWriter& writer) -{ - try - { - writer.WriteInt8("field", 1); - - BOOST_FAIL("Not restricted."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - try - { - int8_t arr[1]; - - writer.WriteInt8Array("field", arr, 1); - - BOOST_FAIL("Not restricted."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - try - { - Guid val(1, 1); - - writer.WriteGuid("field", val); - - BOOST_FAIL("Not restricted."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - try - { - writer.WriteString("field", "test"); - - BOOST_FAIL("Not restricted."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - try - { - writer.WriteArray<int8_t>("field"); - - BOOST_FAIL("Not restricted."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - try - { - writer.WriteCollection<int8_t>("field"); - - BOOST_FAIL("Not restricted."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - try - { - writer.WriteMap<int8_t, int8_t>("field"); - - BOOST_FAIL("Not restricted."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } -} - -void CheckReadsRestricted(PortableReader& reader) -{ - try - { - reader.ReadInt8("field"); - - BOOST_FAIL("Not restricted."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - try - { - int8_t arr[1]; - - reader.ReadInt8Array("field", arr, 1); - - BOOST_FAIL("Not restricted."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - try - { - reader.ReadGuid("field"); - - BOOST_FAIL("Not restricted."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - try - { - reader.ReadString("field"); - - BOOST_FAIL("Not restricted."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - try - { - reader.ReadArray<int8_t>("field"); - - BOOST_FAIL("Not restricted."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - try - { - reader.ReadCollection<int8_t>("field"); - - BOOST_FAIL("Not restricted."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - try - { - reader.ReadMap<int8_t, int8_t>("field"); - - BOOST_FAIL("Not restricted."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } -} - -void CheckCollectionEmpty(CollectionType* colType) -{ - TemplatedPortableIdResolver<PortableDummy> idRslvr; - - InteropUnpooledMemory mem(1024); - - InteropOutputStream out(&mem); - PortableWriterImpl writerImpl(&out, &idRslvr, NULL, NULL, 0); - PortableWriter writer(&writerImpl); - - out.Position(IGNITE_DFLT_HDR_LEN); - - PortableCollectionWriter<PortableInner> colWriter = colType ? - writer.WriteCollection<PortableInner>("field1", *colType) : writer.WriteCollection<PortableInner>("field1"); - - CheckWritesRestricted(writer); - - colWriter.Close(); - - writer.WriteInt8("field2", 1); - - try - { - colWriter.Write(1); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - try - { - colWriter.Close(); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - writerImpl.PostWrite(); - - out.Synchronize(); - - InteropInputStream in(&mem); - - int32_t footerBegin = in.ReadInt32(IGNITE_OFFSET_SCHEMA_OR_RAW_OFF); - int32_t footerEnd = footerBegin + 5 * 2; - - PortableReaderImpl readerImpl(&in, &idRslvr, 0, true, idRslvr.GetTypeId(), 0, 100, 100, footerBegin, footerEnd, OFFSET_TYPE_1_BYTE); - PortableReader reader(&readerImpl); - - in.Position(IGNITE_DFLT_HDR_LEN); - - PortableCollectionReader<PortableInner> colReader = reader.ReadCollection<PortableInner>("field1"); - - if (colType) - BOOST_REQUIRE(colReader.GetType() == *colType); - else - BOOST_REQUIRE(colReader.GetType() == IGNITE_COLLECTION_UNDEFINED); - - BOOST_REQUIRE(colReader.GetSize() == 0); - BOOST_REQUIRE(!colReader.HasNext()); - BOOST_REQUIRE(!colReader.IsNull()); - - try - { - colReader.GetNext(); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - BOOST_REQUIRE(reader.ReadInt8("field2") == 1); -} - -void CheckCollection(CollectionType* colType) -{ - PortableInner writeVal1 = PortableInner(1); - PortableInner writeVal2 = PortableInner(0); - PortableInner writeVal3 = PortableInner(2); - - TemplatedPortableIdResolver<PortableDummy> idRslvr; - - InteropUnpooledMemory mem(1024); - - InteropOutputStream out(&mem); - PortableWriterImpl writerImpl(&out, &idRslvr, NULL, NULL, 0); - PortableWriter writer(&writerImpl); - - out.Position(IGNITE_DFLT_HDR_LEN); - - PortableCollectionWriter<PortableInner> colWriter = colType ? - writer.WriteCollection<PortableInner>("field1", *colType) : writer.WriteCollection<PortableInner>("field1"); - - colWriter.Write(writeVal1); - colWriter.Write(writeVal2); - colWriter.Write(writeVal3); - - CheckWritesRestricted(writer); - - colWriter.Close(); - - writer.WriteInt8("field2", 1); - - try - { - colWriter.Write(1); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - try - { - colWriter.Close(); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - writerImpl.PostWrite(); - - out.Synchronize(); - - InteropInputStream in(&mem); - - int32_t footerBegin = in.ReadInt32(IGNITE_OFFSET_SCHEMA_OR_RAW_OFF); - int32_t footerEnd = footerBegin + 5 * 2; - - PortableReaderImpl readerImpl(&in, &idRslvr, 0, true, idRslvr.GetTypeId(), 0, 100, 100, footerBegin, footerEnd, OFFSET_TYPE_1_BYTE); - PortableReader reader(&readerImpl); - - in.Position(IGNITE_DFLT_HDR_LEN); - - PortableCollectionReader<PortableInner> colReader = reader.ReadCollection<PortableInner>("field1"); - - CheckReadsRestricted(reader); - - if (colType) - BOOST_REQUIRE(colReader.GetType() == *colType); - else - BOOST_REQUIRE(colReader.GetType() == IGNITE_COLLECTION_UNDEFINED); - - BOOST_REQUIRE(colReader.GetSize() == 3); - BOOST_REQUIRE(!colReader.IsNull()); - - BOOST_REQUIRE(colReader.HasNext()); - BOOST_REQUIRE(colReader.GetNext().GetValue() == writeVal1.GetValue()); - - BOOST_REQUIRE(colReader.HasNext()); - BOOST_REQUIRE(colReader.GetNext().GetValue() == writeVal2.GetValue()); - - BOOST_REQUIRE(colReader.HasNext()); - BOOST_REQUIRE(colReader.GetNext().GetValue() == writeVal3.GetValue()); - - BOOST_REQUIRE(!colReader.HasNext()); - - try - { - colReader.GetNext(); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - BOOST_REQUIRE(reader.ReadInt8("field2") == 1); -} - -void CheckCollectionIterators(CollectionType* colType) -{ - typedef std::vector<PortableInner> PortableInnerVector; - PortableInnerVector writeValues; - - writeValues.push_back(1); - writeValues.push_back(0); - writeValues.push_back(2); - - TemplatedPortableIdResolver<PortableDummy> idRslvr; - - InteropUnpooledMemory mem(1024); - - InteropOutputStream out(&mem); - PortableWriterImpl writerImpl(&out, &idRslvr, NULL, NULL, 0); - PortableWriter writer(&writerImpl); - - out.Position(IGNITE_DFLT_HDR_LEN); - - if (colType) - writer.WriteCollection("field1", writeValues.begin(), writeValues.end(), *colType); - else - writer.WriteCollection("field1", writeValues.begin(), writeValues.end()); - - writer.WriteInt8("field2", 1); - - writerImpl.PostWrite(); - - out.Synchronize(); - - InteropInputStream in(&mem); - - int32_t footerBegin = in.ReadInt32(IGNITE_OFFSET_SCHEMA_OR_RAW_OFF); - int32_t footerEnd = footerBegin + 5 * 2; - - PortableReaderImpl readerImpl(&in, &idRslvr, 0, true, idRslvr.GetTypeId(), 0, 100, 100, footerBegin, footerEnd, OFFSET_TYPE_1_BYTE); - PortableReader reader(&readerImpl); - - in.Position(IGNITE_DFLT_HDR_LEN); - - BOOST_REQUIRE(reader.ReadCollectionSize("field1") == writeValues.size()); - - CollectionType expectedCollectionType = colType ? *colType : IGNITE_COLLECTION_UNDEFINED; - BOOST_REQUIRE(reader.ReadCollectionType("field1") == expectedCollectionType); - - PortableInnerVector readValues; - std::back_insert_iterator<PortableInnerVector> readInsertIterator(readValues); - - reader.ReadCollection<PortableInner>("field1", readInsertIterator); - - BOOST_REQUIRE(readValues.size() == 3); - - BOOST_REQUIRE(readValues[0].GetValue() == writeValues[0].GetValue()); - BOOST_REQUIRE(readValues[1].GetValue() == writeValues[1].GetValue()); - BOOST_REQUIRE(readValues[2].GetValue() == writeValues[2].GetValue()); - - BOOST_REQUIRE(reader.ReadInt8("field2") == 1); -} - -void CheckMapEmpty(MapType* mapType) -{ - TemplatedPortableIdResolver<PortableDummy> idRslvr; - - InteropUnpooledMemory mem(1024); - - InteropOutputStream out(&mem); - PortableWriterImpl writerImpl(&out, &idRslvr, NULL, NULL, 0); - PortableWriter writer(&writerImpl); - - out.Position(IGNITE_DFLT_HDR_LEN); - - PortableMapWriter<int8_t, PortableInner> mapWriter = mapType ? - writer.WriteMap<int8_t, PortableInner>("field1", *mapType) : writer.WriteMap<int8_t, PortableInner>("field1"); - - CheckWritesRestricted(writer); - - mapWriter.Close(); - - writer.WriteInt8("field2", 1); - - try - { - mapWriter.Write(1, PortableInner(1)); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - try - { - mapWriter.Close(); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - writerImpl.PostWrite(); - - out.Synchronize(); - - InteropInputStream in(&mem); - - int32_t footerBegin = in.ReadInt32(IGNITE_OFFSET_SCHEMA_OR_RAW_OFF); - int32_t footerEnd = footerBegin + 5 * 2; - - PortableReaderImpl readerImpl(&in, &idRslvr, 0, true, idRslvr.GetTypeId(), 0, 100, 100, footerBegin, footerEnd, OFFSET_TYPE_1_BYTE); - PortableReader reader(&readerImpl); - - in.Position(IGNITE_DFLT_HDR_LEN); - - PortableMapReader<int8_t, PortableInner> mapReader = reader.ReadMap<int8_t, PortableInner>("field1"); - - if (mapType) - BOOST_REQUIRE(mapReader.GetType() == *mapType); - else - BOOST_REQUIRE(mapReader.GetType() == IGNITE_MAP_UNDEFINED); - - BOOST_REQUIRE(mapReader.GetSize() == 0); - BOOST_REQUIRE(!mapReader.HasNext()); - BOOST_REQUIRE(!mapReader.IsNull()); - - try - { - int8_t key; - PortableInner val; - - mapReader.GetNext(&key, &val); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - BOOST_REQUIRE(reader.ReadInt8("field2") == 1); -} - -void CheckMap(MapType* mapType) -{ - PortableInner writeVal1 = PortableInner(1); - PortableInner writeVal2 = PortableInner(0); - PortableInner writeVal3 = PortableInner(2); - - TemplatedPortableIdResolver<PortableDummy> idRslvr; - - InteropUnpooledMemory mem(1024); - - InteropOutputStream out(&mem); - PortableWriterImpl writerImpl(&out, &idRslvr, NULL, NULL, 0); - PortableWriter writer(&writerImpl); - - out.Position(IGNITE_DFLT_HDR_LEN); - - PortableMapWriter<int8_t, PortableInner> mapWriter = mapType ? - writer.WriteMap<int8_t, PortableInner>("field1", *mapType) : writer.WriteMap<int8_t, PortableInner>("field1"); - - mapWriter.Write(1, writeVal1); - mapWriter.Write(2, writeVal2); - mapWriter.Write(3, writeVal3); - - CheckWritesRestricted(writer); - - mapWriter.Close(); - - writer.WriteInt8("field2", 1); - - try - { - mapWriter.Write(4, PortableInner(4)); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - try - { - mapWriter.Close(); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - writerImpl.PostWrite(); - - out.Synchronize(); - - InteropInputStream in(&mem); - - int32_t footerBegin = in.ReadInt32(IGNITE_OFFSET_SCHEMA_OR_RAW_OFF); - int32_t footerEnd = footerBegin + 5 * 2; - - PortableReaderImpl readerImpl(&in, &idRslvr, 0, true, idRslvr.GetTypeId(), 0, 100, 100, footerBegin, footerEnd, OFFSET_TYPE_1_BYTE); - PortableReader reader(&readerImpl); - - in.Position(IGNITE_DFLT_HDR_LEN); - - PortableMapReader<int8_t, PortableInner> mapReader = reader.ReadMap<int8_t, PortableInner>("field1"); - - CheckReadsRestricted(reader); - - if (mapType) - BOOST_REQUIRE(mapReader.GetType() == *mapType); - else - BOOST_REQUIRE(mapReader.GetType() == IGNITE_MAP_UNDEFINED); - - BOOST_REQUIRE(mapReader.GetSize() == 3); - BOOST_REQUIRE(!mapReader.IsNull()); - - int8_t key; - PortableInner val; - - BOOST_REQUIRE(mapReader.HasNext()); - - mapReader.GetNext(&key, &val); - BOOST_REQUIRE(key == 1); - BOOST_REQUIRE(val.GetValue() == writeVal1.GetValue()); - - mapReader.GetNext(&key, &val); - BOOST_REQUIRE(key == 2); - BOOST_REQUIRE(val.GetValue() == writeVal2.GetValue()); - - mapReader.GetNext(&key, &val); - BOOST_REQUIRE(key == 3); - BOOST_REQUIRE(val.GetValue() == writeVal3.GetValue()); - - BOOST_REQUIRE(!mapReader.HasNext()); - - try - { - mapReader.GetNext(&key, &val); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - BOOST_REQUIRE(reader.ReadInt8("field2") == 1); -} - -BOOST_AUTO_TEST_SUITE(PortableReaderWriterTestSuite) - -BOOST_AUTO_TEST_CASE(TestPrimitiveInt8) -{ - CheckPrimitive<int8_t>(1); -} - -BOOST_AUTO_TEST_CASE(TestPrimitiveBool) -{ - CheckPrimitive<bool>(true); -} - -BOOST_AUTO_TEST_CASE(TestPrimitiveInt16) -{ - CheckPrimitive<int16_t>(1); -} - -BOOST_AUTO_TEST_CASE(TestPrimitiveUInt16) -{ - CheckPrimitive<uint16_t>(1); -} - -BOOST_AUTO_TEST_CASE(TestPrimitiveInt32) -{ - CheckPrimitive<int32_t>(1); -} - -BOOST_AUTO_TEST_CASE(TestPrimitiveInt64) -{ - CheckPrimitive<int64_t>(1); -} - -BOOST_AUTO_TEST_CASE(TestPrimitiveFloat) -{ - CheckPrimitive<float>(1.1f); -} - -BOOST_AUTO_TEST_CASE(TestPrimitiveDouble) -{ - CheckPrimitive<double>(1.1); -} - -BOOST_AUTO_TEST_CASE(TestPrimitiveGuid) -{ - Guid val(1, 2); - - CheckPrimitive<Guid>(val); -} - -BOOST_AUTO_TEST_CASE(TestPrimitiveArrayInt8) -{ - CheckPrimitiveArray<int8_t>(1, 2, 3); -} - -BOOST_AUTO_TEST_CASE(TestPrimitiveArrayBool) -{ - CheckPrimitiveArray<bool>(false, true, false); -} - -BOOST_AUTO_TEST_CASE(TestPrimitiveArrayInt16) -{ - CheckPrimitiveArray<int16_t>(1, 2, 3); -} - -BOOST_AUTO_TEST_CASE(TestPrimitiveArrayUInt16) -{ - CheckPrimitiveArray<uint16_t>(1, 2, 3); -} - -BOOST_AUTO_TEST_CASE(TestPrimitiveArrayInt32) -{ - CheckPrimitiveArray<int32_t>(1, 2, 3); -} - -BOOST_AUTO_TEST_CASE(TestPrimitiveArrayInt64) -{ - CheckPrimitiveArray<int64_t>(1, 2, 3); -} - -BOOST_AUTO_TEST_CASE(TestPrimitiveArrayFloat) -{ - CheckPrimitiveArray<float>(1.1f, 2.2f, 3.3f); -} - -BOOST_AUTO_TEST_CASE(TestPrimitiveArrayDouble) -{ - CheckPrimitiveArray<double>(1.1, 2.2, 3.3); -} - -BOOST_AUTO_TEST_CASE(TestPrimitiveArrayGuid) -{ - Guid dflt(1, 2); - Guid val1(3, 4); - Guid val2(5, 6); - - CheckPrimitiveArray<Guid>(dflt, val1, val2); -} - -BOOST_AUTO_TEST_CASE(TestGuidNull) -{ - TemplatedPortableIdResolver<PortableDummy> idRslvr; - - InteropUnpooledMemory mem(1024); - - InteropOutputStream out(&mem); - PortableWriterImpl writerImpl(&out, &idRslvr, NULL, NULL, 0); - PortableWriter writer(&writerImpl); - - out.Position(IGNITE_DFLT_HDR_LEN); - - try - { - writer.WriteNull(NULL); - - BOOST_FAIL("Not restricted."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - writer.WriteNull("test"); - - writerImpl.PostWrite(); - - out.Synchronize(); - - InteropInputStream in(&mem); - - int32_t footerBegin = in.ReadInt32(IGNITE_OFFSET_SCHEMA_OR_RAW_OFF); - int32_t footerEnd = footerBegin + 5; - - PortableReaderImpl readerImpl(&in, &idRslvr, 0, true, idRslvr.GetTypeId(), 0, 100, 100, footerBegin, footerEnd, OFFSET_TYPE_1_BYTE); - PortableReader reader(&readerImpl); - - in.Position(IGNITE_DFLT_HDR_LEN); - - try - { - reader.ReadGuid(NULL); - - BOOST_FAIL("Not restricted."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - Guid expVal; - Guid actualVal = reader.ReadGuid("test"); - - BOOST_REQUIRE(actualVal == expVal); -} - -BOOST_AUTO_TEST_CASE(TestString) { - TemplatedPortableIdResolver<PortableDummy> idRslvr; - - InteropUnpooledMemory mem(1024); - - InteropOutputStream out(&mem); - PortableWriterImpl writerImpl(&out, &idRslvr, NULL, NULL, 0); - PortableWriter writer(&writerImpl); - - out.Position(IGNITE_DFLT_HDR_LEN); - - const char* writeVal1 = "testtest"; - const char* writeVal2 = "test"; - std::string writeVal3 = writeVal1; - - try - { - writer.WriteString(NULL, writeVal1); - - BOOST_FAIL("Not restricted."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - try - { - writer.WriteString(NULL, writeVal1, 4); - - BOOST_FAIL("Not restricted."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - try - { - writer.WriteString(NULL, writeVal3); - - BOOST_FAIL("Not restricted."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - writer.WriteString("field1", writeVal1); - writer.WriteString("field2", writeVal1, 4); - writer.WriteString("field3", writeVal3); - writer.WriteString("field4", NULL); - writer.WriteString("field5", NULL, 4); - - writerImpl.PostWrite(); - - out.Synchronize(); - - InteropInputStream in(&mem); - - int32_t footerBegin = in.ReadInt32(IGNITE_OFFSET_SCHEMA_OR_RAW_OFF); - int32_t footerEnd = footerBegin + 5 * 5; - - PortableReaderImpl readerImpl(&in, &idRslvr, 0, true, idRslvr.GetTypeId(), 0, 100, 100, footerBegin, footerEnd, OFFSET_TYPE_1_BYTE); - PortableReader reader(&readerImpl); - - in.Position(IGNITE_DFLT_HDR_LEN); - - try - { - char nullCheckRes[9]; - - reader.ReadString(NULL, nullCheckRes, 9); - - BOOST_FAIL("Not restricted."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - try - { - reader.ReadString(NULL); - - BOOST_FAIL("Not restricted."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - char readVal1[9]; - char readVal2[5]; - - BOOST_REQUIRE(reader.ReadString("field1", NULL, 0) == 8); - BOOST_REQUIRE(reader.ReadString("field1", NULL, 8) == 8); - BOOST_REQUIRE(reader.ReadString("field1", readVal1, 0) == 8); - BOOST_REQUIRE(reader.ReadString("field1", readVal1, 4) == 8); - - BOOST_REQUIRE(reader.ReadString("field1", readVal1, 9) == 8); - std::string writeVal1Str = writeVal1; - std::string readVal1Str = readVal1; - BOOST_REQUIRE(readVal1Str.compare(writeVal1Str) == 0); - - BOOST_REQUIRE(reader.ReadString("field2", readVal2, 5) == 4); - std::string writeVal2Str = writeVal2; - std::string readVal2Str = readVal2; - BOOST_REQUIRE(readVal2Str.compare(writeVal2Str) == 0); - - std::string readVal3 = reader.ReadString("field3"); - BOOST_REQUIRE(readVal3.compare(writeVal3) == 0); - - BOOST_REQUIRE(reader.ReadString("field4", readVal1, 9) == -1); - BOOST_REQUIRE(reader.ReadString("field5", readVal1, 9) == -1); -} - -BOOST_AUTO_TEST_CASE(TestStringArrayNull) -{ - TemplatedPortableIdResolver<PortableDummy> idRslvr; - - InteropUnpooledMemory mem(1024); - - InteropOutputStream out(&mem); - PortableWriterImpl writerImpl(&out, &idRslvr, NULL, NULL, 0); - PortableWriter writer(&writerImpl); - - out.Position(IGNITE_DFLT_HDR_LEN); - - writer.WriteNull("field1"); - writer.WriteInt8("field2", 1); - - writerImpl.PostWrite(); - - out.Synchronize(); - - InteropInputStream in(&mem); - - int32_t footerBegin = in.ReadInt32(IGNITE_OFFSET_SCHEMA_OR_RAW_OFF); - int32_t footerEnd = footerBegin + 5 * 2; - - PortableReaderImpl readerImpl(&in, &idRslvr, 0, true, idRslvr.GetTypeId(), 0, 100, 100, footerBegin, footerEnd, OFFSET_TYPE_1_BYTE); - PortableReader reader(&readerImpl); - - in.Position(IGNITE_DFLT_HDR_LEN); - - PortableStringArrayReader arrReader = reader.ReadStringArray("field1"); - - BOOST_REQUIRE(arrReader.GetSize() == -1); - BOOST_REQUIRE(!arrReader.HasNext()); - BOOST_REQUIRE(arrReader.IsNull()); - - try - { - char res[100]; - - arrReader.GetNext(res, 100); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - try - { - arrReader.GetNext(); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - BOOST_REQUIRE(reader.ReadInt8("field2") == 1); -} - -BOOST_AUTO_TEST_CASE(TestStringArrayEmpty) -{ - TemplatedPortableIdResolver<PortableDummy> idRslvr; - - InteropUnpooledMemory mem(1024); - - InteropOutputStream out(&mem); - PortableWriterImpl writerImpl(&out, &idRslvr, NULL, NULL, 0); - PortableWriter writer(&writerImpl); - - out.Position(IGNITE_DFLT_HDR_LEN); - - PortableStringArrayWriter arrWriter = writer.WriteStringArray("field1"); - - CheckWritesRestricted(writer); - - arrWriter.Close(); - - writer.WriteInt8("field2", 1); - - try - { - const char* val = "test"; - - arrWriter.Write(val, 4); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - try - { - const char* val = "test"; - - arrWriter.Write(val); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - try - { - std::string val = "test"; - - arrWriter.Write(val); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - try - { - arrWriter.Close(); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - writerImpl.PostWrite(); - - out.Synchronize(); - - InteropInputStream in(&mem); - - int32_t footerBegin = in.ReadInt32(IGNITE_OFFSET_SCHEMA_OR_RAW_OFF); - int32_t footerEnd = footerBegin + 5 * 2; - - PortableReaderImpl readerImpl(&in, &idRslvr, 0, true, idRslvr.GetTypeId(), 0, 100, 100, footerBegin, footerEnd, OFFSET_TYPE_1_BYTE); - PortableReader reader(&readerImpl); - - in.Position(IGNITE_DFLT_HDR_LEN); - - PortableStringArrayReader arrReader = reader.ReadStringArray("field1"); - - BOOST_REQUIRE(arrReader.GetSize() == 0); - BOOST_REQUIRE(!arrReader.HasNext()); - BOOST_REQUIRE(!arrReader.IsNull()); - - try - { - char res[100]; - - arrReader.GetNext(res, 100); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - try - { - arrReader.GetNext(); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - BOOST_REQUIRE(reader.ReadInt8("field2") == 1); -} - -BOOST_AUTO_TEST_CASE(TestStringArray) -{ - const char* writeVal1 = "testtest"; - const char* writeVal2 = "test"; - std::string writeVal3 = "test2"; - - TemplatedPortableIdResolver<PortableDummy> idRslvr; - - InteropUnpooledMemory mem(1024); - - InteropOutputStream out(&mem); - PortableWriterImpl writerImpl(&out, &idRslvr, NULL, NULL, 0); - PortableWriter writer(&writerImpl); - - out.Position(IGNITE_DFLT_HDR_LEN); - - PortableStringArrayWriter arrWriter = writer.WriteStringArray("field1"); - - arrWriter.Write(writeVal1); - arrWriter.Write(writeVal1, 4); - arrWriter.Write(NULL); // NULL value. - arrWriter.Write(NULL, 100); // NULL value again. - arrWriter.Write(writeVal3); - - CheckWritesRestricted(writer); - - arrWriter.Close(); - - writer.WriteInt8("field2", 1); - - try - { - const char* val = "test"; - - arrWriter.Write(val, 4); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - try - { - const char* val = "test"; - - arrWriter.Write(val); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - try - { - std::string val = "test"; - - arrWriter.Write(val); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - try - { - arrWriter.Close(); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - writerImpl.PostWrite(); - - out.Synchronize(); - - InteropInputStream in(&mem); - - int32_t footerBegin = in.ReadInt32(IGNITE_OFFSET_SCHEMA_OR_RAW_OFF); - int32_t footerEnd = footerBegin + 5 * 2; - - PortableReaderImpl readerImpl(&in, &idRslvr, 0, true, idRslvr.GetTypeId(), 0, 100, 100, footerBegin, footerEnd, OFFSET_TYPE_1_BYTE); - PortableReader reader(&readerImpl); - - in.Position(IGNITE_DFLT_HDR_LEN); - - PortableStringArrayReader arrReader = reader.ReadStringArray("field1"); - - CheckReadsRestricted(reader); - - BOOST_REQUIRE(arrReader.GetSize() == 5); - BOOST_REQUIRE(!arrReader.IsNull()); - - // 1. Read first value. - BOOST_REQUIRE(arrReader.HasNext()); - - char readVal1[9]; - - BOOST_REQUIRE(arrReader.GetNext(NULL, 0) == 8); - BOOST_REQUIRE(arrReader.GetNext(NULL, 8) == 8); - BOOST_REQUIRE(arrReader.GetNext(readVal1, 0) == 8); - BOOST_REQUIRE(arrReader.GetNext(readVal1, 4) == 8); - - BOOST_REQUIRE(arrReader.GetNext(readVal1, 9) == 8); - std::string writeVal1Str = writeVal1; - std::string readVal1Str = readVal1; - BOOST_REQUIRE(readVal1Str.compare(writeVal1Str) == 0); - - // 2. Read second value. - BOOST_REQUIRE(arrReader.HasNext()); - - char readVal2[5]; - - BOOST_REQUIRE(arrReader.GetNext(readVal2, 5) == 4); - std::string writeVal2Str = writeVal2; - std::string readVal2Str = readVal2; - BOOST_REQUIRE(readVal2Str.compare(writeVal2Str) == 0); - - // 3. Read NULL. - BOOST_REQUIRE(arrReader.HasNext()); - - BOOST_REQUIRE(arrReader.GetNext(readVal1, 4) == -1); - readVal1Str = readVal1; - BOOST_REQUIRE(readVal1Str.compare(writeVal1Str) == 0); - - // 4. Read NULL again, this time through another method. - BOOST_REQUIRE(arrReader.HasNext()); - - std::string readNullVal = arrReader.GetNext(); - - BOOST_REQUIRE(readNullVal.length() == 0); - - // 5. Read third value. - BOOST_REQUIRE(arrReader.HasNext()); - - std::string readVal3 = arrReader.GetNext(); - BOOST_REQUIRE(readVal3.compare(writeVal3) == 0); - - BOOST_REQUIRE(!arrReader.HasNext()); - - try - { - char res[100]; - - arrReader.GetNext(res, 100); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - try - { - arrReader.GetNext(); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - BOOST_REQUIRE(reader.ReadInt8("field2") == 1); -} - -BOOST_AUTO_TEST_CASE(TestObject) -{ - PortableInner writeVal1(1); - PortableInner writeVal2(0); - - TemplatedPortableIdResolver<PortableDummy> idRslvr; - - InteropUnpooledMemory mem(1024); - - InteropOutputStream out(&mem); - PortableWriterImpl writerImpl(&out, &idRslvr, NULL, NULL, 0); - PortableWriter writer(&writerImpl); - - out.Position(IGNITE_DFLT_HDR_LEN); - - writer.WriteObject("field1", writeVal1); - writer.WriteObject("field2", writeVal2); - writer.WriteNull("field3"); - - writerImpl.PostWrite(); - - out.Synchronize(); - - InteropInputStream in(&mem); - - int32_t footerBegin = in.ReadInt32(IGNITE_OFFSET_SCHEMA_OR_RAW_OFF); - int32_t footerEnd = footerBegin + 5 * 3; - - PortableReaderImpl readerImpl(&in, &idRslvr, 0, true, idRslvr.GetTypeId(), 0, 100, 100, footerBegin, footerEnd, OFFSET_TYPE_1_BYTE); - PortableReader reader(&readerImpl); - - in.Position(IGNITE_DFLT_HDR_LEN); - - PortableInner readVal1 = reader.ReadObject<PortableInner>("field1"); - - BOOST_REQUIRE(writeVal1.GetValue() == readVal1.GetValue()); - - PortableInner readVal2 = reader.ReadObject<PortableInner>("field2"); - BOOST_REQUIRE(writeVal2.GetValue() == readVal2.GetValue()); - - PortableInner readVal3 = reader.ReadObject<PortableInner>("field3"); - BOOST_REQUIRE(0 == readVal3.GetValue()); -} - -BOOST_AUTO_TEST_CASE(TestNestedObject) -{ - PortableOuter writeVal1(1, 2); - PortableOuter writeVal2(0, 0); - - TemplatedPortableIdResolver<PortableDummy> idRslvr; - - InteropUnpooledMemory mem(1024); - - InteropOutputStream out(&mem); - PortableWriterImpl writerImpl(&out, &idRslvr, NULL, NULL, 0); - PortableWriter writer(&writerImpl); - - out.Position(IGNITE_DFLT_HDR_LEN); - - writer.WriteObject("field1", writeVal1); - writer.WriteObject("field2", writeVal2); - writer.WriteNull("field3"); - - writerImpl.PostWrite(); - - out.Synchronize(); - - InteropInputStream in(&mem); - - int32_t footerBegin = in.ReadInt32(IGNITE_OFFSET_SCHEMA_OR_RAW_OFF); - int32_t footerEnd = footerBegin + 5 * 3; - - PortableReaderImpl readerImpl(&in, &idRslvr, 0, true, idRslvr.GetTypeId(), 0, 100, 100, footerBegin, footerEnd, OFFSET_TYPE_1_BYTE); - PortableReader reader(&readerImpl); - - in.Position(IGNITE_DFLT_HDR_LEN); - - PortableOuter readVal1 = reader.ReadObject<PortableOuter>("field1"); - BOOST_REQUIRE(writeVal1.GetValue() == readVal1.GetValue()); - BOOST_REQUIRE(writeVal1.GetInner().GetValue() == readVal1.GetInner().GetValue()); - - PortableOuter readVal2 = reader.ReadObject<PortableOuter>("field2"); - BOOST_REQUIRE(writeVal2.GetValue() == readVal2.GetValue()); - BOOST_REQUIRE(writeVal2.GetInner().GetValue() == readVal2.GetInner().GetValue()); - - PortableOuter readVal3 = reader.ReadObject<PortableOuter>("field3"); - BOOST_REQUIRE(0 == readVal3.GetValue()); - BOOST_REQUIRE(0 == readVal3.GetInner().GetValue()); -} - -BOOST_AUTO_TEST_CASE(TestArrayNull) -{ - TemplatedPortableIdResolver<PortableDummy> idRslvr; - - InteropUnpooledMemory mem(1024); - - InteropOutputStream out(&mem); - PortableWriterImpl writerImpl(&out, &idRslvr, NULL, NULL, 0); - PortableWriter writer(&writerImpl); - - out.Position(IGNITE_DFLT_HDR_LEN); - - writer.WriteNull("field1"); - writer.WriteInt8("field2", 1); - - writerImpl.PostWrite(); - - out.Synchronize(); - - InteropInputStream in(&mem); - - int32_t footerBegin = in.ReadInt32(IGNITE_OFFSET_SCHEMA_OR_RAW_OFF); - int32_t footerEnd = footerBegin + 5 * 2; - - PortableReaderImpl readerImpl(&in, &idRslvr, 0, true, idRslvr.GetTypeId(), 0, 100, 100, footerBegin, footerEnd, OFFSET_TYPE_1_BYTE); - PortableReader reader(&readerImpl); - - in.Position(IGNITE_DFLT_HDR_LEN); - - PortableArrayReader<PortableInner> arrReader = reader.ReadArray<PortableInner>("field1"); - - BOOST_REQUIRE(arrReader.GetSize() == -1); - BOOST_REQUIRE(!arrReader.HasNext()); - BOOST_REQUIRE(arrReader.IsNull()); - - try - { - arrReader.GetNext(); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - BOOST_REQUIRE(reader.ReadInt8("field2") == 1); -} - -BOOST_AUTO_TEST_CASE(TestArrayEmpty) -{ - TemplatedPortableIdResolver<PortableDummy> idRslvr; - - InteropUnpooledMemory mem(1024); - - InteropOutputStream out(&mem); - PortableWriterImpl writerImpl(&out, &idRslvr, NULL, NULL, 0); - PortableWriter writer(&writerImpl); - - out.Position(IGNITE_DFLT_HDR_LEN); - - PortableArrayWriter<PortableInner> arrWriter = writer.WriteArray<PortableInner>("field1"); - - CheckWritesRestricted(writer); - - arrWriter.Close(); - - writer.WriteInt8("field2", 1); - - try - { - arrWriter.Write(1); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - try - { - arrWriter.Close(); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - writerImpl.PostWrite(); - - out.Synchronize(); - - InteropInputStream in(&mem); - - int32_t footerBegin = in.ReadInt32(IGNITE_OFFSET_SCHEMA_OR_RAW_OFF); - int32_t footerEnd = footerBegin + 5 * 2; - - PortableReaderImpl readerImpl(&in, &idRslvr, 0, true, idRslvr.GetTypeId(), 0, 100, 100, footerBegin, footerEnd, OFFSET_TYPE_1_BYTE); - PortableReader reader(&readerImpl); - - in.Position(IGNITE_DFLT_HDR_LEN); - - PortableArrayReader<PortableInner> arrReader = reader.ReadArray<PortableInner>("field1"); - - BOOST_REQUIRE(arrReader.GetSize() == 0); - BOOST_REQUIRE(!arrReader.HasNext()); - BOOST_REQUIRE(!arrReader.IsNull()); - - try - { - arrReader.GetNext(); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - BOOST_REQUIRE(reader.ReadInt8("field2") == 1); -} - -BOOST_AUTO_TEST_CASE(TestArray) -{ - PortableInner writeVal1 = PortableInner(1); - PortableInner writeVal2 = PortableInner(0); - PortableInner writeVal3 = PortableInner(2); - - TemplatedPortableIdResolver<PortableDummy> idRslvr; - - InteropUnpooledMemory mem(1024); - - InteropOutputStream out(&mem); - PortableWriterImpl writerImpl(&out, &idRslvr, NULL, NULL, 0); - PortableWriter writer(&writerImpl); - - out.Position(IGNITE_DFLT_HDR_LEN); - - PortableArrayWriter<PortableInner> arrWriter = writer.WriteArray<PortableInner>("field1"); - - arrWriter.Write(writeVal1); - arrWriter.Write(writeVal2); - arrWriter.Write(writeVal3); - - CheckWritesRestricted(writer); - - arrWriter.Close(); - - writer.WriteInt8("field2", 1); - - try - { - arrWriter.Write(1); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - try - { - arrWriter.Close(); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - writerImpl.PostWrite(); - - out.Synchronize(); - - InteropInputStream in(&mem); - - int32_t footerBegin = in.ReadInt32(IGNITE_OFFSET_SCHEMA_OR_RAW_OFF); - int32_t footerEnd = footerBegin + 5 * 2; - - PortableReaderImpl readerImpl(&in, &idRslvr, 0, true, idRslvr.GetTypeId(), 0, 100, 100, footerBegin, footerEnd, OFFSET_TYPE_1_BYTE); - PortableReader reader(&readerImpl); - - in.Position(IGNITE_DFLT_HDR_LEN); - - PortableArrayReader<PortableInner> arrReader = reader.ReadArray<PortableInner>("field1"); - - CheckReadsRestricted(reader); - - BOOST_REQUIRE(arrReader.GetSize() == 3); - BOOST_REQUIRE(!arrReader.IsNull()); - - BOOST_REQUIRE(arrReader.HasNext()); - BOOST_REQUIRE(arrReader.GetNext().GetValue() == writeVal1.GetValue()); - - BOOST_REQUIRE(arrReader.HasNext()); - BOOST_REQUIRE(arrReader.GetNext().GetValue() == writeVal2.GetValue()); - - BOOST_REQUIRE(arrReader.HasNext()); - BOOST_REQUIRE(arrReader.GetNext().GetValue() == writeVal3.GetValue()); - - BOOST_REQUIRE(!arrReader.HasNext()); - - try - { - arrReader.GetNext(); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - BOOST_REQUIRE(reader.ReadInt8("field2") == 1); -} - -BOOST_AUTO_TEST_CASE(TestCollectionNull) -{ - TemplatedPortableIdResolver<PortableDummy> idRslvr; - - InteropUnpooledMemory mem(1024); - - InteropOutputStream out(&mem); - PortableWriterImpl writerImpl(&out, &idRslvr, NULL, NULL, 0); - PortableWriter writer(&writerImpl); - - out.Position(IGNITE_DFLT_HDR_LEN); - - writer.WriteNull("field1"); - writer.WriteInt8("field2", 1); - - writerImpl.PostWrite(); - - out.Synchronize(); - - InteropInputStream in(&mem); - - int32_t footerBegin = in.ReadInt32(IGNITE_OFFSET_SCHEMA_OR_RAW_OFF); - int32_t footerEnd = footerBegin + 5 * 2; - - PortableReaderImpl readerImpl(&in, &idRslvr, 0, true, idRslvr.GetTypeId(), 0, 100, 100, footerBegin, footerEnd, OFFSET_TYPE_1_BYTE); - PortableReader reader(&readerImpl); - - in.Position(IGNITE_DFLT_HDR_LEN); - - PortableCollectionReader<PortableInner> colReader = reader.ReadCollection<PortableInner>("field1"); - - BOOST_REQUIRE(colReader.GetType() == IGNITE_COLLECTION_UNDEFINED); - BOOST_REQUIRE(colReader.GetSize() == -1); - BOOST_REQUIRE(!colReader.HasNext()); - BOOST_REQUIRE(colReader.IsNull()); - - try - { - colReader.GetNext(); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - BOOST_REQUIRE(reader.ReadInt8("field2") == 1); -} - -BOOST_AUTO_TEST_CASE(TestCollectionEmpty) -{ - CheckCollectionEmpty(NULL); -} - -BOOST_AUTO_TEST_CASE(TestCollectionEmptyTyped) -{ - CollectionType typ = IGNITE_COLLECTION_CONCURRENT_SKIP_LIST_SET; - - CheckCollectionEmpty(&typ); -} - -BOOST_AUTO_TEST_CASE(TestCollection) -{ - CheckCollection(NULL); -} - -BOOST_AUTO_TEST_CASE(testCollectionTyped) -{ - CollectionType typ = IGNITE_COLLECTION_CONCURRENT_SKIP_LIST_SET; - - CheckCollection(&typ); -} - -BOOST_AUTO_TEST_CASE(TestCollectionIterators) -{ - CheckCollectionIterators(NULL); -} - -BOOST_AUTO_TEST_CASE(TestCollectionIteratorsTyped) -{ - CollectionType typ = IGNITE_COLLECTION_CONCURRENT_SKIP_LIST_SET; - - CheckCollectionIterators(&typ); -} - -BOOST_AUTO_TEST_CASE(TestMapNull) -{ - TemplatedPortableIdResolver<PortableDummy> idRslvr; - - InteropUnpooledMemory mem(1024); - - InteropOutputStream out(&mem); - PortableWriterImpl writerImpl(&out, &idRslvr, NULL, NULL, 0); - PortableWriter writer(&writerImpl); - - out.Position(IGNITE_DFLT_HDR_LEN); - - writer.WriteNull("field1"); - writer.WriteInt8("field2", 1); - - writerImpl.PostWrite(); - - out.Synchronize(); - - InteropInputStream in(&mem); - - int32_t footerBegin = in.ReadInt32(IGNITE_OFFSET_SCHEMA_OR_RAW_OFF); - int32_t footerEnd = footerBegin + 5 * 2; - - PortableReaderImpl readerImpl(&in, &idRslvr, 0, true, idRslvr.GetTypeId(), 0, 100, 100, footerBegin, footerEnd, OFFSET_TYPE_1_BYTE); - PortableReader reader(&readerImpl); - - in.Position(IGNITE_DFLT_HDR_LEN); - - PortableMapReader<int8_t, PortableInner> mapReader = reader.ReadMap<int8_t, PortableInner>("field1"); - - BOOST_REQUIRE(mapReader.GetType() == IGNITE_MAP_UNDEFINED); - BOOST_REQUIRE(mapReader.GetSize() == -1); - BOOST_REQUIRE(!mapReader.HasNext()); - BOOST_REQUIRE(mapReader.IsNull()); - - try - { - int8_t key; - PortableInner val; - - mapReader.GetNext(&key, &val); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - BOOST_REQUIRE(reader.ReadInt8("field2") == 1); -} - -BOOST_AUTO_TEST_CASE(TestMapEmpty) -{ - CheckMapEmpty(NULL); -} - -BOOST_AUTO_TEST_CASE(TestMapEmptyTyped) -{ - MapType typ = IGNITE_MAP_CONCURRENT_HASH_MAP; - - CheckMapEmpty(&typ); -} - -BOOST_AUTO_TEST_CASE(TestMap) -{ - CheckMap(NULL); -} - -BOOST_AUTO_TEST_CASE(TestMapTyped) -{ - MapType typ = IGNITE_MAP_CONCURRENT_HASH_MAP; - - CheckMap(&typ); -} - -BOOST_AUTO_TEST_CASE(TestRawMode) -{ - TemplatedPortableIdResolver<PortableDummy> idRslvr; - - InteropUnpooledMemory mem(1024); - - InteropOutputStream out(&mem); - PortableWriterImpl writerImpl(&out, &idRslvr, NULL, NULL, 0); - PortableWriter writer(&writerImpl); - - out.Position(IGNITE_DFLT_HDR_LEN); - - PortableRawWriter rawWriter = writer.RawWriter(); - - try - { - writer.RawWriter(); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - rawWriter.WriteInt8(1); - - CheckWritesRestricted(writer); - - writerImpl.PostWrite(); - - out.Synchronize(); - - InteropInputStream in(&mem); - - int32_t footerBegin = in.ReadInt32(IGNITE_OFFSET_SCHEMA_OR_RAW_OFF); - int32_t footerEnd = footerBegin; - - PortableReaderImpl readerImpl(&in, &idRslvr, 0, true, idRslvr.GetTypeId(), 0, 1000, footerBegin, footerBegin, footerEnd, OFFSET_TYPE_1_BYTE); - PortableReader reader(&readerImpl); - - in.Position(IGNITE_DFLT_HDR_LEN); - - PortableRawReader rawReader = reader.RawReader(); - - try - { - reader.RawReader(); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - BOOST_REQUIRE(rawReader.ReadInt8() == 1); - - CheckReadsRestricted(reader); -} - -BOOST_AUTO_TEST_CASE(TestFieldSeek) -{ - TemplatedPortableIdResolver<PortableFields> idRslvr; - - InteropUnpooledMemory mem(1024); - - InteropOutputStream out(&mem); - PortableWriterImpl writer(&out, NULL); - - PortableFields writeVal(1, 2, 3, 4); - - writer.WriteTopObject<PortableFields>(writeVal); - - out.Synchronize(); - - InteropInputStream in(&mem); - - int32_t pos = in.Position(); - in.ReadInt8(); // We do not need a header here. - in.ReadInt8(); // We do not need proto ver here. - - int16_t flags = in.ReadInt16(); - int32_t typeId = in.ReadInt32(); - int32_t hashCode = in.ReadInt32(); - int32_t len = in.ReadInt32(); - - in.ReadInt32(); // Ignoring Schema Id. - - int32_t schemaOrRawOff = in.ReadInt32(); - - int32_t rawOff; - int32_t footerBegin; - - if (flags & IGNITE_PORTABLE_FLAG_RAW_ONLY) - footerBegin = len; - else - footerBegin = schemaOrRawOff; - - int32_t trailingBytes = (len - footerBegin) % 8; - - int32_t footerEnd = len - trailingBytes; - - if (trailingBytes) - rawOff = in.ReadInt32(pos + len - 4); - else - rawOff = schemaOrRawOff; - - bool usrType = flags & IGNITE_PORTABLE_FLAG_USER_OBJECT; - - footerBegin += pos; - footerEnd += pos; - - PortableReaderImpl readerImpl(&in, &idRslvr, pos, usrType, - typeId, hashCode, len, rawOff, - footerBegin, footerEnd, OFFSET_TYPE_1_BYTE); - - PortableReader reader(&readerImpl); - - // 1. Clockwise. - BOOST_REQUIRE(reader.ReadInt32("val1") == 1); - BOOST_REQUIRE(reader.ReadInt32("val2") == 2); - BOOST_REQUIRE(reader.ReadInt32("val1") == 1); - BOOST_REQUIRE(reader.ReadInt32("val2") == 2); - - // 2. Counter closkwise. - in.Position(IGNITE_DFLT_HDR_LEN); - BOOST_REQUIRE(reader.ReadInt32("val2") == 2); - BOOST_REQUIRE(reader.ReadInt32("val1") == 1); - BOOST_REQUIRE(reader.ReadInt32("val2") == 2); - BOOST_REQUIRE(reader.ReadInt32("val1") == 1); - - // 3. Same field twice. - in.Position(IGNITE_DFLT_HDR_LEN); - BOOST_REQUIRE(reader.ReadInt32("val1") == 1); - BOOST_REQUIRE(reader.ReadInt32("val1") == 1); - - in.Position(IGNITE_DFLT_HDR_LEN); - BOOST_REQUIRE(reader.ReadInt32("val2") == 2); - BOOST_REQUIRE(reader.ReadInt32("val2") == 2); - - // 4. Read missing field in between. - in.Position(IGNITE_DFLT_HDR_LEN); - BOOST_REQUIRE(reader.ReadInt32("val1") == 1); - BOOST_REQUIRE(reader.ReadInt32("missing") == 0); - BOOST_REQUIRE(reader.ReadInt32("val2") == 2); - - in.Position(IGNITE_DFLT_HDR_LEN); - BOOST_REQUIRE(reader.ReadInt32("val2") == 2); - BOOST_REQUIRE(reader.ReadInt32("missing") == 0); - BOOST_REQUIRE(reader.ReadInt32("val1") == 1); - - // 5. Invalid field type. - in.Position(IGNITE_DFLT_HDR_LEN); - BOOST_REQUIRE(reader.ReadInt32("val1") == 1); - - try - { - reader.ReadInt64("val2"); - - BOOST_FAIL("Error expected."); - } - catch (IgniteError& err) - { - BOOST_REQUIRE(err.GetCode() == IgniteError::IGNITE_ERR_PORTABLE); - } - - BOOST_REQUIRE(reader.ReadInt32("val2") == 2); - - // 6. Read missing primitive fields. - BOOST_REQUIRE(reader.ReadInt8("missing") == 0); - BOOST_REQUIRE(reader.ReadBool("missing") == false); - BOOST_REQUIRE(reader.ReadInt16("missing") == 0); - BOOST_REQUIRE(reader.ReadUInt16("missing") == 0); - BOOST_REQUIRE(reader.ReadInt32("missing") == 0); - BOOST_REQUIRE(reader.ReadInt64("missing") == 0); - BOOST_REQUIRE(reader.ReadFloat("missing") == 0); - BOOST_REQUIRE(reader.ReadDouble("missing") == 0); - - BOOST_REQUIRE(reader.ReadGuid("missing").GetMostSignificantBits() == 0); - BOOST_REQUIRE(reader.ReadGuid("missing").GetLeastSignificantBits() == 0); - - // 7. Read missing primitive array fields. - BOOST_REQUIRE(reader.ReadInt8Array("missing", NULL, 1) == -1); - BOOST_REQUIRE(reader.ReadBoolArray("missing", NULL, 1) == -1); - BOOST_REQUIRE(reader.ReadInt16Array("missing", NULL, 1) == -1); - BOOST_REQUIRE(reader.ReadUInt16Array("missing", NULL, 1) == -1); - BOOST_REQUIRE(reader.ReadInt32Array("missing", NULL, 1) == -1); - BOOST_REQUIRE(reader.ReadInt64Array("missing", NULL, 1) == -1); - BOOST_REQUIRE(reader.ReadFloatArray("missing", NULL, 1) == -1); - BOOST_REQUIRE(reader.ReadDoubleArray("missing", NULL, 1) == -1); - - BOOST_REQUIRE(reader.ReadGuidArray("missing", NULL, 1) == -1); - - // 8. Read missing string fields. - BOOST_REQUIRE(reader.ReadString("missing", NULL, 1) == -1); - BOOST_REQUIRE(reader.ReadString("missing").length() == 0); - - // 9. Read missing object fields. - BOOST_REQUIRE(reader.ReadObject<PortableFields*>("missing") == NULL); - - // 10. Read missing container fields. - PortableStringArrayReader stringArrReader = reader.ReadStringArray("missing"); - BOOST_REQUIRE(stringArrReader.IsNull()); - - PortableArrayReader<PortableFields> arrReader = reader.ReadArray<PortableFields>("missing"); - BOOST_REQUIRE(arrReader.IsNull()); - - PortableCollectionReader<PortableFields> colReader = reader.ReadCollection<PortableFields>("missing"); - BOOST_REQUIRE(colReader.IsNull()); - - PortableMapReader<int32_t, PortableFields> mapReader = reader.ReadMap<int32_t, PortableFields>("missing"); - BOOST_REQUIRE(mapReader.IsNull()); -} - -BOOST_AUTO_TEST_CASE(TestSchemaOffset2ByteFields) -{ - const int fieldsNum = 64; - - TemplatedPortableIdResolver<PortableDummy> idRslvr; - - InteropUnpooledMemory mem(4096); - - InteropOutputStream out(&mem); - PortableWriterImpl writerImpl(&out, &idRslvr, NULL, NULL, 0); - PortableWriter writer(&writerImpl); - - out.Position(IGNITE_DFLT_HDR_LEN); - - for (int i = 0; i < fieldsNum; ++i) - { - std::stringstream tmp; - tmp << "field" << i; - - writer.WriteInt32(tmp.str().c_str(), i * 10); - } - - writerImpl.PostWrite(); - - out.Synchronize(); - - InteropInputStream in(&mem); - - int32_t footerBegin = in.ReadInt32(IGNITE_OFFSET_SCHEMA_OR_RAW_OFF); - int32_t footerEnd = footerBegin + 6 * fieldsNum; - - PortableReaderImpl readerImpl(&in, &idRslvr, 0, true, idRslvr.GetTypeId(), 0, 100, 100, footerBegin, footerEnd, OFFSET_TYPE_2_BYTE); - PortableReader reader(&readerImpl); - - in.Position(IGNITE_DFLT_HDR_LEN); - - for (int i = 0; i < fieldsNum; ++i) - { - std::stringstream tmp; - tmp << "field" << i; - - BOOST_REQUIRE(reader.ReadInt32(tmp.str().c_str()) == i * 10); - } -} - -BOOST_AUTO_TEST_CASE(TestSchemaOffset4ByteFields) -{ - const int fieldsNum = 0x10000 / 4; - - TemplatedPortableIdResolver<PortableDummy> idRslvr; - - InteropUnpooledMemory mem(1024 * 1024); - - InteropOutputStream out(&mem); - PortableWriterImpl writerImpl(&out, &idRslvr, NULL, NULL, 0); - PortableWriter writer(&writerImpl); - - out.Position(IGNITE_DFLT_HDR_LEN); - - for (int i = 0; i < fieldsNum; ++i) - { - std::stringstream tmp; - tmp << "field" << i; - - writer.WriteInt32(tmp.str().c_str(), i * 10); - } - - writerImpl.PostWrite(); - - out.Synchronize(); - - InteropInputStream in(&mem); - - int32_t footerBegin = in.ReadInt32(IGNITE_OFFSET_SCHEMA_OR_RAW_OFF); - int32_t footerEnd = footerBegin + 8 * fieldsNum; - - PortableReaderImpl readerImpl(&in, &idRslvr, 0, true, idRslvr.GetTypeId(), 0, 100, 100, footerBegin, footerEnd, OFFSET_TYPE_4_BYTE); - PortableReader reader(&readerImpl); - - in.Position(IGNITE_DFLT_HDR_LEN); - - for (int i = 0; i < fieldsNum; ++i) - { - std::stringstream tmp; - tmp << "field" << i; - - BOOST_REQUIRE(reader.ReadInt32(tmp.str().c_str()) == i * 10); - } -} - -BOOST_AUTO_TEST_CASE(TestSchemaOffset2ByteArray) -{ - TemplatedPortableIdResolver<PortableDummy> idRslvr; - - InteropUnpooledMemory mem(4096); - - InteropOutputStream out(&mem); - PortableWriterImpl writerImpl(&out, &idRslvr, NULL, NULL, 0); - PortableWriter writer(&writerImpl); - - out.Position(IGNITE_DFLT_HDR_LEN); - - int8_t dummyArray[256] = {}; - - writer.WriteInt8Array("field1", dummyArray, sizeof(dummyArray)); - writer.WriteInt32("field2", 42); - - writerImpl.PostWrite(); - - out.Synchronize(); - - InteropInputStream in(&mem); - - int32_t footerBegin = in.ReadInt32(IGNITE_OFFSET_SCHEMA_OR_RAW_OFF); - int32_t footerEnd = footerBegin + 6 * 2; - - PortableReaderImpl readerImpl(&in, &idRslvr, 0, true, idRslvr.GetTypeId(), 0, 100, 100, footerBegin, footerEnd, OFFSET_TYPE_2_BYTE); - PortableReader reader(&readerImpl); - - in.Position(IGNITE_DFLT_HDR_LEN); - - BOOST_REQUIRE(reader.ReadInt32("field2") == 42); -} - -BOOST_AUTO_TEST_CASE(TestSchemaOffset4ByteArray) -{ - TemplatedPortableIdResolver<PortableDummy> idRslvr; - - InteropUnpooledMemory mem(1024 * 1024); - - InteropOutputStream out(&mem); - PortableWriterImpl writerImpl(&out, &idRslvr, NULL, NULL, 0); - PortableWriter writer(&writerImpl); - - out.Position(IGNITE_DFLT_HDR_LEN); - - int8_t dummyArray[0x10000] = {}; - - writer.WriteInt8Array("field1", dummyArray, sizeof(dummyArray)); - writer.WriteInt32("field2", 42); - - writerImpl.PostWrite(); - - out.Synchronize(); - - InteropInputStream in(&mem); - - int32_t footerBegin = in.ReadInt32(IGNITE_OFFSET_SCHEMA_OR_RAW_OFF); - int32_t footerEnd = footerBegin + 8 * 2; - - PortableReaderImpl readerImpl(&in, &idRslvr, 0, true, idRslvr.GetTypeId(), 0, 100, 100, footerBegin, footerEnd, OFFSET_TYPE_4_BYTE); - PortableReader reader(&readerImpl); - - in.Position(IGNITE_DFLT_HDR_LEN); - - BOOST_REQUIRE(reader.ReadInt32("field2") == 42); -} - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/303d79eb/modules/platforms/cpp/core-test/src/portable_session_test.cpp ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/core-test/src/portable_session_test.cpp b/modules/platforms/cpp/core-test/src/portable_session_test.cpp deleted file mode 100644 index 9d84e48..0000000 --- a/modules/platforms/cpp/core-test/src/portable_session_test.cpp +++ /dev/null @@ -1,257 +0,0 @@ -/* - * 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. - */ - -#ifndef _MSC_VER - #define BOOST_TEST_DYN_LINK -#endif - -#include <boost/test/unit_test.hpp> - -#include "ignite/impl/interop/interop.h" -#include "ignite/impl/portable/portable_reader_impl.h" -#include "ignite/impl/portable/portable_writer_impl.h" - -#include "ignite/portable_test_defs.h" - -using namespace ignite; -using namespace ignite::impl::interop; -using namespace ignite::impl::portable; -using namespace ignite::portable; -using namespace ignite_test::core::portable; - -/* - * Check primitive value serialization-deserialization. - */ -template<typename T> -void CheckRawPrimitive(T writeVal) -{ - InteropUnpooledMemory mem(1024); - - InteropOutputStream out(&mem); - PortableWriterImpl writeSes(&out, NULL); - writeSes.WriteTopObject<T>(writeVal); - out.Synchronize(); - - InteropInputStream in(&mem); - PortableReaderImpl reader(&in); - T readVal = reader.ReadTopObject<T>(); - - BOOST_REQUIRE(readVal == writeVal); -} - -BOOST_AUTO_TEST_SUITE(PortableSessionTestSuite) - -BOOST_AUTO_TEST_CASE(TestByte) -{ - CheckRawPrimitive<int8_t>(-128); - CheckRawPrimitive<int8_t>(-1); - CheckRawPrimitive<int8_t>(0); - CheckRawPrimitive<int8_t>(1); - CheckRawPrimitive<int8_t>(127); -} - -BOOST_AUTO_TEST_CASE(TestBool) -{ - CheckRawPrimitive<bool>(true); - CheckRawPrimitive<bool>(false); -} - -BOOST_AUTO_TEST_CASE(TestShort) -{ - //CheckRawPrimitive<int16_t>(std::numeric_limits<int16_t>::min()); - CheckRawPrimitive<int16_t>(-1); - CheckRawPrimitive<int16_t>(0); - CheckRawPrimitive<int16_t>(1); - //CheckRawPrimitive<int16_t>(std::numeric_limits<int16_t>::max()); -} - -BOOST_AUTO_TEST_CASE(TestChar) -{ - //CheckRawPrimitive<uint16_t>(std::numeric_limits<uint16_t>::min()); - CheckRawPrimitive<uint16_t>(1); - //CheckRawPrimitive<uint16_t>(std::numeric_limits<uint16_t>::max()); -} - -BOOST_AUTO_TEST_CASE(TestInt) -{ - //CheckRawPrimitive<int32_t>(std::numeric_limits<int32_t>::min()); - CheckRawPrimitive<int32_t>(-1); - CheckRawPrimitive<int32_t>(0); - CheckRawPrimitive<int32_t>(1); - //CheckRawPrimitive<int32_t>(std::numeric_limits<int32_t>::max()); -} - -BOOST_AUTO_TEST_CASE(TestLong) -{ - //CheckRawPrimitive<int64_t>(std::numeric_limits<int64_t>::min()); - CheckRawPrimitive<int64_t>(-1); - CheckRawPrimitive<int64_t>(0); - CheckRawPrimitive<int64_t>(1); - //CheckRawPrimitive<int64_t>(std::numeric_limits<int64_t>::max()); -} - -BOOST_AUTO_TEST_CASE(TestFloat) -{ - CheckRawPrimitive<float>(-1.1f); - CheckRawPrimitive<float>(0); - CheckRawPrimitive<float>(1.1f); -} - -BOOST_AUTO_TEST_CASE(TestDouble) -{ - CheckRawPrimitive<double>(-1.1); - CheckRawPrimitive<double>(0); - CheckRawPrimitive<double>(1.1); -} - -BOOST_AUTO_TEST_CASE(TestGuid) -{ - Guid writeVal = Guid(1, 1); - - InteropUnpooledMemory mem(1024); - - InteropOutputStream out(&mem); - PortableWriterImpl writeSes(&out, NULL); - writeSes.WriteTopObject<Guid>(writeVal); - out.Synchronize(); - - InteropInputStream in(&mem); - PortableReaderImpl reader(&in); - Guid readVal = reader.ReadTopObject<Guid>(); - - BOOST_REQUIRE(readVal.GetMostSignificantBits() == writeVal.GetMostSignificantBits()); - BOOST_REQUIRE(readVal.GetLeastSignificantBits() == writeVal.GetLeastSignificantBits()); -} - -BOOST_AUTO_TEST_CASE(TestString) -{ - std::string writeVal = "MyString"; - - InteropUnpooledMemory mem(1024); - - InteropOutputStream out(&mem); - PortableWriterImpl writeSes(&out, NULL); - writeSes.WriteTopObject<std::string>(writeVal); - out.Synchronize(); - - InteropInputStream in(&mem); - PortableReaderImpl reader(&in); - std::string readVal = reader.ReadTopObject<std::string>(); - - BOOST_REQUIRE(readVal.compare(writeVal) == 0); -} - -BOOST_AUTO_TEST_CASE(TestObject) -{ - InteropUnpooledMemory mem(1024); - - InteropOutputStream out(&mem); - PortableWriterImpl writer(&out, NULL); - - InteropInputStream in(&mem); - PortableReaderImpl reader(&in); - - // 1. Test null object. - PortableInner writeVal(0); - - writer.WriteTopObject<PortableInner>(writeVal); - out.Synchronize(); - - in.Synchronize(); - PortableInner readVal = reader.ReadTopObject<PortableInner>(); - - BOOST_REQUIRE(readVal.GetValue() == 0); - - // 2. Test non-null object. - out.Position(0); - in.Position(0); - - writeVal = PortableInner(1); - - writer.WriteTopObject<PortableInner>(writeVal); - out.Synchronize(); - - in.Synchronize(); - readVal = reader.ReadTopObject<PortableInner>(); - - BOOST_REQUIRE(readVal.GetValue() == 1); -} - -BOOST_AUTO_TEST_CASE(TestObjectWithRawFields) -{ - InteropUnpooledMemory mem(1024); - - InteropOutputStream out(&mem); - PortableWriterImpl writer(&out, NULL); - - InteropInputStream in(&mem); - PortableReaderImpl reader(&in); - - out.Position(0); - in.Position(0); - - PortableFields writeVal = PortableFields(1, 2, 3, 4); - - writer.WriteTopObject<PortableFields>(writeVal); - out.Synchronize(); - - in.Synchronize(); - PortableFields readVal = reader.ReadTopObject<PortableFields>(); - - BOOST_REQUIRE(readVal.val1 == 1); - BOOST_REQUIRE(readVal.val2 == 2); - BOOST_REQUIRE(readVal.rawVal1 == 3); - BOOST_REQUIRE(readVal.rawVal2 == 4); -} - -BOOST_AUTO_TEST_CASE(TestPointer) -{ - InteropUnpooledMemory mem(1024); - - InteropOutputStream out(&mem); - PortableWriterImpl writer(&out, NULL); - - InteropInputStream in(&mem); - PortableReaderImpl reader(&in); - - // 1. Test null object. - writer.WriteTopObject<PortableInner*>(NULL); - out.Synchronize(); - - in.Synchronize(); - PortableInner* readVal = reader.ReadTopObject<PortableInner*>(); - - BOOST_REQUIRE(readVal == NULL); - - // 2. Test non-null object. - out.Position(0); - in.Position(0); - - PortableInner writeVal = PortableInner(1); - - writer.WriteTopObject<PortableInner*>(&writeVal); - out.Synchronize(); - - in.Synchronize(); - readVal = reader.ReadTopObject<PortableInner*>(); - - BOOST_REQUIRE(readVal->GetValue() == 1); - - delete readVal; -} - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/303d79eb/modules/platforms/cpp/core-test/src/portable_test_defs.cpp ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/core-test/src/portable_test_defs.cpp b/modules/platforms/cpp/core-test/src/portable_test_defs.cpp deleted file mode 100644 index e818711..0000000 --- a/modules/platforms/cpp/core-test/src/portable_test_defs.cpp +++ /dev/null @@ -1,65 +0,0 @@ -/* - * 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. - */ - -#include "ignite/impl/interop/interop.h" -#include "ignite/portable/portable.h" - -#include "ignite/portable_test_defs.h" - -using namespace ignite; -using namespace ignite::impl::interop; -using namespace ignite::impl::portable; -using namespace ignite::portable; - -namespace ignite_test -{ - namespace core - { - namespace portable - { - PortableInner::PortableInner() : val(0) - { - // No-op. - } - - PortableInner::PortableInner(int32_t val) : val(val) - { - // No-op. - } - - int32_t PortableInner::GetValue() const - { - return val; - } - - PortableOuter::PortableOuter(int32_t valIn, int32_t valOut) : inner(valIn), val(valOut) - { - // No-op. - } - - PortableInner PortableOuter::GetInner() const - { - return inner; - } - - int32_t PortableOuter::GetValue() const - { - return val; - } - } - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/303d79eb/modules/platforms/cpp/core/Makefile.am ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/core/Makefile.am b/modules/platforms/cpp/core/Makefile.am index 4c55545..8b6b98d 100644 --- a/modules/platforms/cpp/core/Makefile.am +++ b/modules/platforms/cpp/core/Makefile.am @@ -31,21 +31,21 @@ COMMON_SRC = os/linux/src/impl/utils.cpp \ src/impl/interop/interop_memory.cpp \ src/impl/interop/interop_input_stream.cpp \ src/impl/interop/interop_output_stream.cpp \ - src/portable/portable_type.cpp \ - src/impl/portable/portable_metadata_snapshot.cpp \ - src/impl/portable/portable_metadata_handler.cpp \ - src/impl/portable/portable_metadata_updater.cpp \ - src/impl/portable/portable_metadata_manager.cpp \ - src/impl/portable/portable_utils.cpp \ - src/impl/portable/portable_reader_impl.cpp \ - src/impl/portable/portable_writer_impl.cpp \ - src/impl/portable/portable_schema.cpp \ - src/portable/portable_containers.cpp \ - src/portable/portable_raw_reader.cpp \ - src/portable/portable_raw_writer.cpp \ - src/portable/portable_reader.cpp \ - src/portable/portable_writer.cpp \ - src/impl/portable/portable_metadata_updater_impl.cpp \ + src/binary/binary_type.cpp \ + src/impl/binary/binary_type_snapshot.cpp \ + src/impl/binary/binary_type_handler.cpp \ + src/impl/binary/binary_type_updater.cpp \ + src/impl/binary/binary_type_manager.cpp \ + src/impl/binary/binary_utils.cpp \ + src/impl/binary/binary_reader_impl.cpp \ + src/impl/binary/binary_writer_impl.cpp \ + src/impl/binary/binary_schema.cpp \ + src/binary/binary_containers.cpp \ + src/binary/binary_raw_reader.cpp \ + src/binary/binary_raw_writer.cpp \ + src/binary/binary_reader.cpp \ + src/binary/binary_writer.cpp \ + src/impl/binary/binary_type_updater_impl.cpp \ src/impl/ignite_environment.cpp \ src/impl/cache/query/query_impl.cpp \ src/impl/cache/cache_impl.cpp \ http://git-wip-us.apache.org/repos/asf/ignite/blob/303d79eb/modules/platforms/cpp/core/include/Makefile.am ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/core/include/Makefile.am b/modules/platforms/cpp/core/include/Makefile.am index 186e867..1e7bf7d 100644 --- a/modules/platforms/cpp/core/include/Makefile.am +++ b/modules/platforms/cpp/core/include/Makefile.am @@ -36,29 +36,29 @@ nobase_include_HEADERS = ignite/cache/cache.h \ ignite/impl/interop/interop_input_stream.h \ ignite/impl/interop/interop_memory.h \ ignite/impl/interop/interop_output_stream.h \ - ignite/impl/portable/portable_metadata_handler.h \ - ignite/impl/portable/portable_metadata_manager.h \ - ignite/impl/portable/portable_metadata_snapshot.h \ - ignite/impl/portable/portable_metadata_updater.h \ - ignite/impl/portable/portable_metadata_updater_impl.h \ - ignite/impl/portable/portable_common.h \ - ignite/impl/portable/portable_id_resolver.h \ - ignite/impl/portable/portable_reader_impl.h \ - ignite/impl/portable/portable_utils.h \ - ignite/impl/portable/portable_writer_impl.h \ - ignite/impl/portable/portable_schema.h \ + ignite/impl/binary/binary_type_handler.h \ + ignite/impl/binary/binary_type_manager.h \ + ignite/impl/binary/binary_type_snapshot.h \ + ignite/impl/binary/binary_type_updater.h \ + ignite/impl/binary/binary_type_updater_impl.h \ + ignite/impl/binary/binary_common.h \ + ignite/impl/binary/binary_id_resolver.h \ + ignite/impl/binary/binary_reader_impl.h \ + ignite/impl/binary/binary_utils.h \ + ignite/impl/binary/binary_writer_impl.h \ + ignite/impl/binary/binary_schema.h \ ignite/impl/ignite_environment.h \ ignite/impl/ignite_impl.h \ ignite/impl/handle_registry.h \ ignite/impl/operations.h \ - ignite/portable/portable.h \ - ignite/portable/portable_consts.h \ - ignite/portable/portable_containers.h \ - ignite/portable/portable_type.h \ - ignite/portable/portable_raw_reader.h \ - ignite/portable/portable_raw_writer.h \ - ignite/portable/portable_reader.h \ - ignite/portable/portable_writer.h \ + ignite/binary/binary.h \ + ignite/binary/binary_consts.h \ + ignite/binary/binary_containers.h \ + ignite/binary/binary_type.h \ + ignite/binary/binary_raw_reader.h \ + ignite/binary/binary_raw_writer.h \ + ignite/binary/binary_reader.h \ + ignite/binary/binary_writer.h \ ignite/ignite.h \ ignite/ignite_configuration.h \ ignite/ignite_error.h \ http://git-wip-us.apache.org/repos/asf/ignite/blob/303d79eb/modules/platforms/cpp/core/include/ignite/binary/binary.h ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/core/include/ignite/binary/binary.h b/modules/platforms/cpp/core/include/ignite/binary/binary.h new file mode 100644 index 0000000..15476fe --- /dev/null +++ b/modules/platforms/cpp/core/include/ignite/binary/binary.h @@ -0,0 +1,29 @@ +/* + * 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. + */ + +#ifndef _IGNITE_BINARY +#define _IGNITE_BINARY + +#include "ignite/binary/binary_consts.h" +#include "ignite/binary/binary_containers.h" +#include "ignite/binary/binary_type.h" +#include "ignite/binary/binary_raw_reader.h" +#include "ignite/binary/binary_raw_writer.h" +#include "ignite/binary/binary_reader.h" +#include "ignite/binary/binary_writer.h" + +#endif \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/303d79eb/modules/platforms/cpp/core/include/ignite/binary/binary_consts.h ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/core/include/ignite/binary/binary_consts.h b/modules/platforms/cpp/core/include/ignite/binary/binary_consts.h new file mode 100644 index 0000000..68ed9f9 --- /dev/null +++ b/modules/platforms/cpp/core/include/ignite/binary/binary_consts.h @@ -0,0 +1,106 @@ +/* + * 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. + */ + +#ifndef _IGNITE_BINARY_CONSTS +#define _IGNITE_BINARY_CONSTS + +#include <ignite/common/common.h> + +namespace ignite +{ + namespace binary + { + /** + * Binary collection types. + */ + enum CollectionType + { + /** + * Undefined. Maps to ArrayList in Java. + */ + IGNITE_COLLECTION_UNDEFINED = 0, + + /** + * Array list. Maps to ArrayList in Java. + */ + IGNITE_COLLECTION_ARRAY_LIST = 1, + + /** + * Linked list. Maps to LinkedList in Java. + */ + IGNITE_COLLECTION_LINKED_LIST = 2, + + /** + * Hash set. Maps to HashSet in Java. + */ + IGNITE_COLLECTION_HASH_SET = 3, + + /** + * Linked hash set. Maps to LinkedHashSet in Java. + */ + IGNITE_COLLECTION_LINKED_HASH_SET = 4, + + /** + * Tree set. Maps to TreeSet in Java. + */ + IGNITE_COLLECTION_TREE_SET = 5, + + /** + * Concurrent skip list set. Maps to ConcurrentSkipListSet in Java. + */ + IGNITE_COLLECTION_CONCURRENT_SKIP_LIST_SET = 6 + }; + + /** + * Binary map types. + */ + enum MapType + { + /** + * Undefined. Maps to HashMap in Java. + */ + IGNITE_MAP_UNDEFINED = 0, + + /** + * Hash map. Maps to HashMap in Java. + */ + IGNITE_MAP_HASH_MAP = 1, + + /** + * Linked hash map. Maps to LinkedHashMap in Java. + */ + IGNITE_MAP_LINKED_HASH_MAP = 2, + + /** + * Tree map. Maps to TreeMap in Java. + */ + IGNITE_MAP_TREE_MAP = 3, + + /** + * Concurrent hash map. Maps to ConcurrentHashMap in Java. + */ + IGNITE_MAP_CONCURRENT_HASH_MAP = 4, + + /** + * Properties map. Maps to Properties in Java. + */ + IGNITE_MAP_PROPERTIES_MAP = 5 + }; + } +} + +#endif \ No newline at end of file