From 9d9e7ece7aec23f4c2594f94d70b25a6f7b36e5c Mon Sep 17 00:00:00 2001 From: Bartosz Wieczorek Date: Tue, 30 Jan 2018 15:06:00 +0100 Subject: [PATCH] add docker run --- sql/schema.sql | 3 +- src/eedb/db/CMakeLists.txt | 1 + src/eedb/db/RawSql.cpp | 23 ++++++++ src/eedb/db/RawSql.hpp | 11 ++++ src/eedb/widgets/DefaultHomePage.cpp | 2 +- tests/unit/CMakeLists.txt | 2 +- tests/unit/test_eedb_data_PgCategory.cpp | 75 ++++++++++++++++++++---- 7 files changed, 104 insertions(+), 13 deletions(-) create mode 100644 src/eedb/db/RawSql.cpp create mode 100644 src/eedb/db/RawSql.hpp diff --git a/sql/schema.sql b/sql/schema.sql index 270f8a0..a6d5ea6 100644 --- a/sql/schema.sql +++ b/sql/schema.sql @@ -1,4 +1,5 @@ -create EXTENSIon IF NOT EXISTS ltree; + +create EXTENSIon IF NOT EXISTS ltree; create OR REPLACE function perm_to_numeric ( m_owner INT, m_group INT, m_other INT ) RETURNS INT AS $$ diff --git a/src/eedb/db/CMakeLists.txt b/src/eedb/db/CMakeLists.txt index 03b8746..d7b40dc 100644 --- a/src/eedb/db/CMakeLists.txt +++ b/src/eedb/db/CMakeLists.txt @@ -6,6 +6,7 @@ set(SOURCE connection.cpp config.cpp + RawSql.cpp ) file(GLOB MODEL diff --git a/src/eedb/db/RawSql.cpp b/src/eedb/db/RawSql.cpp new file mode 100644 index 0000000..f18a39f --- /dev/null +++ b/src/eedb/db/RawSql.cpp @@ -0,0 +1,23 @@ +#include + +#include +#include + +#include +#include + +#include +#include + +namespace eedb::db{ +void exec_file(PgConnection & db, const std::experimental::filesystem::v1::__cxx11::path & filepath) { + std::ifstream stream(filepath); + std::string filebuf{std::istreambuf_iterator< char >(stream), std::istreambuf_iterator< char >()}; + std::vector< std::string > lines; + boost::algorithm::split(lines, filebuf, boost::is_any_of(";")); + +// for(const auto & line : lines) { + db.native()->execute(filebuf); +// } +} +} // namespace eedb::db diff --git a/src/eedb/db/RawSql.hpp b/src/eedb/db/RawSql.hpp new file mode 100644 index 0000000..781d575 --- /dev/null +++ b/src/eedb/db/RawSql.hpp @@ -0,0 +1,11 @@ +#pragma once + +#include + +namespace eedb::db{ + +class PgConnection; + +void exec_file(PgConnection &db, const std::experimental::filesystem::path &filepath ); + +} diff --git a/src/eedb/widgets/DefaultHomePage.cpp b/src/eedb/widgets/DefaultHomePage.cpp index f68af98..6b952e7 100644 --- a/src/eedb/widgets/DefaultHomePage.cpp +++ b/src/eedb/widgets/DefaultHomePage.cpp @@ -20,7 +20,7 @@ #include #include -#include +#include #include namespace eedb { diff --git a/tests/unit/CMakeLists.txt b/tests/unit/CMakeLists.txt index 77adf56..c6e8edf 100644 --- a/tests/unit/CMakeLists.txt +++ b/tests/unit/CMakeLists.txt @@ -18,7 +18,7 @@ include_directories( ${gmock_SOURCE_DIR}/include) INCLUDE_DIRECTORIES(${PostgreSQL_INCLUDE_DIRS}) add_executable( ${TEST_EXECUTABLE_NAME} ${TEST_FILES} ${MOCK_FILES} ) - target_link_libraries( ${TEST_EXECUTABLE_NAME} GMock::main wt wttest eedb_db auth ${Boost_LIBRARIES} ) + target_link_libraries( ${TEST_EXECUTABLE_NAME} GMock::main wt wttest eedb_db auth ${Boost_LIBRARIES} stdc++fs) add_test( ${TEST_EXECUTABLE_NAME} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${TEST_EXECUTABLE_NAME}) #endif() diff --git a/tests/unit/test_eedb_data_PgCategory.cpp b/tests/unit/test_eedb_data_PgCategory.cpp index 46680f9..240eddb 100644 --- a/tests/unit/test_eedb_data_PgCategory.cpp +++ b/tests/unit/test_eedb_data_PgCategory.cpp @@ -5,28 +5,79 @@ #include #include + +#include +#include + +#include +#include + +class DockerRunner { + public: + DockerRunner(std::string name) : _name{std::move(name)} { + try { + auto p = boost::process::search_path("docker"); + // clang-format off + boost::process::system(p, + "run", "--detach", "--rm", + "--name", _name, + "-p", "5432:5432", + "-e", "POSTGRES_PASSWORD=postgres", + "-e", "POSTGRES_DB=eedb", + "postgres:9.5-alpine"); + + + // clang-format on + } catch(boost::process::process_error e) { + std::cout << e.what() << "\n"; + } catch(std::exception e) { + std::cout << e.what() << "n"; + } catch(...) { + std::cout << "OCHUJ!\n"; + } + } + + ~DockerRunner() { + auto p = boost::process::search_path("docker"); + boost::process::system(p, "stop", _name); + boost::process::system(p, "rm", "-v", _name); + } + + private: + std::string _name; +}; + class PgCategoryTest : public testing::Test { public: static void SetUpTestCase() { + Wt::Test::WTestEnvironment env; + + auto dbConfig = std::make_unique< eedb::db::PgConfig >(env); + dbConfig->host = "localhost"; + dbConfig->port = 5432; + dbConfig->password = "postgres"; + dbConfig->user = "postgres"; + dbConfig->dbname = "postgres"; + dbConfig->debug = false; + +// _docker = std::make_unique< DockerRunner >("postgres_test"); + + db = std::make_unique< eedb::db::PgConnection >(std::move(dbConfig)); + eedb::db::exec_file(*db, "/home/bwieczor/src/eedb/sql/schema.sql"); + /* * 1. Create test database - * 2. create config + * 2. create config [/] * 3. Setup needed tables in database * 4. Fill tables with data */ } PgCategoryTest() { - /* - * 1. Start transaction - */ db->native()->start_transaction(); } ~PgCategoryTest() { - /* - * 1. Revert Transaction - */ db->native()->rollback_transaction(false); } @@ -34,13 +85,17 @@ class PgCategoryTest : public testing::Test { /* * 1. Remove everything */ + db.reset(); +// _docker.reset(); } protected: - static std::shared_ptr< eedb::db::PgConfig > db_config; - std::unique_ptr< eedb::db::PgConnection > db; - + static std::unique_ptr< eedb::db::PgConnection > db; + static std::unique_ptr< DockerRunner > _docker; std::unique_ptr< eedb::PgCategory > sut; }; + std::unique_ptr< eedb::db::PgConnection > PgCategoryTest::db = {}; + std::unique_ptr< DockerRunner > PgCategoryTest::_docker = {}; + TEST_F(PgCategoryTest, rootCategoryHasNoParent) {}