mirror of
https://github.com/FairRootGroup/FairMQ.git
synced 2025-10-15 09:31:45 +00:00
Run state handlers on the main thread (breaking change for control).
This commit is contained in:
committed by
Dennis Klein
parent
c064da91df
commit
a53ef79552
@@ -16,6 +16,7 @@
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <thread>
|
||||
|
||||
namespace
|
||||
{
|
||||
@@ -38,7 +39,7 @@ auto control(shared_ptr<FairMQDevice> device) -> void
|
||||
|
||||
TEST(Plugin, Operators)
|
||||
{
|
||||
FairMQProgOptions config{};
|
||||
FairMQProgOptions config;
|
||||
auto device = make_shared<FairMQDevice>();
|
||||
PluginServices services{&config, device};
|
||||
Plugin p1{"dds", {1, 0, 0}, "Foo Bar <foo.bar@test.net>", "https://git.test.net/dds.git", &services};
|
||||
@@ -46,19 +47,27 @@ TEST(Plugin, Operators)
|
||||
Plugin p3{"file", {1, 0, 0}, "Foo Bar <foo.bar@test.net>", "https://git.test.net/file.git", &services};
|
||||
EXPECT_EQ(p1, p2);
|
||||
EXPECT_NE(p1, p3);
|
||||
control(device);
|
||||
thread t(control, device);
|
||||
device->RunStateMachine();
|
||||
if (t.joinable()) {
|
||||
t.join();
|
||||
}
|
||||
}
|
||||
|
||||
TEST(Plugin, OstreamOperators)
|
||||
{
|
||||
FairMQProgOptions config{};
|
||||
FairMQProgOptions config;
|
||||
auto device = make_shared<FairMQDevice>();
|
||||
PluginServices services{&config, device};
|
||||
Plugin p1{"dds", {1, 0, 0}, "Foo Bar <foo.bar@test.net>", "https://git.test.net/dds.git", &services};
|
||||
stringstream ss;
|
||||
ss << p1;
|
||||
EXPECT_EQ(ss.str(), string{"'dds', version '1.0.0', maintainer 'Foo Bar <foo.bar@test.net>', homepage 'https://git.test.net/dds.git'"});
|
||||
control(device);
|
||||
thread t(control, device);
|
||||
device->RunStateMachine();
|
||||
if (t.joinable()) {
|
||||
t.join();
|
||||
}
|
||||
}
|
||||
|
||||
TEST(PluginVersion, Operators)
|
||||
|
@@ -15,6 +15,7 @@
|
||||
#include <fstream>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
#include <thread>
|
||||
|
||||
namespace
|
||||
{
|
||||
@@ -39,8 +40,8 @@ auto control(shared_ptr<FairMQDevice> device) -> void
|
||||
|
||||
TEST(PluginManager, LoadPluginDynamic)
|
||||
{
|
||||
FairMQProgOptions config{};
|
||||
auto mgr = PluginManager{};
|
||||
FairMQProgOptions config;
|
||||
PluginManager mgr;
|
||||
auto device = make_shared<FairMQDevice>();
|
||||
mgr.EmplacePluginServices(&config, device);
|
||||
|
||||
@@ -53,7 +54,7 @@ TEST(PluginManager, LoadPluginDynamic)
|
||||
|
||||
// check order
|
||||
const auto expected = vector<string>{"test_dummy", "test_dummy2"};
|
||||
auto actual = vector<string>{};
|
||||
auto actual = vector<string>();
|
||||
mgr.ForEachPlugin([&](Plugin& plugin){ actual.push_back(plugin.GetName()); });
|
||||
ASSERT_TRUE(actual == expected);
|
||||
|
||||
@@ -62,18 +63,22 @@ TEST(PluginManager, LoadPluginDynamic)
|
||||
mgr.ForEachPluginProgOptions([&count](const options_description& /*d*/){ ++count; });
|
||||
ASSERT_EQ(count, 1);
|
||||
|
||||
control(device);
|
||||
thread t(control, device);
|
||||
device->RunStateMachine();
|
||||
if (t.joinable()) {
|
||||
t.join();
|
||||
}
|
||||
}
|
||||
|
||||
TEST(PluginManager, LoadPluginStatic)
|
||||
{
|
||||
auto mgr = PluginManager{};
|
||||
PluginManager mgr;
|
||||
auto device = make_shared<FairMQDevice>();
|
||||
device->SetTransport("zeromq");
|
||||
|
||||
ASSERT_NO_THROW(mgr.LoadPlugin("s:control"));
|
||||
|
||||
FairMQProgOptions config{};
|
||||
FairMQProgOptions config;
|
||||
config.SetValue<string>("control", "static");
|
||||
config.SetValue("catch-signals", 0);
|
||||
mgr.EmplacePluginServices(&config, device);
|
||||
@@ -82,7 +87,7 @@ TEST(PluginManager, LoadPluginStatic)
|
||||
|
||||
// check order
|
||||
const auto expected = vector<string>{"control"};
|
||||
auto actual = vector<string>{};
|
||||
auto actual = vector<string>();
|
||||
mgr.ForEachPlugin([&](Plugin& plugin){ actual.push_back(plugin.GetName()); });
|
||||
ASSERT_TRUE(actual == expected);
|
||||
|
||||
@@ -91,6 +96,8 @@ TEST(PluginManager, LoadPluginStatic)
|
||||
mgr.ForEachPluginProgOptions([&count](const options_description&){ ++count; });
|
||||
ASSERT_EQ(count, 1);
|
||||
|
||||
device->RunStateMachine();
|
||||
|
||||
mgr.WaitForPluginsToReleaseDeviceControl();
|
||||
}
|
||||
|
||||
@@ -112,7 +119,7 @@ TEST(PluginManager, SearchPathValidation)
|
||||
const auto path1 = path{"/tmp/test1"};
|
||||
const auto path2 = path{"/tmp/test2"};
|
||||
const auto path3 = path{"/tmp/test3"};
|
||||
auto mgr = PluginManager{};
|
||||
PluginManager mgr;
|
||||
|
||||
mgr.SetSearchPaths({path1, path2});
|
||||
auto expected = vector<path>{path1, path2};
|
||||
@@ -140,7 +147,7 @@ TEST(PluginManager, SearchPaths)
|
||||
fs.close();
|
||||
const auto empty_path = path{""};
|
||||
|
||||
auto mgr = PluginManager{};
|
||||
PluginManager mgr;
|
||||
ASSERT_NO_THROW(mgr.AppendSearchPath(non_existing_dir));
|
||||
ASSERT_NO_THROW(mgr.AppendSearchPath(existing_dir));
|
||||
ASSERT_THROW(mgr.AppendSearchPath(existing_file), PluginManager::BadSearchPath);
|
||||
|
@@ -17,7 +17,7 @@ using namespace std;
|
||||
|
||||
TEST(PluginManager, LoadPluginPrelinkedDynamic)
|
||||
{
|
||||
auto mgr = PluginManager{};
|
||||
PluginManager mgr;
|
||||
|
||||
ASSERT_NO_THROW(mgr.LoadPlugin("p:test_dummy"));
|
||||
ASSERT_NO_THROW(mgr.LoadPlugin("p:test_dummy2"));
|
||||
|
Reference in New Issue
Block a user