diff options
Diffstat (limited to 'test/fixtures')
-rw-r--r-- | test/fixtures/fixture_log.cpp | 47 | ||||
-rw-r--r-- | test/fixtures/fixture_log.hpp | 59 | ||||
-rw-r--r-- | test/fixtures/server_environment.hpp | 51 | ||||
-rw-r--r-- | test/fixtures/storage/empty | 0 |
4 files changed, 101 insertions, 56 deletions
diff --git a/test/fixtures/fixture_log.cpp b/test/fixtures/fixture_log.cpp deleted file mode 100644 index 1b1646e665..0000000000 --- a/test/fixtures/fixture_log.cpp +++ /dev/null @@ -1,47 +0,0 @@ -#include "fixture_log.hpp" - -#include <iostream> - -namespace mbgl { - -FixtureLogBackend::~FixtureLogBackend() { - std::cerr << unchecked(); -} - -size_t FixtureLogBackend::count(const LogMessage &message) const { - size_t message_count = 0; - for (const LogMessage &msg : messages) { - if (msg == message) { - message_count++; - msg.checked = true; - } - } - return message_count; -} - -std::vector<FixtureLogBackend::LogMessage> FixtureLogBackend::unchecked() const { - std::vector<LogMessage> unchecked_messages; - for (const LogMessage &msg : messages) { - if (!msg.checked) { - unchecked_messages.push_back(msg); - msg.checked = true; - } - } - return unchecked_messages; -} - -::std::ostream& operator<<(::std::ostream& os, const std::vector<FixtureLogBackend::LogMessage>& messages) { - for (const FixtureLogBackend::LogMessage &message : messages) { - os << "- " << message; - } - return os; -} - -::std::ostream& operator<<(::std::ostream& os, const FixtureLogBackend::LogMessage& message) { - os << "[\"" << message.severity.get() << "\", \"" << message.event.get() << "\""; - if (message.code) os << ", " << message.code.get(); - if (message.msg) os << ", \"" << message.msg.get() << "\""; - return os << "]" << std::endl; -} - -} diff --git a/test/fixtures/fixture_log.hpp b/test/fixtures/fixture_log.hpp index 99097a2c47..8df16e3086 100644 --- a/test/fixtures/fixture_log.hpp +++ b/test/fixtures/fixture_log.hpp @@ -7,6 +7,8 @@ #include <vector> #include <cstdarg> +#include <iostream> + namespace mbgl { @@ -37,13 +39,13 @@ public: mutable bool checked = false; }; - ~FixtureLogBackend(); + inline ~FixtureLogBackend(); - void record(EventSeverity severity, Event event, const std::string &msg) { + inline void record(EventSeverity severity, Event event, const std::string &msg) { messages.emplace_back(severity, event, msg); } - void record(EventSeverity severity, Event event, const char* format, ...) { + inline void record(EventSeverity severity, Event event, const char* format, ...) { va_list args; va_start(args, format); const size_t len = vsnprintf(NULL, 0, format, args); @@ -55,24 +57,63 @@ public: messages.emplace_back(severity, event, std::string { buffer.get(), len }); } - void record(EventSeverity severity, Event event, int64_t code) { + inline void record(EventSeverity severity, Event event, int64_t code) { messages.emplace_back(severity, event, code); } - void record(EventSeverity severity, Event event, int64_t code, const std::string &msg) { + inline void record(EventSeverity severity, Event event, int64_t code, const std::string &msg) { messages.emplace_back(severity, event, code, msg); } - size_t count(const LogMessage &message) const; - std::vector<LogMessage> unchecked() const; + inline size_t count(const LogMessage &message) const; + inline std::vector<LogMessage> unchecked() const; public: std::vector<LogMessage> messages; }; -::std::ostream& operator<<(::std::ostream& os, const std::vector<FixtureLogBackend::LogMessage>& messages); -::std::ostream& operator<<(::std::ostream& os, const FixtureLogBackend::LogMessage& message); +inline ::std::ostream& operator<<(::std::ostream& os, const std::vector<FixtureLogBackend::LogMessage>& messages); +inline ::std::ostream& operator<<(::std::ostream& os, const FixtureLogBackend::LogMessage& message); + +FixtureLogBackend::~FixtureLogBackend() { + std::cerr << unchecked(); +} + +size_t FixtureLogBackend::count(const LogMessage &message) const { + size_t message_count = 0; + for (const LogMessage &msg : messages) { + if (msg == message) { + message_count++; + msg.checked = true; + } + } + return message_count; +} +std::vector<FixtureLogBackend::LogMessage> FixtureLogBackend::unchecked() const { + std::vector<LogMessage> unchecked_messages; + for (const LogMessage &msg : messages) { + if (!msg.checked) { + unchecked_messages.push_back(msg); + msg.checked = true; + } + } + return unchecked_messages; +} + +::std::ostream& operator<<(::std::ostream& os, const std::vector<FixtureLogBackend::LogMessage>& messages) { + for (const FixtureLogBackend::LogMessage &message : messages) { + os << "- " << message; + } + return os; +} + +::std::ostream& operator<<(::std::ostream& os, const FixtureLogBackend::LogMessage& message) { + os << "[\"" << message.severity.get() << "\", \"" << message.event.get() << "\""; + if (message.code) os << ", " << message.code.get(); + if (message.msg) os << ", \"" << message.msg.get() << "\""; + return os << "]" << std::endl; +} } diff --git a/test/fixtures/server_environment.hpp b/test/fixtures/server_environment.hpp new file mode 100644 index 0000000000..54dbb24bdd --- /dev/null +++ b/test/fixtures/server_environment.hpp @@ -0,0 +1,51 @@ +#ifndef MBGL_TEST_FIXTURES_SERVER_ENVIRONMENT +#define MBGL_TEST_FIXTURES_SERVER_ENVIRONMENT + +#include <gtest/gtest.h> + +#include <dirent.h> +#include <signal.h> +#include <libgen.h> + +class ServerEnvironment : public ::testing::Environment { +public: + inline ServerEnvironment(const std::string &executable); + inline virtual void SetUp(); + inline virtual void TearDown(); + +private: + const std::string executable; + const std::string parent_pid = std::to_string(getpid()); + pid_t pid = 0; +}; + +ServerEnvironment::ServerEnvironment(const std::string &executable_) : executable(executable_) {} + +void ServerEnvironment::SetUp() { + pid = fork(); + if (pid < 0) { + throw std::runtime_error("Cannot create server process"); + } else if (pid == 0) { + char *arg[] = { + const_cast<char *>(executable.c_str()), + const_cast<char *>(parent_pid.c_str()), + nullptr + }; + int ret = execv(executable.c_str(), arg); + // This call should not return. In case execve failed, we exit anyway. + if (ret < 0) { + fprintf(stderr, "Failed to start server: %s\n", strerror(errno)); + } + exit(0); + } else { + // Wait until the server process sends SIGCONT. + raise(SIGSTOP); + } +} + +void ServerEnvironment::TearDown() { + ASSERT_TRUE(pid); + kill(pid, SIGHUP); +} + +#endif
\ No newline at end of file diff --git a/test/fixtures/storage/empty b/test/fixtures/storage/empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/test/fixtures/storage/empty |