27namespace observerCtrlTest
34 observerCtrl_test(
const std::string &device )
36 m_configName = device;
44 void configureStreamWriters(
const std::vector<std::string> &writers,
45 const std::vector<std::string> &defWriters = std::vector<std::string>() )
47 m_streamWriters = writers;
48 m_defStreamWriters = defWriters;
50 m_indiP_sws = pcf::IndiProperty( pcf::IndiProperty::Switch );
51 m_indiP_sws.setDevice( m_configName );
52 m_indiP_sws.setName(
"writers" );
53 m_indiP_sws.setPerm( pcf::IndiProperty::ReadWrite );
54 m_indiP_sws.setState( pcf::IndiProperty::Idle );
55 m_indiP_sws.setRule( pcf::IndiProperty::AnyOfMany );
57 m_indiP_streamWriterWriting.clear();
58 m_streamWriterSelectable.clear();
59 m_streamWriterDevices.clear();
60 m_streamWriterWriting.clear();
61 m_streamWriterWritingKnown.clear();
62 m_streamWriterStartedByObserver.clear();
63 m_indiSetCallBacks.clear();
65 for(
const auto &writer : writers )
67 m_indiP_sws.add( pcf::IndiElement( writer, pcf::IndiElement::Off ) );
68 REQUIRE( registerStreamWriter( writer,
true ) == 0 );
71 for(
const auto &writer : defWriters )
73 REQUIRE( registerStreamWriter( writer,
false ) == 0 );
77 void setWriterSelected(
const std::string &writerName, pcf::IndiElement::SwitchStateType state )
79 m_indiP_sws[writerName].setSwitchState( state );
82 int setWriterWritingState(
const std::string &writerName, pcf::IndiElement::SwitchStateType state )
84 pcf::IndiProperty ip( pcf::IndiProperty::Switch );
86 ip.setDevice( streamWriterDeviceName( writerName ) );
87 ip.setName(
"writing" );
88 ip.add( pcf::IndiElement(
"toggle" ) );
89 ip[
"toggle"].setSwitchState( state );
91 return setCallBack_streamWriterWriting( ip );
94 bool beginWriter(
const std::string &writerName )
96 return beginObservationStreamWriter( writerName );
99 bool endWriter(
const std::string &writerName )
101 return endObservationStreamWriter( writerName );
104 bool writerWritingKnown(
const std::string &writerName )
const
106 return m_streamWriterWritingKnown.at( writerName );
109 bool writerWriting(
const std::string &writerName )
const
111 return m_streamWriterWriting.at( writerName );
114 bool writerExposed(
const std::string &writerName )
const
116 return m_indiP_sws.find( writerName );
125TEST_CASE(
"observerCtrl INDI callbacks validate device and property names",
"[observerCtrl]" )
128 #ifdef OBSERVERCTRL_TEST_DOXYGEN_REF
129 observerCtrl::newCallBack_m_indiP_observers( pcf::IndiProperty() );
130 observerCtrl::newCallBack_m_indiP_obsName( pcf::IndiProperty() );
131 observerCtrl::newCallBack_m_indiP_observing( pcf::IndiProperty() );
132 observerCtrl::newCallBack_m_indiP_sws( pcf::IndiProperty() );
146TEST_CASE(
"observerCtrl tracks remote stream writer writing state",
"[observerCtrl]" )
149 #ifdef OBSERVERCTRL_TEST_DOXYGEN_REF
154 observerCtrl_test app(
"observerCtrl_test" );
155 app.configureStreamWriters( {
"camwfs" } );
157 REQUIRE_FALSE( app.writerWritingKnown(
"camwfs" ) );
159 REQUIRE( app.setWriterWritingState(
"camwfs", pcf::IndiElement::On ) == 0 );
160 REQUIRE( app.writerWritingKnown(
"camwfs" ) );
161 REQUIRE( app.writerWriting(
"camwfs" ) );
163 REQUIRE( app.setWriterWritingState(
"camwfs", pcf::IndiElement::Off ) == 0 );
164 REQUIRE_FALSE( app.writerWriting(
"camwfs" ) );
171TEST_CASE(
"observerCtrl only stops stream writers it started",
"[observerCtrl]" )
174 #ifdef OBSERVERCTRL_TEST_DOXYGEN_REF
180 observerCtrl_test app(
"observerCtrl_test" );
181 app.configureStreamWriters( {
"camsci1",
"camwfs" } );
183 app.setWriterSelected(
"camsci1", pcf::IndiElement::On );
184 app.setWriterSelected(
"camwfs", pcf::IndiElement::On );
186 REQUIRE( app.setWriterWritingState(
"camsci1", pcf::IndiElement::On ) == 0 );
187 REQUIRE( app.setWriterWritingState(
"camwfs", pcf::IndiElement::Off ) == 0 );
189 REQUIRE_FALSE( app.beginWriter(
"camsci1" ) );
190 REQUIRE( app.beginWriter(
"camwfs" ) );
192 REQUIRE_FALSE( app.endWriter(
"camsci1" ) );
193 REQUIRE( app.endWriter(
"camwfs" ) );
194 REQUIRE_FALSE( app.endWriter(
"camwfs" ) );
201TEST_CASE(
"observerCtrl default stream writers are managed but not selectable",
"[observerCtrl]" )
203 observerCtrl_test app(
"observerCtrl_test" );
204 app.configureStreamWriters( {
"camsci1" }, {
"camlowfs" } );
206 REQUIRE( app.writerExposed(
"camsci1" ) );
207 REQUIRE_FALSE( app.writerExposed(
"camlowfs" ) );
209 REQUIRE( app.setWriterWritingState(
"camlowfs", pcf::IndiElement::Off ) == 0 );
210 REQUIRE( app.beginWriter(
"camlowfs" ) );
211 REQUIRE( app.endWriter(
"camlowfs" ) );
218TEST_CASE(
"observerCtrl does not stop writers with unknown initial state",
"[observerCtrl]" )
220 observerCtrl_test app(
"observerCtrl_test" );
221 app.configureStreamWriters( {}, {
"camlowfs" } );
223 REQUIRE( app.beginWriter(
"camlowfs" ) );
224 REQUIRE_FALSE( app.endWriter(
"camlowfs" ) );