blob: 7f9068a4a7b707017bdbaa2d1032d702625fc4b4 [file] [log] [blame]
/*
* 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_THIN_CLIENT_TEST_TEST_UTILS
#define _IGNITE_THIN_CLIENT_TEST_TEST_UTILS
#include <string>
#include <boost/chrono.hpp>
#include <boost/thread.hpp>
#include <ignite/ignition.h>
#define MUTE_TEST_FOR_TEAMCITY \
if (jetbrains::teamcity::underTeamcity()) \
{ \
BOOST_TEST_MESSAGE("Muted on TeamCity because of periodical non-critical failures"); \
BOOST_CHECK(jetbrains::teamcity::underTeamcity()); \
return; \
}
namespace ignite_test
{
/**
* @return Test config directory path.
*/
std::string GetTestConfigDir();
/**
* Initialize configuration for a node.
*
* Inits Ignite node configuration from specified config file.
* Config file is searched in path specified by IGNITE_NATIVE_TEST_CPP_THIN_CONFIG_PATH
* environmental variable.
*
* @param cfg Ignite config.
* @param cfgFile Ignite node config file name without path.
*/
void InitConfig(ignite::IgniteConfiguration& cfg, const char* cfgFile);
/**
* Start Ignite node.
*
* Starts new Ignite node with the specified name and from specified config file.
* Config file is searched in path specified by IGNITE_NATIVE_TEST_CPP_THIN_CONFIG_PATH
* environmental variable.
*
* @param cfgFile Ignite node config file name without path.
* @param name Node name.
* @return New node.
*/
ignite::Ignite StartServerNode(const char* cfgFile, const char* name);
/**
* Start Ignite node with config path corrected for specific platform.
*
* @param cfgFile Ignite node config file name without path.
* @param name Node name.
* @return New node.
*/
ignite::Ignite StartCrossPlatformServerNode(const char* cfgFile, const char* name);
/**
* Remove all the LFS artifacts.
*/
void ClearLfs();
/**
* Get a number of occurrences of a given string in the specified file.
* @param filePath File path.
* @param line Line to find.
* @return Number of occurrences.
*/
size_t GetLineOccurrencesInFile(const std::string& filePath, const std::string& line);
/**
* Wait for condition.
* @tparam T Type of condition function.
* @param func Function that should check for condition and return true once it's performed.
* @param timeout Timeout to wait.
* @return True if condition was met, false if timeout has been reached.
*/
template<typename F>
bool WaitForCondition(F func, int32_t timeout)
{
using namespace boost::chrono;
const int32_t span = 200;
steady_clock::time_point begin = steady_clock::now();
while (!func())
{
boost::this_thread::sleep_for(milliseconds(span));
if (timeout && duration_cast<milliseconds>(steady_clock::now() - begin).count() >= timeout)
return func();
}
return true;
}
}
#endif // _IGNITE_THIN_CLIENT_TEST_TEST_UTILS