66#undef SUITE_NAME
77#define SUITE_NAME DServerMiscTestSuite
88
9+ template <typename TEvent>
910struct EventCallback : public Tango ::CallBack
1011{
1112 EventCallback ()
1213 : num_of_all_events(0 )
1314 , num_of_error_events(0 )
1415 {}
1516
16- void push_event (Tango::EventData * event)
17+ void push_event (TEvent * event)
1718 {
1819 num_of_all_events++;
1920 if (event->err )
@@ -229,7 +230,7 @@ cout << "str = " << str << endl;
229230 */
230231 void test_event_subscription_recovery_after_device_restart ()
231232 {
232- EventCallback callback{};
233+ EventCallback<Tango::EventData> callback{};
233234
234235 std::string attribute_name = " event_change_tst" ;
235236
@@ -255,6 +256,37 @@ cout << "str = " << str << endl;
255256 TS_ASSERT_EQUALS (0 , callback.num_of_error_events );
256257 }
257258
259+ /* Tests that attribute configuration change event
260+ * is sent to all subscribers after device restart.
261+ */
262+ void test_attr_conf_change_event_after_device_restart ()
263+ {
264+ EventCallback<Tango::AttrConfEventData> callback{};
265+
266+ const std::string attribute_name = " event_change_tst" ;
267+
268+ int subscription = 0 ;
269+ TS_ASSERT_THROWS_NOTHING (subscription = device1->subscribe_event (
270+ attribute_name,
271+ Tango::ATTR_CONF_EVENT,
272+ &callback));
273+
274+ Tango_sleep (1 );
275+ TS_ASSERT_EQUALS (1 , callback.num_of_all_events );
276+ TS_ASSERT_EQUALS (0 , callback.num_of_error_events );
277+
278+ {
279+ Tango::DeviceData input{};
280+ input << device1_name;
281+ TS_ASSERT_THROWS_NOTHING (dserver->command_inout (" DevRestart" , input));
282+ }
283+
284+ Tango_sleep (1 );
285+ TS_ASSERT_EQUALS (2 , callback.num_of_all_events );
286+ TS_ASSERT_EQUALS (0 , callback.num_of_error_events );
287+
288+ TS_ASSERT_THROWS_NOTHING (device1->unsubscribe_event (subscription));
289+ }
258290};
259291#undef cout
260292#endif // DServerMiscTestSuite_h
0 commit comments