commit 7a8ba5fe8bc0a7715967efd973efeb030732d824 Author: Dennis Klein Date: Sun Sep 1 20:20:15 2019 +0200 Sync test for FairMQ SDK v1.4.8 diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..ae85282c --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,18 @@ +cmake_minimum_required(VERSION 3.11 FATAL_ERROR) +cmake_policy(VERSION 3.11...3.15) + +project(sdk_tester VERSION 1 LANGUAGES CXX) + +find_package(FairMQ COMPONENTS sdk REQUIRED QUIET) +foreach(dep IN LISTS FairMQ_PACKAGE_DEPENDENCIES) + if(FairMQ_${dep}_COMPONENTS) + find_package(${dep} ${FairMQ_${dep}_VERSION} COMPONENTS ${FairMQ_${dep}_COMPONENTS} QUIET) + else() + find_package(${dep} ${FairMQ_${dep}_VERSION} QUIET) + endif() +endforeach() + +configure_file(main.cpp.in ${CMAKE_BINARY_DIR}/main.cpp @ONLY) +add_executable(tester ${CMAKE_BINARY_DIR}/main.cpp) +set_property(TARGET tester PROPERTY CXX_STANDARD 17) +target_link_libraries(tester PRIVATE FairMQ::SDK FairLogger::FairLogger) diff --git a/main.cpp.in b/main.cpp.in new file mode 100644 index 00000000..4297ce37 --- /dev/null +++ b/main.cpp.in @@ -0,0 +1,61 @@ +#include +#include +#include +#include +#include + +int main(int argc, char *argv[]) { + fair::Logger::SetConsoleSeverity("debug"); + + // workaround https://github.com/FairRootGroup/DDS/issues/24 + std::string path(std::getenv("PATH")); + path = std::string("@FairMQ_BINDIR@:") + path; + setenv("PATH", path.c_str(), 1); + + LOG(debug) << "FairMQ " << FAIRMQ_GIT_VERSION << " build " + << FAIRMQ_BUILD_TYPE; + + fair::mq::sdk::DDSEnvironment ddsEnv; + LOG(debug) << ddsEnv; + + fair::mq::sdk::DDSSession ddsSession(ddsEnv); + ddsSession.StopOnDestruction(); + LOG(debug) << ddsSession; + + fair::mq::sdk::DDSTopology ddsTopo( + "@FairMQ_DATADIR@/ex-dds-topology-infinite.xml", ddsEnv); + LOG(debug) << ddsTopo; + + ddsSession.SubmitAgents(ddsTopo.GetNumRequiredAgents()); + + ddsSession.ActivateTopology(ddsTopo); + + for (const auto &ddsAgent : ddsSession.RequestAgentInfo()) { + LOG(debug) << ddsAgent; + } + + fair::mq::sdk::Topology fairmqTopo(ddsTopo, ddsSession); + + using fair::mq::sdk::TopologyTransition; + for (auto transition : + {TopologyTransition::InitDevice, TopologyTransition::CompleteInit, + TopologyTransition::Bind, TopologyTransition::Connect, + TopologyTransition::InitTask, TopologyTransition::Run, + TopologyTransition::Stop, TopologyTransition::ResetTask, + TopologyTransition::ResetDevice, TopologyTransition::End}) { + auto [ec, states] = + fairmqTopo.ChangeState(transition, std::chrono::milliseconds(300)); + if (!ec) { + // End transition does not yet wait for devices to acknowledge in v1.4.8 + if (transition != TopologyTransition::End) { + LOG(info) << states.size() << " devices transitioned to " + << fair::mq::sdk::AggregateState(states); + } + } else { + LOG(error) << ec; + return ec.value(); + } + } + + return 0; +}