You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2016/06/28 09:37:05 UTC
ignite git commit: IGNITE-3140: CPP: Added tests for string format
validity.
Repository: ignite
Updated Branches:
refs/heads/master 34fc31e87 -> cbb77c9ad
IGNITE-3140: CPP: Added tests for string format validity.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/cbb77c9a
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/cbb77c9a
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/cbb77c9a
Branch: refs/heads/master
Commit: cbb77c9ad860bc8675077b09410e6e344f36bbb4
Parents: 34fc31e
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Tue Jun 28 12:36:56 2016 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Tue Jun 28 12:36:56 2016 +0300
----------------------------------------------------------------------
modules/platforms/cpp/core-test/Makefile.am | 1 +
.../cpp/core-test/project/vs/core-test.vcxproj | 1 +
.../project/vs/core-test.vcxproj.filters | 3 +
.../cpp/core-test/src/interop_test.cpp | 148 +++++++++++++++++++
4 files changed, 153 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/cbb77c9a/modules/platforms/cpp/core-test/Makefile.am
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core-test/Makefile.am b/modules/platforms/cpp/core-test/Makefile.am
index d1f4ca5..759be13 100644
--- a/modules/platforms/cpp/core-test/Makefile.am
+++ b/modules/platforms/cpp/core-test/Makefile.am
@@ -52,6 +52,7 @@ ignite_tests_SOURCES = \
src/concurrent_test.cpp \
src/ignition_test.cpp \
src/interop_memory_test.cpp \
+ src/interop_test.cpp \
src/handle_registry_test.cpp \
src/ignite_error_test.cpp \
src/binary_test_defs.cpp \
http://git-wip-us.apache.org/repos/asf/ignite/blob/cbb77c9a/modules/platforms/cpp/core-test/project/vs/core-test.vcxproj
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core-test/project/vs/core-test.vcxproj b/modules/platforms/cpp/core-test/project/vs/core-test.vcxproj
index edf87ba..a7ffad8 100644
--- a/modules/platforms/cpp/core-test/project/vs/core-test.vcxproj
+++ b/modules/platforms/cpp/core-test/project/vs/core-test.vcxproj
@@ -45,6 +45,7 @@
<ClCompile Include="..\..\src\binary_test_defs.cpp" />
<ClCompile Include="..\..\src\cache_query_test.cpp" />
<ClCompile Include="..\..\src\interop_memory_test.cpp" />
+ <ClCompile Include="..\..\src\interop_test.cpp" />
<ClCompile Include="..\..\src\teamcity_boost.cpp" />
<ClCompile Include="..\..\src\teamcity_messages.cpp" />
<ClCompile Include="..\..\src\transactions_test.cpp" />
http://git-wip-us.apache.org/repos/asf/ignite/blob/cbb77c9a/modules/platforms/cpp/core-test/project/vs/core-test.vcxproj.filters
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core-test/project/vs/core-test.vcxproj.filters b/modules/platforms/cpp/core-test/project/vs/core-test.vcxproj.filters
index 2259f4c..39e2aee 100644
--- a/modules/platforms/cpp/core-test/project/vs/core-test.vcxproj.filters
+++ b/modules/platforms/cpp/core-test/project/vs/core-test.vcxproj.filters
@@ -43,6 +43,9 @@
<ClCompile Include="..\..\src\transactions_test.cpp">
<Filter>Code</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\interop_test.cpp">
+ <Filter>Code</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\include\teamcity_messages.h">
http://git-wip-us.apache.org/repos/asf/ignite/blob/cbb77c9a/modules/platforms/cpp/core-test/src/interop_test.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core-test/src/interop_test.cpp b/modules/platforms/cpp/core-test/src/interop_test.cpp
new file mode 100644
index 0000000..4b079d9
--- /dev/null
+++ b/modules/platforms/cpp/core-test/src/interop_test.cpp
@@ -0,0 +1,148 @@
+/*
+ * 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/ignition.h"
+
+using namespace ignite;
+using namespace cache;
+using namespace boost::unit_test;
+
+void InitConfig(IgniteConfiguration& cfg)
+{
+ cfg.jvmOpts.push_back("-Xdebug");
+ cfg.jvmOpts.push_back("-Xnoagent");
+ cfg.jvmOpts.push_back("-Djava.compiler=NONE");
+ cfg.jvmOpts.push_back("-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005");
+ cfg.jvmOpts.push_back("-XX:+HeapDumpOnOutOfMemoryError");
+
+#ifdef IGNITE_TESTS_32
+ cfg.jvmInitMem = 256;
+ cfg.jvmMaxMem = 768;
+#else
+ cfg.jvmInitMem = 1024;
+ cfg.jvmMaxMem = 4096;
+#endif
+
+ char* cfgPath = getenv("IGNITE_NATIVE_TEST_CPP_CONFIG_PATH");
+
+ cfg.springCfgPath = std::string(cfgPath).append("/").append("cache-test.xml");
+}
+
+BOOST_AUTO_TEST_SUITE(InteropTestSuite)
+
+#ifdef ENABLE_STRING_SERIALIZATION_VER_2_TESTS
+
+BOOST_AUTO_TEST_CASE(StringUtfInvalidSequence)
+{
+ IgniteConfiguration cfg;
+
+ InitConfig(cfg);
+
+ Ignite ignite = Ignition::Start(cfg);
+
+ Cache<std::string, std::string> cache = ignite.CreateCache<std::string, std::string>("Test");
+
+ std::string initialValue;
+
+ initialValue.push_back(static_cast<unsigned char>(0xD8));
+ initialValue.push_back(static_cast<unsigned char>(0x00));
+
+ try
+ {
+ cache.Put("key", initialValue);
+
+ std::string cachedValue = cache.Get("key");
+
+ BOOST_ERROR("Exception is expected due to invalid format.");
+ }
+ catch (const IgniteError&)
+ {
+ // Expected in this mode.
+ }
+
+ Ignition::StopAll(false);
+}
+
+BOOST_AUTO_TEST_CASE(StringUtfInvalidCodePoint)
+{
+ IgniteConfiguration cfg;
+
+ InitConfig(cfg);
+
+ putenv("IGNITE_BINARY_MARSHALLER_USE_STRING_SERIALIZATION_VER_2=true");
+
+ Ignite ignite = Ignition::Start(cfg);
+
+ Cache<std::string, std::string> cache = ignite.CreateCache<std::string, std::string>("Test");
+
+ std::string initialValue;
+
+ // 1110xxxx 10xxxxxx 10xxxxxx |
+ // <= 11011000 00000000 | U+D8
+ // = 11101101 10100000 10000000 | ED A0 80
+ initialValue.push_back(static_cast<unsigned char>(0xED));
+ initialValue.push_back(static_cast<unsigned char>(0xA0));
+ initialValue.push_back(static_cast<unsigned char>(0x80));
+
+ cache.Put("key", initialValue);
+ std::string cachedValue = cache.Get("key");
+
+ // This is a valid case. Invalid code points are supported in this mode.
+ BOOST_CHECK_EQUAL(initialValue, cachedValue);
+
+ Ignition::StopAll(false);
+}
+
+#endif
+
+BOOST_AUTO_TEST_CASE(StringUtfValid4ByteCodePoint)
+{
+ IgniteConfiguration cfg;
+
+ InitConfig(cfg);
+
+ Ignite ignite = Ignition::Start(cfg);
+
+ Cache<std::string, std::string> cache = ignite.CreateCache<std::string, std::string>("Test");
+
+ std::string initialValue;
+
+ // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
+ // <= 00001 00000001 01001011 | U+1014B
+ // <= 000 010000 000101 001011 | U+1014B
+ // = 11110000 10010000 10000101 10001011 | F0 90 85 8B
+ initialValue.push_back(static_cast<unsigned char>(0xF0));
+ initialValue.push_back(static_cast<unsigned char>(0x90));
+ initialValue.push_back(static_cast<unsigned char>(0x85));
+ initialValue.push_back(static_cast<unsigned char>(0x8B));
+
+ cache.Put("key", initialValue);
+ std::string cachedValue = cache.Get("key");
+
+ // This is a valid UTF-8 code point. Should be supported in default mode.
+ BOOST_CHECK_EQUAL(initialValue, cachedValue);
+
+ Ignition::StopAll(false);
+}
+
+BOOST_AUTO_TEST_SUITE_END()