24 #include "cheetah/pipeline/test/BeamLauncherTest.h" 25 #include "cheetah/pipeline/BeamLauncher.h" 26 #include "cheetah/data/TimeFrequency.h" 27 #include "panda/test/TestProducer.h" 28 #include "cheetah/pipeline/Empty.h" 29 #include "cheetah/sigproc/Config.h" 30 #include "cheetah/sigproc/SigProcFileStream.h" 38 BeamLauncherTest::BeamLauncherTest()
43 BeamLauncherTest::~BeamLauncherTest()
47 void BeamLauncherTest::SetUp()
51 void BeamLauncherTest::TearDown()
61 void add_options(OptionsDescriptionEasyInit&) {};
64 typedef panda::test::TestProducer<data::TimeFrequency<Cpu, uint8_t>> TestStream;
72 volatile unsigned _operator_called;
77 : BaseT(_cheetah_config, beam_config)
78 , _operator_called(0) {}
83 PANDA_LOG_DEBUG <<
"Operator called";
86 volatile unsigned& operator_called() {
87 return _operator_called;
110 throw std::runtime_error(
"oh oh");
114 bool has_thrown()
const {
124 unsigned exec_factory_called = 0;
127 unsigned config_factory_called = 0;
129 ASSERT_EQ(config_factory_called, 0U);
131 ASSERT_EQ(0, launcher.exec());
132 ASSERT_EQ(exec_factory_called, 0U);
140 mb_config.add(beam1);
144 unsigned exec_factory_called = 0;
147 unsigned config_factory_called = 0;
151 for (std::uint32_t ii =0 ; ii < launcher.streams().size(); ++ii)
153 *(launcher.streams()[ii]) << test_data;
156 ASSERT_EQ(config_factory_called, 0U);
158 ASSERT_EQ(0, launcher.exec());
159 ASSERT_EQ(exec_factory_called, 0U);
167 mb_config.add(beam1);
170 std::shared_ptr<data::TimeFrequency<Cpu,uint8_t>> test_data = std::make_shared<data::TimeFrequency<Cpu, uint8_t>>();
172 unsigned exec_factory_called = 0;
174 auto factory = [&](
BeamConfig<uint8_t> const& beam_config) { ++exec_factory_called; test_pipeline =
new TestPipeline(beam_config);
return test_pipeline; };
176 unsigned config_factory_called = 0;
180 ASSERT_EQ(config_factory_called, 1U);
181 ASSERT_EQ(exec_factory_called, 1U);
184 std::thread th1([&]() {
188 volatile bool is_running=launcher.is_running();
190 is_running=launcher.is_running();
194 for (std::uint32_t ii = 0 ; ii < launcher.streams().size(); ++ii)
196 *(launcher.streams()[ii]) << *test_data;
199 ASSERT_NE(
nullptr, test_pipeline);
202 volatile unsigned op_called;
204 op_called=test_pipeline->operator_called();
205 }
while(op_called == 0);
206 EXPECT_EQ(test_pipeline->operator_called(), 1U);
211 PANDA_LOG_DEBUG <<
"exception caught";
226 mb_config.add(beam1);
227 mb_config.add(beam2);
232 unsigned exec_factory_called = 0;
234 auto factory = [&](
BeamConfig<uint8_t> const& beam_config) { ++exec_factory_called; test_pipeline =
new TestPipeline(beam_config);
return test_pipeline; };
236 unsigned config_factory_called = 0;
238 ASSERT_EQ(config_factory_called, 2U);
239 ASSERT_EQ(exec_factory_called, 2U);
242 for (std::uint32_t ii =0 ; ii < launcher.streams().size(); ++ii)
244 *(launcher.streams()[ii]) << test_data;
247 std::thread th1([&]() { launcher.exec(); });
248 volatile bool is_running=launcher.is_running();
250 is_running=launcher.is_running();
255 volatile unsigned op_called=test_pipeline->operator_called();
256 while(op_called == 0)
258 op_called=test_pipeline->operator_called();
260 ASSERT_EQ(test_pipeline->operator_called(), 1U);
280 mb_config.add(beam1);
281 mb_config.add(beam2);
285 unsigned exec_factory_called = 0;
287 auto factory = [&](
BeamConfig<uint8_t> const& beam_config) { ++exec_factory_called; test_pipeline =
new TestPipeline(beam_config);
return test_pipeline; };
289 unsigned config_factory_called = 0;
291 ASSERT_EQ(config_factory_called, 1U);
292 ASSERT_EQ(exec_factory_called, 1U);
295 for (std::uint32_t ii =0 ; ii < launcher.streams().size(); ++ii)
297 *(launcher.streams()[ii]) << test_data;
300 std::thread th1([&]() { launcher.exec(); });
301 volatile bool is_running=launcher.is_running();
303 is_running=launcher.is_running();
308 volatile unsigned op_called;
310 op_called=test_pipeline->operator_called();
311 }
while(op_called == 0);
312 ASSERT_EQ(test_pipeline->operator_called(), 1U);
329 mb_config.add(beam1);
332 std::shared_ptr<data::TimeFrequency<Cpu,uint8_t>> test_data = std::make_shared<data::TimeFrequency<Cpu, uint8_t>>();
339 std::thread th1([&]() {
343 ASSERT_NE(
nullptr, exception_pipeline);
346 for (std::uint32_t ii = 0 ; ii < launcher.streams().size(); ++ii)
348 *(launcher.streams()[ii]) << *test_data;
353 volatile unsigned ex_op;
355 ex_op = exception_pipeline->operator_called();
357 ASSERT_EQ(exception_pipeline->operator_called(), 1U);
358 ASSERT_TRUE(exception_pipeline->has_thrown());
363 PANDA_LOG_DEBUG <<
"unexpected exception thrown - cleaning up test";
void active(bool status)
set the enabled status of the beam
void join()
Wait for threads to finish.
Some limits and constants for FLDO.
void operator()(TimeFrequencyType &) override
called each time data becomes available
Parse configuration parameters for a single beam in the pipeline instance of cheetah.
Base class for Cheetah Pipeline Handlers.
void operator()(TimeFrequencyType &) override
called each time data becomes available