From 6d4727c714a8331496901b0a0a8e7cfe1554b3af Mon Sep 17 00:00:00 2001 From: Jeffrey Date: Sat, 5 Mar 2022 23:34:58 -0600 Subject: [PATCH] Remove contrib/epee/tests These tests appear to never have been used in Monero's lifetime and it would take a Herculean effort to refactor these files to the point where they will compile. At many points, these tests include headers which no longer exist in EPEE. --- contrib/epee/tests/.gitignore | 1 - .../tests/data/storages/invalid_storage_1.bin | Bin 109578 -> 0 bytes .../tests/data/storages/invalid_storage_2.bin | Bin 20 -> 0 bytes .../tests/data/storages/invalid_storage_3.bin | 1 - .../tests/data/storages/invalid_storage_4.bin | Bin 19 -> 0 bytes .../tests/data/storages/valid_storage.bin | Bin 180346 -> 0 bytes contrib/epee/tests/generate_vc_proj.bat | 5 - contrib/epee/tests/src/CMakeLists.txt | 40 -- contrib/epee/tests/src/misc/test_math.h | 82 ---- contrib/epee/tests/src/net/test_net.h | 408 ------------------ .../src/storages/portable_storages_test.h | 232 ---------- .../epee/tests/src/storages/storage_tests.h | 142 ------ contrib/epee/tests/src/tests.cpp | 59 --- 13 files changed, 970 deletions(-) delete mode 100644 contrib/epee/tests/.gitignore delete mode 100644 contrib/epee/tests/data/storages/invalid_storage_1.bin delete mode 100644 contrib/epee/tests/data/storages/invalid_storage_2.bin delete mode 100644 contrib/epee/tests/data/storages/invalid_storage_3.bin delete mode 100644 contrib/epee/tests/data/storages/invalid_storage_4.bin delete mode 100644 contrib/epee/tests/data/storages/valid_storage.bin delete mode 100644 contrib/epee/tests/generate_vc_proj.bat delete mode 100644 contrib/epee/tests/src/CMakeLists.txt delete mode 100644 contrib/epee/tests/src/misc/test_math.h delete mode 100644 contrib/epee/tests/src/net/test_net.h delete mode 100644 contrib/epee/tests/src/storages/portable_storages_test.h delete mode 100644 contrib/epee/tests/src/storages/storage_tests.h delete mode 100644 contrib/epee/tests/src/tests.cpp diff --git a/contrib/epee/tests/.gitignore b/contrib/epee/tests/.gitignore deleted file mode 100644 index d9b4f015d..000000000 --- a/contrib/epee/tests/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build/* diff --git a/contrib/epee/tests/data/storages/invalid_storage_1.bin b/contrib/epee/tests/data/storages/invalid_storage_1.bin deleted file mode 100644 index f64bef38e94ab66653b6745c739890be1c205a1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109578 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 WIVS-E1PBlyK!5;&I)P>Pg4GPNp-@c# diff --git a/contrib/epee/tests/data/storages/invalid_storage_2.bin b/contrib/epee/tests/data/storages/invalid_storage_2.bin deleted file mode 100644 index a8c29f155ab0634fedda8b5a8424f4611c6dbf1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20 bcmZ4F>HGPn-24tkMv2_`r2PCG1|}{5SEUB% diff --git a/contrib/epee/tests/data/storages/invalid_storage_3.bin b/contrib/epee/tests/data/storages/invalid_storage_3.bin deleted file mode 100644 index 4233bf25c..000000000 --- a/contrib/epee/tests/data/storages/invalid_storage_3.bin +++ /dev/null @@ -1 +0,0 @@ -¢IMóÙŸˆm_bo diff --git a/contrib/epee/tests/data/storages/invalid_storage_4.bin b/contrib/epee/tests/data/storages/invalid_storage_4.bin deleted file mode 100644 index 69017244a0c40392126275296fb10c470ca21fba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19 acmZ4F>HGPn-24tkMv2_`r2PCG1}*?l#Rld8 diff --git a/contrib/epee/tests/data/storages/valid_storage.bin b/contrib/epee/tests/data/storages/valid_storage.bin deleted file mode 100644 index 2af0abf50a7d628247762bcd5b8f2e4d06186fdf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180346 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 diff --git a/contrib/epee/tests/generate_vc_proj.bat b/contrib/epee/tests/generate_vc_proj.bat deleted file mode 100644 index 2b3fee953..000000000 --- a/contrib/epee/tests/generate_vc_proj.bat +++ /dev/null @@ -1,5 +0,0 @@ -mkdir build -cd build -cmake "-DBoost_USE_STATIC_LIBS=TRUE" -G "Visual Studio 11 Win64" ../src -cd .. -pause diff --git a/contrib/epee/tests/src/CMakeLists.txt b/contrib/epee/tests/src/CMakeLists.txt deleted file mode 100644 index e724b53f4..000000000 --- a/contrib/epee/tests/src/CMakeLists.txt +++ /dev/null @@ -1,40 +0,0 @@ - -cmake_minimum_required(VERSION 3.5) - -set(CMAKE_C_STANDARD 11) -set(CMAKE_C_STANDARD_REQUIRED ON) -set(CMAKE_C_EXTENSIONS OFF) -set(CMAKE_CXX_STANDARD 11) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_CXX_EXTENSIONS OFF) - -set(Boost_USE_MULTITHREADED ON) - -include_directories(.) -include_directories(../../include) - -find_package(Boost COMPONENTS system filesystem thread date_time chrono regex) -include_directories( ${Boost_INCLUDE_DIRS} ) - -IF (MSVC) - add_definitions( "/W3 /D_CRT_SECURE_NO_WARNINGS /wd4996 /wd4345 /nologo /D_WIN32_WINNT=0x0600 /DWIN32_LEAN_AND_MEAN /bigobj" ) - include_directories(SYSTEM platform/msvc) -ELSE() - # set stuff for other systems - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-reorder") -ENDIF() - - -# Add folders to filters -file(GLOB_RECURSE SRC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.inl - ${CMAKE_CURRENT_SOURCE_DIR}/*.h) - -source_group(general FILES ${SRC}) - - -add_executable(tests ${SRC} ) -target_link_libraries( tests ${Boost_LIBRARIES} ) - diff --git a/contrib/epee/tests/src/misc/test_math.h b/contrib/epee/tests/src/misc/test_math.h deleted file mode 100644 index 8b3064c2a..000000000 --- a/contrib/epee/tests/src/misc/test_math.h +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright (c) 2006-2013, Andrey N. Sabelnikov, www.sabelnikov.net -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// * Neither the name of the Andrey N. Sabelnikov nor the -// names of its contributors may be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// - - - -#pragma once - -#include "misc_language.h" - -namespace epee -{ - namespace tests - { - bool test_median() - { - LOG_PRINT_L0("Testing median"); - std::vector sz; - size_t m = misc_utils::median(sz); - CHECK_AND_ASSERT_MES(m == 0, false, "test failed"); - sz.push_back(1); - m = misc_utils::median(sz); - CHECK_AND_ASSERT_MES(m == 1, false, "test failed"); - sz.push_back(10); - m = misc_utils::median(sz); - CHECK_AND_ASSERT_MES(m == 5, false, "test failed"); - - sz.clear(); - sz.resize(3); - sz[0] = 0; - sz[1] = 9; - sz[2] = 3; - m = misc_utils::median(sz); - CHECK_AND_ASSERT_MES(m == 3, false, "test failed"); - - sz.clear(); - sz.resize(4); - sz[0] = 77; - sz[1] = 9; - sz[2] = 22; - sz[3] = 60; - m = misc_utils::median(sz); - CHECK_AND_ASSERT_MES(m == 41, false, "test failed"); - - - - sz.clear(); - sz.resize(5); - sz[0] = 77; - sz[1] = 9; - sz[2] = 22; - sz[3] = 60; - sz[4] = 11; - m = misc_utils::median(sz); - CHECK_AND_ASSERT_MES(m == 22, false, "test failed"); - return true; - } - } -} - diff --git a/contrib/epee/tests/src/net/test_net.h b/contrib/epee/tests/src/net/test_net.h deleted file mode 100644 index f99639afc..000000000 --- a/contrib/epee/tests/src/net/test_net.h +++ /dev/null @@ -1,408 +0,0 @@ -// Copyright (c) 2006-2013, Andrey N. Sabelnikov, www.sabelnikov.net -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// * Neither the name of the Andrey N. Sabelnikov nor the -// names of its contributors may be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// - -#pragma once - -#include -#include - -#include "net/abstract_tcp_server2.h" -#include "net/levin_protocol_handler.h" -#include "net/levin_protocol_handler_async.h" -#include "storages/abstract_invoke.h" - -namespace epee -{ -namespace StorageNamed -{ - typedef CInMemStorage DefaultStorageType; -} -namespace tests -{ - struct some_subdata - { - - std::string str1; - std::list array_of_id; - - BEGIN_NAMED_SERIALIZE_MAP() - SERIALIZE_STL_ANSI_STRING(str1) - SERIALIZE_STL_CONTAINER_POD(array_of_id) - END_NAMED_SERIALIZE_MAP() - }; - - - /************************************************************************/ - /* */ - /************************************************************************/ - struct COMMAND_EXAMPLE_1 - { - const static int ID = 1000; - - struct request_t - { - - std::string example_string_data; - uint64_t example_id_data; - some_subdata sub; - - BEGIN_NAMED_SERIALIZE_MAP() - SERIALIZE_STL_ANSI_STRING(example_string_data) - SERIALIZE_POD(example_id_data) - SERIALIZE_T(sub) - END_NAMED_SERIALIZE_MAP() - }; - typedef epee::misc_utils::struct_init request; - - struct response_t - { - bool m_success; - uint64_t example_id_data; - std::list subs; - - BEGIN_NAMED_SERIALIZE_MAP() - SERIALIZE_POD(m_success) - SERIALIZE_POD(example_id_data) - SERIALIZE_STL_CONTAINER_T(subs) - END_NAMED_SERIALIZE_MAP() - }; - typedef epee::misc_utils::struct_init response; - }; - - struct COMMAND_EXAMPLE_2 - { - const static int ID = 1001; - - struct request_t - { - std::string example_string_data2; - uint64_t example_id_data; - - BEGIN_NAMED_SERIALIZE_MAP() - SERIALIZE_POD(example_id_data) - SERIALIZE_STL_ANSI_STRING(example_string_data2) - END_NAMED_SERIALIZE_MAP() - }; - typedef epee::misc_utils::struct_init request; - - struct response_t - { - bool m_success; - uint64_t example_id_data; - - BEGIN_NAMED_SERIALIZE_MAP() - SERIALIZE_POD(example_id_data) - SERIALIZE_POD(m_success) - END_NAMED_SERIALIZE_MAP() - }; - typedef epee::misc_utils::struct_init response; - }; - typedef boost::uuids::uuid uuid; - - class test_levin_server: public levin::levin_commands_handler<> - { - test_levin_server(const test_levin_server&){} - public: - test_levin_server(){} - void set_thread_prefix(const std::string& pref) - { - m_net_server.set_threads_prefix(pref); - } - template - bool connect_async(const std::string adr, const std::string& port, uint32_t conn_timeot, calback_t cb, const std::string& bind_ip = "0.0.0.0") - { - return m_net_server.connect_async(adr, port, conn_timeot, cb, bind_ip); - } - - bool connect(const std::string adr, const std::string& port, uint32_t conn_timeot, net_utils::connection_context_base& cn, const std::string& bind_ip = "0.0.0.0") - { - return m_net_server.connect(adr, port, conn_timeot, cn, bind_ip); - } - void close(net_utils::connection_context_base& cn) - { - m_net_server.get_config_object().close(cn.m_connection_id); - } - - template - bool invoke(uuid con_id, int command, t_request& req, t_response& resp) - { - return invoke_remote_command(con_id, command, req, resp, m_net_server.get_config_object()); - } - - template< class t_response, class t_request, class callback_t> - bool invoke_async(uuid con_id, int command, t_request& req, callback_t cb) - { - return async_invoke_remote_command(con_id, command, req, m_net_server.get_config_object(), cb); - } - - bool init(const std::string& bind_port = "", const std::string& bind_ip = "0.0.0.0") - { - m_net_server.get_config_object().set_handler(this); - m_net_server.get_config_object().m_invoke_timeout = 1000; - LOG_PRINT_L0("Binding on " << bind_ip << ":" << bind_port); - return m_net_server.init_server(bind_port, bind_ip); - } - - bool run() - { - //here you can set worker threads count - int thrds_count = 4; - - //go to loop - LOG_PRINT("Run net_service loop( " << thrds_count << " threads)...", LOG_LEVEL_0); - if(!m_net_server.run_server(thrds_count)) - { - LOG_ERROR("Failed to run net tcp server!"); - } - - LOG_PRINT("net_service loop stopped.", LOG_LEVEL_0); - return true; - } - - bool deinit() - { - return m_net_server.deinit_server(); - } - - bool send_stop_signal() - { - m_net_server.send_stop_signal(); - return true; - } - - uint32_t get_binded_port() - { - return m_net_server.get_binded_port(); - } - private: - - - CHAIN_LEVIN_INVOKE_TO_MAP(); //move levin_commands_handler interface invoke(...) callbacks into invoke map - CHAIN_LEVIN_NOTIFY_TO_STUB(); //move levin_commands_handler interface notify(...) callbacks into nothing - - BEGIN_INVOKE_MAP(test_levin_server) - HANDLE_INVOKE_T(COMMAND_EXAMPLE_1, &test_levin_server::handle_1) - HANDLE_INVOKE_T(COMMAND_EXAMPLE_2, &test_levin_server::handle_2) - END_INVOKE_MAP() - - //----------------- commands handlers ---------------------------------------------- - int handle_1(int command, COMMAND_EXAMPLE_1::request& arg, COMMAND_EXAMPLE_1::response& rsp, const net_utils::connection_context_base& context) - { - LOG_PRINT_L0("on_command_1: id " << arg.example_id_data << "---->>"); - COMMAND_EXAMPLE_2::request arg_ = AUTO_VAL_INIT(arg_); - arg_.example_id_data = arg.example_id_data; - COMMAND_EXAMPLE_2::response rsp_ = AUTO_VAL_INIT(rsp_); - invoke_async(context.m_connection_id, COMMAND_EXAMPLE_2::ID, arg_, [](int code, const COMMAND_EXAMPLE_2::response& rsp, const net_utils::connection_context_base& context) - { - if(code < 0) - {LOG_PRINT_RED_L0("on_command_1: command_2 failed to invoke");} - else - {LOG_PRINT_L0("on_command_1: command_2 response " << rsp.example_id_data);} - }); - rsp.example_id_data = arg.example_id_data; - LOG_PRINT_L0("on_command_1: id " << arg.example_id_data << "<<----"); - return true; - } - int handle_2(int command, COMMAND_EXAMPLE_2::request& arg, COMMAND_EXAMPLE_2::response& rsp, const net_utils::connection_context_base& context) - { - LOG_PRINT_L0("on_command_2: id "<< arg.example_id_data); - rsp.example_id_data = arg.example_id_data; - //misc_utils::sleep_no_w(6000); - return true; - } - //---------------------------------------------------------------------------------- - net_utils::boosted_levin_async_server m_net_server; - }; - - - inline - bool do_run_test_server() - { - - test_levin_server srv1, srv2; - - - std::string bind_param = "0.0.0.0"; - std::string port = ""; - - if(!srv1.init(port, bind_param)) - { - LOG_ERROR("Failed to initialize srv!"); - return 1; - } - - if(!srv2.init(port, bind_param)) - { - LOG_ERROR("Failed to initialize srv!"); - return 1; - } - - srv1.set_thread_prefix("SRV_A"); - srv2.set_thread_prefix("SRV_B"); - - boost::thread th1( boost::bind(&test_levin_server::run, &srv1)); - boost::thread th2( boost::bind(&test_levin_server::run, &srv2)); - - LOG_PRINT_L0("Initialized servers, waiting for worker threads started..."); - misc_utils::sleep_no_w(1000); - - - LOG_PRINT_L0("Connecting to each other..."); - uint32_t port1 = srv1.get_binded_port(); - uint32_t port2 = srv2.get_binded_port(); - - COMMAND_EXAMPLE_1::request arg; - COMMAND_EXAMPLE_1::request resp; - - net_utils::connection_context_base cntxt_1; - bool r = srv1.connect("127.0.0.1", string_tools::num_to_string_fast(port2), 5000, cntxt_1); - CHECK_AND_ASSERT_MES(r, false, "connect to server failed"); - - net_utils::connection_context_base cntxt_2; - r = srv2.connect("127.0.0.1", string_tools::num_to_string_fast(port1), 5000, cntxt_2); - CHECK_AND_ASSERT_MES(r, false, "connect to server failed"); - - while(true) - { - LOG_PRINT_L0("Invoking from A to B..."); - int r = srv1.invoke(cntxt_1.m_connection_id, COMMAND_EXAMPLE_1::ID, arg, resp); - if(r<=0) - { - LOG_ERROR("Failed tp invoke A to B"); - break; - } - - LOG_PRINT_L0("Invoking from B to A..."); - r = srv2.invoke(cntxt_2.m_connection_id, COMMAND_EXAMPLE_1::ID, arg, resp); - if(r<=0) - { - LOG_ERROR("Failed tp invoke B to A"); - break; - } - } - srv1.send_stop_signal(); - srv2.send_stop_signal(); - th1.join(); - th1.join(); - - return true; - } - - - - inline bool do_test2_work_with_srv(test_levin_server& srv, int port) - { - uint64_t i = 0; - boost::mutex wait_event; - wait_event.lock(); - while(true) - { - net_utils::connection_context_base cntxt_local = AUTO_VAL_INIT(cntxt_local); - bool r = srv.connect_async("127.0.0.1", string_tools::num_to_string_fast(port), 5000, [&srv, &port, &wait_event, &i, &cntxt_local](const net_utils::connection_context_base& cntxt, const boost::system::error_code& ec) - { - CHECK_AND_ASSERT_MES(!ec, void(), "Some problems at connect, message: " << ec.message() ); - cntxt_local = cntxt; - LOG_PRINT_L0("Invoking command 1 to " << port); - COMMAND_EXAMPLE_1::request arg = AUTO_VAL_INIT(arg); - arg.example_id_data = i; - /*vc2010 workaround*/ - int port_ = port; - boost::mutex& wait_event_ = wait_event; - int r = srv.invoke_async(cntxt.m_connection_id, COMMAND_EXAMPLE_1::ID, arg, [port_, &wait_event_](int code, const COMMAND_EXAMPLE_1::request& rsp, const net_utils::connection_context_base& cntxt) - { - CHECK_AND_ASSERT_MES(code > 0, void(), "Failed to invoke"); - LOG_PRINT_L0("command 1 invoke to " << port_ << " OK."); - wait_event_.unlock(); - }); - }); - wait_event.lock(); - srv.close(cntxt_local); - ++i; - } - return true; - } - - inline - bool do_run_test_server_async_connect() - { - test_levin_server srv1, srv2; - - - std::string bind_param = "0.0.0.0"; - std::string port = ""; - - if(!srv1.init(port, bind_param)) - { - LOG_ERROR("Failed to initialize srv!"); - return 1; - } - - if(!srv2.init(port, bind_param)) - { - LOG_ERROR("Failed to initialize srv!"); - return 1; - } - - srv1.set_thread_prefix("SRV_A"); - srv2.set_thread_prefix("SRV_B"); - - boost::thread thmain1( boost::bind(&test_levin_server::run, &srv1)); - boost::thread thmain2( boost::bind(&test_levin_server::run, &srv2)); - - LOG_PRINT_L0("Initalized servers, waiting for worker threads started..."); - misc_utils::sleep_no_w(1000); - - - LOG_PRINT_L0("Connecting to each other..."); - uint32_t port1 = srv1.get_binded_port(); - uint32_t port2 = srv2.get_binded_port(); - - COMMAND_EXAMPLE_1::request arg; - COMMAND_EXAMPLE_1::request resp; - - - boost::thread work_1( boost::bind(do_test2_work_with_srv, boost::ref(srv1), port2)); - boost::thread work_2( boost::bind(do_test2_work_with_srv, boost::ref(srv2), port1)); - boost::thread work_3( boost::bind(do_test2_work_with_srv, boost::ref(srv1), port2)); - boost::thread work_4( boost::bind(do_test2_work_with_srv, boost::ref(srv2), port1)); - boost::thread work_5( boost::bind(do_test2_work_with_srv, boost::ref(srv1), port2)); - boost::thread work_6( boost::bind(do_test2_work_with_srv, boost::ref(srv2), port1)); - boost::thread work_7( boost::bind(do_test2_work_with_srv, boost::ref(srv1), port2)); - boost::thread work_8( boost::bind(do_test2_work_with_srv, boost::ref(srv2), port1)); - - - work_1.join(); - work_2.join(); - srv1.send_stop_signal(); - srv2.send_stop_signal(); - thmain1.join(); - thmain2.join(); - - return true; - } - -} -} diff --git a/contrib/epee/tests/src/storages/portable_storages_test.h b/contrib/epee/tests/src/storages/portable_storages_test.h deleted file mode 100644 index 89f217d95..000000000 --- a/contrib/epee/tests/src/storages/portable_storages_test.h +++ /dev/null @@ -1,232 +0,0 @@ -// Copyright (c) 2006-2013, Andrey N. Sabelnikov, www.sabelnikov.net -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// * Neither the name of the Andrey N. Sabelnikov nor the -// names of its contributors may be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// - - - -#pragma once - -#include -#include -#include "storages/serializeble_struct_helper.h" -#include "serialization/keyvalue_serialization.h" -#include "storages/portable_storage.h" -#include "storages/portable_storage_template_helper.h" - -namespace epee -{ - namespace tests - { - - struct port_test_struct_sub - { - std::string m_str; - - BEGIN_KV_SERIALIZE_MAP() - KV_SERIALIZE_VAL(m_str) - END_KV_SERIALIZE_MAP() - }; - -#pragma pack (push, 1) - struct some_pod_struct - { - uint64_t a; - int32_t b; - }; -#pragma pack(pop) - - struct port_test_struct - { - std::string m_str; - uint64_t m_uint64; - uint32_t m_uint32; - uint16_t m_uint16; - uint8_t m_uint8; - int64_t m_int64; - int32_t m_int32; - int16_t m_int16; - int8_t m_int8; - double m_double; - bool m_bool; - some_pod_struct m_pod; - std::list m_list_of_str; - std::list m_list_of_uint64_t; - std::list m_list_of_uint32_t; - std::list m_list_of_uint16_t; - std::list m_list_of_uint8_t; - std::list m_list_of_int64_t; - std::list m_list_of_int32_t; - std::list m_list_of_int16_t; - std::list m_list_of_int8_t; - std::list m_list_of_double; - std::list m_list_of_bool; - port_test_struct_sub m_subobj; - std::list m_list_of_self; - - BEGIN_KV_SERIALIZE_MAP() - KV_SERIALIZE_VAL(m_str) - KV_SERIALIZE_VAL(m_uint64) - KV_SERIALIZE_VAL(m_uint32) - KV_SERIALIZE_VAL(m_uint16) - KV_SERIALIZE_VAL(m_uint8) - KV_SERIALIZE_VAL(m_int64) - KV_SERIALIZE_VAL(m_int32) - KV_SERIALIZE_VAL(m_int16) - KV_SERIALIZE_VAL(m_int8) - KV_SERIALIZE_VAL(m_double) - KV_SERIALIZE_VAL(m_bool) - KV_SERIALIZE_VAL_POD_AS_BLOB(m_pod) - KV_SERIALIZE_OBJ(m_subobj) - KV_SERIALIZE_CONTAINER_VAL(m_list_of_str) - KV_SERIALIZE_CONTAINER_VAL(m_list_of_uint64_t) - KV_SERIALIZE_CONTAINER_VAL(m_list_of_uint32_t) - KV_SERIALIZE_CONTAINER_VAL(m_list_of_uint16_t) - KV_SERIALIZE_CONTAINER_VAL(m_list_of_uint8_t) - KV_SERIALIZE_CONTAINER_VAL(m_list_of_int64_t) - KV_SERIALIZE_CONTAINER_VAL(m_list_of_int32_t) - KV_SERIALIZE_CONTAINER_VAL(m_list_of_int16_t) - KV_SERIALIZE_CONTAINER_VAL(m_list_of_int8_t) - KV_SERIALIZE_CONTAINER_VAL(m_list_of_double) - KV_SERIALIZE_CONTAINER_VAL(m_list_of_bool) - KV_SERIALIZE_CONTAINER_OBJ(m_list_of_self) - END_KV_SERIALIZE_MAP() - }; - - bool operator != (const port_test_struct_sub& a, const port_test_struct_sub& b) - { - return b.m_str != a.m_str; - } - - bool operator == (const port_test_struct& a, const port_test_struct& b) - { - if( b.m_str != a.m_str - || b.m_uint64 != a.m_uint64 - || b.m_uint32 != a.m_uint32 - || b.m_uint16 != a.m_uint16 - || b.m_uint8 != a.m_uint8 - || b.m_int64 != a.m_int64 - || b.m_int32 != a.m_int32 - || b.m_int16 != a.m_int16 - || b.m_int8 != a.m_int8 - || b.m_double != a.m_double - || b.m_bool != a.m_bool - || b.m_pod.a != a.m_pod.a - || b.m_pod.b != a.m_pod.b - || b.m_list_of_str != a.m_list_of_str - || b.m_list_of_uint64_t != a.m_list_of_uint64_t - || b.m_list_of_uint32_t != a.m_list_of_uint32_t - || b.m_list_of_uint16_t != a.m_list_of_uint16_t - || b.m_list_of_uint8_t != a.m_list_of_uint8_t - || b.m_list_of_int64_t != a.m_list_of_int64_t - || b.m_list_of_int32_t != a.m_list_of_int32_t - || b.m_list_of_int16_t != a.m_list_of_int16_t - || b.m_list_of_int8_t != a.m_list_of_int8_t - || b.m_list_of_double != a.m_list_of_double - || b.m_list_of_bool != a.m_list_of_bool - || b.m_subobj != a.m_subobj - || b.m_list_of_self != a.m_list_of_self - ) - return false; - return true; - } - - void fill_struct_with_test_values(port_test_struct& s) - { - s.m_str = "zuzuzuzuzuz"; - s.m_uint64 = 111111111111111; - s.m_uint32 = 2222222; - s.m_uint16 = 2222; - s.m_uint8 = 22; - s.m_int64 = -111111111111111; - s.m_int32 = -2222222; - s.m_int16 = -2222; - s.m_int8 = -24; - s.m_double = 0.11111; - s.m_bool = true; - s.m_pod.a = 32342342342342; - s.m_pod.b = -342342; - s.m_list_of_str.push_back("1112121"); - s.m_list_of_uint64_t.push_back(1111111111); - s.m_list_of_uint64_t.push_back(2222222222); - s.m_list_of_uint32_t.push_back(1111111); - s.m_list_of_uint32_t.push_back(2222222); - s.m_list_of_uint16_t.push_back(1111); - s.m_list_of_uint16_t.push_back(2222); - s.m_list_of_uint8_t.push_back(11); - s.m_list_of_uint8_t.push_back(22); - - - s.m_list_of_int64_t.push_back(-1111111111); - s.m_list_of_int64_t.push_back(-222222222); - s.m_list_of_int32_t.push_back(-1111111); - s.m_list_of_int32_t.push_back(-2222222); - s.m_list_of_int16_t.push_back(-1111); - s.m_list_of_int16_t.push_back(-2222); - s.m_list_of_int8_t.push_back(-11); - s.m_list_of_int8_t.push_back(-22); - - s.m_list_of_double.push_back(0.11111); - s.m_list_of_double.push_back(0.22222); - s.m_list_of_bool.push_back(true); - s.m_list_of_bool.push_back(false); - - s.m_subobj.m_str = "subszzzzzzzz"; - s.m_list_of_self.push_back(s); - } - - bool test_portable_storages(const std::string& tests_folder) - { - serialization::portable_storage ps, ps2; - port_test_struct s1, s2; - fill_struct_with_test_values(s1); - - s1.store(ps); - std::string binbuf; - bool r = ps.store_to_binary(binbuf); - - ps2.load_from_binary(binbuf); - s2.load(ps2); - if(!(s1 == s2)) - { - LOG_ERROR("Portable storage test failed!"); - return false; - } - - - port_test_struct ss1, ss2; - fill_struct_with_test_values(ss1); - std::string json_buff = epee::serialization::store_t_to_json(ss1); - epee::serialization::load_t_from_json(ss2, json_buff); - if(!(ss1 == ss2)) - { - LOG_ERROR("Portable storage test failed!"); - return false; - } - - return true; - } - - } -} diff --git a/contrib/epee/tests/src/storages/storage_tests.h b/contrib/epee/tests/src/storages/storage_tests.h deleted file mode 100644 index 522e589c4..000000000 --- a/contrib/epee/tests/src/storages/storage_tests.h +++ /dev/null @@ -1,142 +0,0 @@ -// Copyright (c) 2006-2013, Andrey N. Sabelnikov, www.sabelnikov.net -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// * Neither the name of the Andrey N. Sabelnikov nor the -// names of its contributors may be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// - - - -#pragma once - -#include "storages/serializeble_struct_helper.h" -#include "storages/portable_storage.h" - -namespace epee -{ - namespace tests - { - - - struct test_struct - { - - std::string m_str; - unsigned int m_uint; - bool m_bool; - std::list m_list_of_str; - std::list m_list_of_int; - std::list m_list_of_self; - - - BEGIN_NAMED_SERIALIZE_MAP() - SERIALIZE_STL_ANSI_STRING(m_str) - SERIALIZE_POD(m_uint) - SERIALIZE_POD(m_bool) - SERIALIZE_STL_CONTAINER_ANSII_STRING(m_list_of_str) - SERIALIZE_STL_CONTAINER_POD(m_list_of_int) - SERIALIZE_STL_CONTAINER_T(m_list_of_self) - END_NAMED_SERIALIZE_MAP() - - }; - - - bool operator == (const test_struct& a, const test_struct& b) - { - if( b.m_str != a.m_str - || b.m_uint != a.m_uint - || b.m_bool != a.m_bool - || b.m_list_of_str != a.m_list_of_str - || b.m_list_of_int != a.m_list_of_int - || b.m_list_of_self != a.m_list_of_self - ) - return false; - return true; - } - - inline test_struct get_test_struct() - { - test_struct t = boost::value_initialized(); - t.m_bool = true; - t.m_str = "ackamdc'kmecemcececmacmecmcm[aicm[oeicm[oeicm[qaicm[qoe"; - t.m_uint = 233242; - for(int i = 0; i!=500; i++) - t.m_list_of_int.push_back(i); - - for(int i = 0; i!=500; i++) - t.m_list_of_str.push_back("ssccd"); - - for(int i = 0; i!=5; i++) - { - t.m_list_of_self.push_back(t); - } - return t; - } - - bool test_storages(const std::string& tests_folder) - { - - epee::serialization::portable_storage ps; - auto s = ps.open_section("zzz", nullptr); - uint64_t i = 0; - ps.get_value("afdsdf", i, s); - - - LOG_PRINT_L0("Generating test struct..."); - boost::filesystem::path storage_folder = tests_folder; - storage_folder /= "storages"; - - - test_struct t = get_test_struct(); - - LOG_PRINT_L0("Loading test struct from storage..."); - test_struct t2; - bool res = epee::StorageNamed::load_struct_from_storage_file(t2, (storage_folder /+ "valid_storage.bin").string()); - CHECK_AND_ASSERT_MES(res, false, "Failed to load valid_storage.bin"); - - LOG_PRINT_L0("Comparing generated and loaded test struct..."); - if(!(t == t2)) - return false; - - LOG_PRINT_L0("Loading broken archive 1..."); - test_struct t3; - res = epee::StorageNamed::load_struct_from_storage_file(t3, (storage_folder /+ "invalid_storage_1.bin").string()); - CHECK_AND_ASSERT_MES(!res, false, "invalid_storage_1.bin loaded, but should not "); - - - LOG_PRINT_L0("Loading broken archive 2..."); - res = epee::StorageNamed::load_struct_from_storage_file(t3, (storage_folder /+ "invalid_storage_2.bin").string()); - CHECK_AND_ASSERT_MES(!res, false, "invalid_storage_2.bin loaded, but should not "); - - LOG_PRINT_L0("Loading broken archive 3..."); - res = epee::StorageNamed::load_struct_from_storage_file(t3, (storage_folder /+ "invalid_storage_3.bin").string()); - CHECK_AND_ASSERT_MES(!res, false, "invalid_storage_3.bin loaded, but should not "); - - LOG_PRINT_L0("Loading broken archive 4..."); - res = epee::StorageNamed::load_struct_from_storage_file(t3, (storage_folder /+ "invalid_storage_4.bin").string()); - CHECK_AND_ASSERT_MES(!res, false, "invalid_storage_3.bin loaded, but should not "); - - return true; - } - } -} - diff --git a/contrib/epee/tests/src/tests.cpp b/contrib/epee/tests/src/tests.cpp deleted file mode 100644 index 8d61334cc..000000000 --- a/contrib/epee/tests/src/tests.cpp +++ /dev/null @@ -1,59 +0,0 @@ - -#include "include_base_utils.h" -#include "storages/storage_tests.h" -#include "misc/test_math.h" -#include "storages/portable_storages_test.h" -#include "net/test_net.h" - -using namespace epee; - -int main(int argc, char* argv[]) -{ - - string_tools::set_module_name_and_folder(argv[0]); - - //set up logging options - log_space::get_set_log_detalisation_level(true, LOG_LEVEL_2); - log_space::log_singletone::add_logger(LOGGER_CONSOLE, NULL, NULL); - log_space::log_singletone::add_logger(LOGGER_FILE, - log_space::log_singletone::get_default_log_file().c_str(), - log_space::log_singletone::get_default_log_folder().c_str()); - - - string_tools::command_line_params_a start_params; - string_tools::parse_commandline(start_params, argc, argv); - std::string tests_data_path; - string_tools::get_xparam_from_command_line(start_params, std::string("/tests_folder"), tests_data_path); - - if(string_tools::have_in_command_line(start_params, std::string("/run_net_tests"))) - { - if(!tests::do_run_test_server()) - { - LOG_ERROR("net tests failed"); - return 1; - } - if(!tests::do_run_test_server_async_connect() ) - { - LOG_ERROR("net tests failed"); - return 1; - } - }else if(string_tools::have_in_command_line(start_params, std::string("/run_unit_tests"))) - { - if(!tests::test_median()) - { - LOG_ERROR("median test failed"); - return 1; - } - - - if(!tests::test_storages(tests_data_path)) - { - LOG_ERROR("storage test failed"); - return 1; - } - }else if(string_tools::have_in_command_line(start_params, std::string("/run_portable_storage_test"))) - { - tests::test_portable_storages(tests_data_path); - } - return 1; -}