This is an automated email from the ASF dual-hosted git repository. isapego pushed a commit to branch ignite-17424 in repository https://gitbox.apache.org/repos/asf/ignite-3.git
commit 2e76d35c09343e7a192909a8ea76adb076902673 Author: Igor Sapego <[email protected]> AuthorDate: Mon Aug 29 11:21:39 2022 +0400 IGNITE-17424 Basic test utils --- modules/platforms/cpp/CMakeLists.txt | 10 ++- modules/platforms/cpp/test-common/CMakeLists.txt | 3 +- .../cpp/test-common/include/ignite_node.h | 50 +++++++++++++ .../platforms/cpp/test-common/include/test_utils.h | 36 ++++++++++ .../platforms/cpp/test-common/src/ignite_node.cpp | 37 ++++++++++ .../platforms/cpp/test-common/src/test_utils.cpp | 83 ++++++++++++++++++++++ 6 files changed, 217 insertions(+), 2 deletions(-) diff --git a/modules/platforms/cpp/CMakeLists.txt b/modules/platforms/cpp/CMakeLists.txt index 436c8e847e..54fc4ed113 100644 --- a/modules/platforms/cpp/CMakeLists.txt +++ b/modules/platforms/cpp/CMakeLists.txt @@ -26,7 +26,15 @@ set(CMAKE_PROJECT_VERSION ${PROJECT_VERSION}) include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) conan_basic_setup() -#include(GNUInstallDirs) +if (UNIX) + include(GNUInstallDirs) +endif() + +if (MSVC) + add_compile_options(/source-charset:utf-8 /execution-charset:utf-8) + add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS) +endif() + set(INSTALL_INCLUDEDIR ${CMAKE_INSTALL_INCLUDEDIR}/ignite) option(ENABLE_ADDRESS_SANITIZER "If address sanitizer is enabled" OFF) diff --git a/modules/platforms/cpp/test-common/CMakeLists.txt b/modules/platforms/cpp/test-common/CMakeLists.txt index eb186ba9ca..396ee4ed72 100644 --- a/modules/platforms/cpp/test-common/CMakeLists.txt +++ b/modules/platforms/cpp/test-common/CMakeLists.txt @@ -23,7 +23,8 @@ set(TARGET ${PROJECT_NAME}) include_directories(include) set(SOURCES - src/test_utils.cpp + src/ignite_node.cpp + src/test_utils.cpp ) add_library(${TARGET} OBJECT ${SOURCES}) diff --git a/modules/platforms/cpp/test-common/include/ignite_node.h b/modules/platforms/cpp/test-common/include/ignite_node.h new file mode 100644 index 0000000000..ad0a889336 --- /dev/null +++ b/modules/platforms/cpp/test-common/include/ignite_node.h @@ -0,0 +1,50 @@ +/* + * 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. + */ + +#pragma once + +#include <cstdio> + +namespace ignite +{ + class IgniteNode + { + public: + /** + * Constructor. + */ + IgniteNode() = default; + + /** + * Destructor. + */ + ~IgniteNode() = default; + + /** + * Start node. + */ + void start(); + + /** + * Stop node. + */ + void stop(); + + private: + FILE* file; + }; +} // namespace ignite \ No newline at end of file diff --git a/modules/platforms/cpp/test-common/include/test_utils.h b/modules/platforms/cpp/test-common/include/test_utils.h index e69de29bb2..8905bdbc65 100644 --- a/modules/platforms/cpp/test-common/include/test_utils.h +++ b/modules/platforms/cpp/test-common/include/test_utils.h @@ -0,0 +1,36 @@ +/* + * 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. + */ + +#pragma once + +#include <string> + +namespace ignite +{ + /** + * Resolve IGNITE_HOME directory. Resolution is performed in several steps: + * 1) Check for path provided as argument. + * 2) Check for environment variable. + * 3) Check for current working directory. + * Result of these checks are evaluated based on existence of certain predefined folders inside possible Ignite + * home. If they are found, IGNITE_HOME is considered resolved. + * + * @param path Optional path to check. + * @return Resolved Ignite home. + */ + std::string resolveIgniteHome(const std::string& path = ""); +} // namespace ignite \ No newline at end of file diff --git a/modules/platforms/cpp/test-common/src/ignite_node.cpp b/modules/platforms/cpp/test-common/src/ignite_node.cpp new file mode 100644 index 0000000000..2c2863c122 --- /dev/null +++ b/modules/platforms/cpp/test-common/src/ignite_node.cpp @@ -0,0 +1,37 @@ +/* + * 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 <iostream> +#include <memory> +#include <stdexcept> +#include <string> +#include <array> + +#include "ignite_node.h" + +namespace ignite +{ + void IgniteNode::start() + { + + } + + void IgniteNode::stop() + { + + } +} // namespace ignite \ No newline at end of file diff --git a/modules/platforms/cpp/test-common/src/test_utils.cpp b/modules/platforms/cpp/test-common/src/test_utils.cpp index e69de29bb2..3ca15df6d5 100644 --- a/modules/platforms/cpp/test-common/src/test_utils.cpp +++ b/modules/platforms/cpp/test-common/src/test_utils.cpp @@ -0,0 +1,83 @@ +/* + * 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 <filesystem> +#include <functional> + +#include "test_utils.h" + +namespace ignite +{ + + /** + * Checks if the path looks like binary release home directory. + * Internally checks for presence of core library. + * @return @c true if the path looks like binary release home directory. + */ + bool looksLikeBinaryReleaseHome(const std::filesystem::path& path) + { + std::filesystem::path coreLibPath = path / "libs"; + if (!is_directory(coreLibPath)) + return false; + + auto iter = std::filesystem::directory_iterator{coreLibPath}; + return std::any_of(iter, std::filesystem::end(iter), [](auto entry) { + const std::filesystem::path& entryPath = entry.path(); + if (entryPath.extension() != "jar") + return false; + + std::string stem = entryPath.stem().string(); + return stem.find("ignite-core") == 0; + }); + } + + /** + * Checks if the path looks like source release home directory. + * Internally checks for presence of core source directory. + * @return @c true if the path looks like binary release home directory. + */ + bool looksLikeSourceReleaseHome(const std::filesystem::path& path) + { + std::filesystem::path coreSourcePath = + path / "modules" / "core" / "src" / "main" / "java" / "org" / "apache" / "ignite"; + + return std::filesystem::is_directory(coreSourcePath); + } + + std::string resolveIgniteHome(const std::string& path) + { + std::error_code error; + + std::filesystem::path home = std::filesystem::canonical(path, error); + if (!error && std::filesystem::is_directory(path)) + return home.string(); + + home = std::filesystem::canonical(std::getenv("IGNITE_HOME"), error); + if (!error && std::filesystem::is_directory(home)) + return home.string(); + + home = std::filesystem::current_path(); + while (!home.empty() && home.has_relative_path()) + { + if (looksLikeBinaryReleaseHome(home) || looksLikeSourceReleaseHome(home)) + return home.string(); + + home = home.parent_path(); + } + return home.string(); + } +} // namespace ignite \ No newline at end of file
