FairMQ: Add static plugin mechanism

* Add skeleton for Take/ReleaseControl API
* Add skeleton for control_static builtin plugin
This commit is contained in:
Dennis Klein
2017-09-12 19:25:36 +02:00
committed by Mohammad Al-Turany
parent 17d7cd8ce4
commit 052ac8487d
11 changed files with 181 additions and 11 deletions

View File

@@ -37,11 +37,11 @@ auto control(shared_ptr<FairMQDevice> device) -> void
}
}
TEST(PluginManager, LoadPlugin)
TEST(PluginManager, LoadPluginDynamic)
{
FairMQProgOptions config{};
auto device = make_shared<FairMQDevice>();
auto mgr = PluginManager{};
auto device = make_shared<FairMQDevice>();
mgr.EmplacePluginServices(&config, device);
mgr.PrependSearchPath("./lib");
@@ -65,6 +65,31 @@ TEST(PluginManager, LoadPlugin)
control(device);
}
TEST(PluginManager, LoadPluginStatic)
{
FairMQProgOptions config{};
auto mgr = PluginManager{};
auto device = make_shared<FairMQDevice>();
mgr.EmplacePluginServices(&config, device);
ASSERT_NO_THROW(mgr.LoadPlugin("s:control_static"));
ASSERT_NO_THROW(mgr.InstantiatePlugins());
// check order
const auto expected = vector<string>{"control_static"};
auto actual = vector<string>{};
mgr.ForEachPlugin([&](Plugin& plugin){ actual.push_back(plugin.GetName()); });
ASSERT_TRUE(actual == expected);
// program options
auto count = 0;
mgr.ForEachPluginProgOptions([&count](const options_description& d){ ++count; });
ASSERT_EQ(count, 1);
control(device);
}
TEST(PluginManager, Factory)
{
const auto args = vector<string>{"-l", "debug", "--help", "-S", ">/lib", "</home/user/lib", "/usr/local/lib", "/usr/lib"};