IGNITE-2242: Added tests for Column. Fixed found issues.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/895901af Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/895901af Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/895901af Branch: refs/heads/ignite-1786 Commit: 895901af259652bb0c9a6c61eeaec93ba7435977 Parents: c4df7fc Author: isapego <[email protected]> Authored: Wed Jan 20 18:04:47 2016 +0300 Committer: isapego <[email protected]> Committed: Wed Jan 20 18:04:47 2016 +0300 ---------------------------------------------------------------------- .../cpp/odbc/odbc-driver/src/column.cpp | 2 +- .../odbc/odbc-test/project/vs/odbc-test.vcxproj | 1 + .../project/vs/odbc-test.vcxproj.filters | 3 + .../cpp/odbc/odbc-test/src/column_test.cpp | 290 +++++++++++++++++++ .../cpp/odbc/odbc-test/src/row_test.cpp | 21 -- 5 files changed, 295 insertions(+), 22 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/895901af/modules/platforms/cpp/odbc/odbc-driver/src/column.cpp ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/odbc/odbc-driver/src/column.cpp b/modules/platforms/cpp/odbc/odbc-driver/src/column.cpp index 76cae95..27c413a 100644 --- a/modules/platforms/cpp/odbc/odbc-driver/src/column.cpp +++ b/modules/platforms/cpp/odbc/odbc-driver/src/column.cpp @@ -375,7 +375,7 @@ namespace ignite dataBuf.PutString(str.substr(offset)); - IncreaseOffset(static_cast<int32_t>(dataBuf.GetSize())); + IncreaseOffset(static_cast<int32_t>(dataBuf.GetSize() - 1)); break; } http://git-wip-us.apache.org/repos/asf/ignite/blob/895901af/modules/platforms/cpp/odbc/odbc-test/project/vs/odbc-test.vcxproj ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/odbc/odbc-test/project/vs/odbc-test.vcxproj b/modules/platforms/cpp/odbc/odbc-test/project/vs/odbc-test.vcxproj index 5e5d636..a6a2ae3 100644 --- a/modules/platforms/cpp/odbc/odbc-test/project/vs/odbc-test.vcxproj +++ b/modules/platforms/cpp/odbc/odbc-test/project/vs/odbc-test.vcxproj @@ -162,6 +162,7 @@ <ClCompile Include="..\..\..\odbc-driver\src\row.cpp" /> <ClCompile Include="..\..\..\odbc-driver\src\utility.cpp" /> <ClCompile Include="..\..\src\application_data_buffer_test.cpp" /> + <ClCompile Include="..\..\src\column_test.cpp" /> <ClCompile Include="..\..\src\configuration_test.cpp" /> <ClCompile Include="..\..\src\connection_info_test.cpp" /> <ClCompile Include="..\..\src\cursor_test.cpp" /> http://git-wip-us.apache.org/repos/asf/ignite/blob/895901af/modules/platforms/cpp/odbc/odbc-test/project/vs/odbc-test.vcxproj.filters ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/odbc/odbc-test/project/vs/odbc-test.vcxproj.filters b/modules/platforms/cpp/odbc/odbc-test/project/vs/odbc-test.vcxproj.filters index 7daaf03..cf44ba9 100644 --- a/modules/platforms/cpp/odbc/odbc-test/project/vs/odbc-test.vcxproj.filters +++ b/modules/platforms/cpp/odbc/odbc-test/project/vs/odbc-test.vcxproj.filters @@ -67,6 +67,9 @@ <ClCompile Include="..\..\..\odbc-driver\src\column.cpp"> <Filter>Externals</Filter> </ClCompile> + <ClCompile Include="..\..\src\column_test.cpp"> + <Filter>Code</Filter> + </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="..\..\include\teamcity_messages.h"> http://git-wip-us.apache.org/repos/asf/ignite/blob/895901af/modules/platforms/cpp/odbc/odbc-test/src/column_test.cpp ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/odbc/odbc-test/src/column_test.cpp b/modules/platforms/cpp/odbc/odbc-test/src/column_test.cpp new file mode 100644 index 0000000..4864a6a --- /dev/null +++ b/modules/platforms/cpp/odbc/odbc-test/src/column_test.cpp @@ -0,0 +1,290 @@ +/* + * 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/binary/binary_common.h> +#include <ignite/impl/binary/binary_writer_impl.h> + +#include "ignite/odbc/system/odbc_constants.h" +#include "ignite/odbc/column.h" + +using namespace ignite::impl::binary; +using namespace ignite::odbc::app; +using namespace ignite::odbc; + +BOOST_AUTO_TEST_SUITE(ColumnTestSuite) + +BOOST_AUTO_TEST_CASE(TestColumnDefaultConstruction) +{ + Column column; + + BOOST_REQUIRE(!column.IsValid()); +} + +BOOST_AUTO_TEST_CASE(TestColumnShort) +{ + ignite::impl::interop::InteropUnpooledMemory mem(4096); + ignite::impl::interop::InteropOutputStream outStream(&mem); + ignite::impl::binary::BinaryWriterImpl writer(&outStream, 0); + + int16_t data = 42; + + writer.WriteInt8(IGNITE_TYPE_SHORT); + writer.WriteInt16(data); + + outStream.Synchronize(); + + ignite::impl::interop::InteropInputStream inStream(&mem); + ignite::impl::binary::BinaryReaderImpl reader(&inStream); + + Column column(reader); + + BOOST_REQUIRE(column.IsValid()); + + BOOST_REQUIRE(column.GetSize() == 2); + + BOOST_REQUIRE(column.GetUnreadDataLength() == 2); + + short shortBuf = 0; + SqlLen reslen = 0; + size_t* offset = 0; + + ApplicationDataBuffer appBuf(type_traits::IGNITE_ODBC_C_TYPE_SIGNED_SHORT, &shortBuf, sizeof(shortBuf), &reslen, &offset); + + BOOST_REQUIRE(column.ReadToBuffer(reader, appBuf) == SQL_RESULT_SUCCESS); + + BOOST_REQUIRE(column.IsValid()); + + BOOST_REQUIRE(column.GetSize() == 2); + + BOOST_REQUIRE(column.GetUnreadDataLength() == 0); + + BOOST_REQUIRE(shortBuf == data); + + BOOST_REQUIRE(column.ReadToBuffer(reader, appBuf) == SQL_RESULT_NO_DATA); + + BOOST_REQUIRE(column.IsValid()); + + BOOST_REQUIRE(column.GetSize() == 2); + + BOOST_REQUIRE(column.GetUnreadDataLength() == 0); +} + +BOOST_AUTO_TEST_CASE(TestColumnString) +{ + ignite::impl::interop::InteropUnpooledMemory mem(4096); + ignite::impl::interop::InteropOutputStream outStream(&mem); + ignite::impl::binary::BinaryWriterImpl writer(&outStream, 0); + + std::string data("Some test data."); + + writer.WriteString(data.data(), static_cast<int32_t>(data.size())); + + outStream.Synchronize(); + + ignite::impl::interop::InteropInputStream inStream(&mem); + ignite::impl::binary::BinaryReaderImpl reader(&inStream); + + Column column(reader); + + BOOST_REQUIRE(column.IsValid()); + + BOOST_REQUIRE(column.GetSize() == data.size()); + + BOOST_REQUIRE(column.GetUnreadDataLength() == data.size()); + + char strBuf[1024] = {}; + SqlLen reslen = 0; + size_t* offset = 0; + + ApplicationDataBuffer appBuf(type_traits::IGNITE_ODBC_C_TYPE_CHAR, &strBuf, sizeof(strBuf), &reslen, &offset); + + BOOST_REQUIRE(column.ReadToBuffer(reader, appBuf) == SQL_RESULT_SUCCESS); + + BOOST_REQUIRE(column.IsValid()); + + BOOST_REQUIRE(column.GetSize() == data.size()); + + BOOST_REQUIRE(column.GetUnreadDataLength() == 0); + + BOOST_REQUIRE(std::string(strBuf) == data); + + BOOST_REQUIRE(column.ReadToBuffer(reader, appBuf) == SQL_RESULT_NO_DATA); + + BOOST_REQUIRE(column.IsValid()); + + BOOST_REQUIRE(column.GetSize() == data.size()); + + BOOST_REQUIRE(column.GetUnreadDataLength() == 0); +} + +BOOST_AUTO_TEST_CASE(TestColumnStringSeveral) +{ + ignite::impl::interop::InteropUnpooledMemory mem(4096); + ignite::impl::interop::InteropOutputStream outStream(&mem); + ignite::impl::binary::BinaryWriterImpl writer(&outStream, 0); + + std::string data("Lorem ipsum dolor sit amet, consectetur adipiscing elit."); + + writer.WriteString(data.data(), static_cast<int32_t>(data.size())); + + outStream.Synchronize(); + + ignite::impl::interop::InteropInputStream inStream(&mem); + ignite::impl::binary::BinaryReaderImpl reader(&inStream); + + Column column(reader); + + BOOST_REQUIRE(column.IsValid()); + + BOOST_REQUIRE(column.GetSize() == data.size()); + + BOOST_REQUIRE(column.GetUnreadDataLength() == data.size()); + + std::string res; + + std::string strBuf(data.size() / 3 + 2, 0); + SqlLen reslen = 0; + size_t* offset = 0; + + ApplicationDataBuffer appBuf(type_traits::IGNITE_ODBC_C_TYPE_CHAR, &strBuf[0], strBuf.size(), &reslen, &offset); + + BOOST_REQUIRE(column.ReadToBuffer(reader, appBuf) == SQL_RESULT_SUCCESS); + + BOOST_REQUIRE(column.IsValid()); + + BOOST_REQUIRE(column.GetSize() == data.size()); + + BOOST_REQUIRE(column.GetUnreadDataLength() == data.size() - (strBuf.size() - 1)); + + res.append(strBuf.c_str()); + + BOOST_REQUIRE(column.ReadToBuffer(reader, appBuf) == SQL_RESULT_SUCCESS); + + BOOST_REQUIRE(column.IsValid()); + + BOOST_REQUIRE(column.GetSize() == data.size()); + + BOOST_REQUIRE(column.GetUnreadDataLength() == data.size() - 2 * (strBuf.size() - 1)); + + res.append(strBuf.c_str()); + + BOOST_REQUIRE(column.ReadToBuffer(reader, appBuf) == SQL_RESULT_SUCCESS); + + BOOST_REQUIRE(column.IsValid()); + + BOOST_REQUIRE(column.GetSize() == data.size()); + + BOOST_REQUIRE(column.GetUnreadDataLength() == 0); + + res.append(strBuf.c_str()); + + BOOST_REQUIRE(column.ReadToBuffer(reader, appBuf) == SQL_RESULT_NO_DATA); + + BOOST_REQUIRE(column.IsValid()); + + BOOST_REQUIRE(column.GetSize() == data.size()); + + BOOST_REQUIRE(column.GetUnreadDataLength() == 0); + + BOOST_REQUIRE(res == data); +} + +BOOST_AUTO_TEST_CASE(TestColumnMultiString) +{ + ignite::impl::interop::InteropUnpooledMemory mem(4096); + ignite::impl::interop::InteropOutputStream outStream(&mem); + ignite::impl::binary::BinaryWriterImpl writer(&outStream, 0); + + std::string data1("Some test data."); + std::string data2("Other TEST DATA."); + + writer.WriteString(data1.data(), static_cast<int32_t>(data1.size())); + writer.WriteString(data2.data(), static_cast<int32_t>(data2.size())); + + outStream.Synchronize(); + + ignite::impl::interop::InteropInputStream inStream(&mem); + ignite::impl::binary::BinaryReaderImpl reader(&inStream); + + Column column1(reader); + + inStream.Position(column1.GetEndPosition()); + + Column column2(reader); + + BOOST_REQUIRE(column1.IsValid()); + + BOOST_REQUIRE(column1.GetSize() == data1.size()); + + BOOST_REQUIRE(column1.GetUnreadDataLength() == data1.size()); + + BOOST_REQUIRE(column2.IsValid()); + + BOOST_REQUIRE(column2.GetSize() == data2.size()); + + BOOST_REQUIRE(column2.GetUnreadDataLength() == data2.size()); + + char strBuf[1024] = {}; + SqlLen reslen = 0; + size_t* offset = 0; + + ApplicationDataBuffer appBuf(type_traits::IGNITE_ODBC_C_TYPE_CHAR, &strBuf, sizeof(strBuf), &reslen, &offset); + + BOOST_REQUIRE(column1.ReadToBuffer(reader, appBuf) == SQL_RESULT_SUCCESS); + + BOOST_REQUIRE(column1.IsValid()); + + BOOST_REQUIRE(column1.GetSize() == data1.size()); + + BOOST_REQUIRE(column1.GetUnreadDataLength() == 0); + + BOOST_REQUIRE(std::string(strBuf) == data1); + + BOOST_REQUIRE(column1.ReadToBuffer(reader, appBuf) == SQL_RESULT_NO_DATA); + + BOOST_REQUIRE(column1.IsValid()); + + BOOST_REQUIRE(column1.GetSize() == data1.size()); + + BOOST_REQUIRE(column1.GetUnreadDataLength() == 0); + + BOOST_REQUIRE(column2.ReadToBuffer(reader, appBuf) == SQL_RESULT_SUCCESS); + + BOOST_REQUIRE(column2.IsValid()); + + BOOST_REQUIRE(column2.GetSize() == data2.size()); + + BOOST_REQUIRE(column2.GetUnreadDataLength() == 0); + + BOOST_REQUIRE(std::string(strBuf) == data2); + + BOOST_REQUIRE(column2.ReadToBuffer(reader, appBuf) == SQL_RESULT_NO_DATA); + + BOOST_REQUIRE(column2.IsValid()); + + BOOST_REQUIRE(column2.GetSize() == data2.size()); + + BOOST_REQUIRE(column2.GetUnreadDataLength() == 0); +} + +BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/895901af/modules/platforms/cpp/odbc/odbc-test/src/row_test.cpp ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/odbc/odbc-test/src/row_test.cpp b/modules/platforms/cpp/odbc/odbc-test/src/row_test.cpp index 86e5203..e655cf7 100644 --- a/modules/platforms/cpp/odbc/odbc-test/src/row_test.cpp +++ b/modules/platforms/cpp/odbc/odbc-test/src/row_test.cpp @@ -144,27 +144,6 @@ BOOST_AUTO_TEST_CASE(TestRowMoveToNext) } } -//BOOST_AUTO_TEST_CASE(TestRowSkip) -//{ -// ignite::impl::interop::InteropUnpooledMemory mem(4096); -// -// const size_t rowNum = 8; -// -// FillMemWithData(mem, rowNum); -// -// Row row(mem); -// -// for (size_t i = 0; i < rowNum - 1; ++i) -// { -// BOOST_REQUIRE(row.GetSize() == 4); -// -// for (int32_t j = 0; j < row.GetSize(); ++j) -// BOOST_REQUIRE(row.SkipColumn()); -// -// BOOST_REQUIRE(row.MoveToNext()); -// } -//} - BOOST_AUTO_TEST_CASE(TestRowRead) { ignite::impl::interop::InteropUnpooledMemory mem(4096);
