Skip to content

Commit

Permalink
iox-#2330 Refactor service management class and update tests
Browse files Browse the repository at this point in the history
  • Loading branch information
khromenokroman committed Sep 1, 2024
1 parent b6ab141 commit 7779184
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 23 deletions.
35 changes: 28 additions & 7 deletions iceoryx_posh/include/iceoryx_posh/internal/roudi/roudi.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -78,10 +78,17 @@ class ServiceManagement
ServiceManagement& operator=(ServiceManagement const& other) = delete;
ServiceManagement& operator=(ServiceManagement&& other) = default;

static constexpr const uint16_t SIZE_STRING = 4096; ///< maximum size of string // 2
static constexpr const uint8_t SIZE_THREAD_NAME = 15; ///< max size for thread name // 1

/// dbus signal handler
virtual void processNotify() = 0;
/// Sets a shutdown flag
virtual void shutdown() = 0;
/// Sets a thread name
virtual bool setThreadNameHelper(iox::string<SIZE_THREAD_NAME>& threadName) = 0;
/// Get environment variable
virtual std::string getEnvironmentVariable(const char* const env_var) = 0;

protected:
ServiceManagement() = default;
Expand All @@ -97,11 +104,7 @@ class ServiceManagementSystemd final : public ServiceManagement
std::condition_variable watchdogNotifyCondition; ///< watch dog notification condition // 48
std::mutex watchdogMutex; ///< watch dog mutex // 40
std::thread m_listenThreadWatchdog; ///< thread that listens to systemd watchdog signals // 8
public:
static constexpr const uint16_t SIZE_STRING = 4096; ///< maximum size of string // 2
static constexpr const uint8_t SIZE_THREAD_NAME = 15; ///< max size for thread name // 1
private:
std::atomic_bool m_shutdown{false}; ///< indicates if service is being shutdown // 1
std::atomic_bool m_shutdown{false}; ///< indicates if service is being shutdown // 1

public:
ServiceManagementSystemd() = default;
Expand All @@ -125,14 +128,14 @@ class ServiceManagementSystemd final : public ServiceManagement
* @param env_var Pointer to environment variable
* @return Environment variable as std::string
**/
static std::string getEnvironmentVariable(const char* const env_var);
std::string getEnvironmentVariable(const char* const env_var) final;

/**
* @brief Helper function to set thread name
* @param threadName Thread name to be set
* @return True if successfully set, otherwise false
**/
static bool setThreadNameHelper(iox::string<SIZE_THREAD_NAME>& threadName);
bool setThreadNameHelper(iox::string<SIZE_THREAD_NAME>& threadName) final;

#ifdef USE_SYSTEMD
/**
Expand Down Expand Up @@ -203,6 +206,24 @@ class NoServiceManagementSystemd final : public ServiceManagement
{
// empty implementation
}

/**
* @brief Empty implementation of get environment variable
**/
std::string getEnvironmentVariable([[maybe_unused]] const char* const env_var) final
{
// empty implementation
return "no implement";
}

/**
* @brief Empty implementation set thread name
**/
bool setThreadNameHelper([[maybe_unused]] iox::string<SIZE_THREAD_NAME>& threadName) final
{
// empty implementation
return true;
}
};
} // namespace service_management

Expand Down
44 changes: 28 additions & 16 deletions iceoryx_posh/test/moduletests/test_roudi_system_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,34 +4,34 @@
TEST(RoudiSystemD, CreateObject)
{
::testing::Test::RecordProperty("TEST_ID", "aa77b5f6-ffb3-4267-982d-dfe85da384ca");
std::unique_ptr<iox::roudi::service_management::ServiceManagementSystemd> roudiSendMessage;
ASSERT_NO_THROW(std::make_unique<iox::roudi::service_management::ServiceManagementSystemd>());
std::unique_ptr<SendMessageServiceManagement> roudiSendMessage;
ASSERT_NO_THROW(std::make_unique<SendMessageServiceManagement>());
}

TEST(RoudiSystemD, CheckConstantsSizeThreadName)
{
::testing::Test::RecordProperty("TEST_ID", "9c39f45c-a63c-43ec-9606-e50c33247b3f");
std::unique_ptr<iox::roudi::service_management::ServiceManagementSystemd> roudiSendMessage;
ASSERT_NO_THROW(std::make_unique<iox::roudi::service_management::ServiceManagementSystemd>());
std::unique_ptr<SendMessageServiceManagement> roudiSendMessage;
ASSERT_NO_THROW(std::make_unique<SendMessageServiceManagement>());
ASSERT_EQ(roudiSendMessage->SIZE_THREAD_NAME, 15) << "Size thread must equal 15 simbols";
}

TEST(RoudiSystemD, CheckConstantsSizeString)
{
::testing::Test::RecordProperty("TEST_ID", "0b3e3058-6052-49cc-8a67-723f3775a745");
std::unique_ptr<iox::roudi::service_management::ServiceManagementSystemd> roudiSendMessage;
ASSERT_NO_THROW(std::make_unique<iox::roudi::service_management::ServiceManagementSystemd>());
std::unique_ptr<SendMessageServiceManagement> roudiSendMessage;
ASSERT_NO_THROW(std::make_unique<SendMessageServiceManagement>());
ASSERT_EQ(roudiSendMessage->SIZE_STRING, 4096) << "Size string must equal 4096 simbols";
}

TEST(RoudiSystemD, SetThreadNameHelper)
{
::testing::Test::RecordProperty("TEST_ID", "b9ff9e83-9dde-4221-bd1e-c1016ec2d5ff");
std::unique_ptr<iox::roudi::service_management::ServiceManagementSystemd> roudiSendMessage;
bool result = false;
std::unique_ptr<SendMessageServiceManagement> roudiSendMessage;
bool result = true;

ASSERT_NO_THROW(std::make_unique<iox::roudi::service_management::ServiceManagementSystemd>());
iox::string<iox::roudi::service_management::ServiceManagementSystemd::SIZE_THREAD_NAME> nameThread = "test";
ASSERT_NO_THROW(std::make_unique<SendMessageServiceManagement>());
iox::string<SendMessageServiceManagement::SIZE_THREAD_NAME> nameThread = "test";
ASSERT_NO_THROW(result = roudiSendMessage->setThreadNameHelper(nameThread));
ASSERT_EQ(result, true) << "Can not change name thread";
}
Expand All @@ -45,19 +45,31 @@ TEST(RoudiSystemD, GetEnvironmentVariableReturnsCorrectValue)
auto set_env = IOX_POSIX_CALL(setenv)(env_var_name, env_var_value, 1).failureReturnValue(-1).evaluate();
EXPECT_FALSE(set_env.has_error()) << "setenv failed with error: " << set_env.get_error().errnum;

iox::roudi::service_management::ServiceManagementSystemd sut;
SendMessageServiceManagement sut;

std::string result = sut.getEnvironmentVariable(env_var_name);

EXPECT_EQ(result, env_var_value);
if (result != "no implement")
{
EXPECT_EQ(result, env_var_value);
}
else
{
EXPECT_EQ(result, "no implement");
}
}

TEST(RoudiSystemD, GetEnvironmentVariableHandlesNonExistentVar)
{
::testing::Test::RecordProperty("TEST_ID", "9595728f-a504-46e3-8672-b074696326a4");
iox::roudi::service_management::ServiceManagementSystemd sut;
SendMessageServiceManagement sut;

std::string result = sut.getEnvironmentVariable("NON_EXISTENT_VAR");

EXPECT_TRUE(result.empty());
if (result != "no implement")
{
EXPECT_TRUE(result.empty());
}
else
{
EXPECT_EQ(result, "no implement");
}
}

0 comments on commit 7779184

Please sign in to comment.