@@ -476,6 +476,57 @@ TEST_F(GatewayTest, LegacyRPCv1Event)
476476 gateway.unsubscribe (" test.onEvent" , &eventPromise);
477477}
478478
479+ TEST_F (GatewayTest, LegacyRPCv1Event_array)
480+ {
481+ std::promise<nlohmann::json> eventPromise;
482+ auto eventFuture = eventPromise.get_future ();
483+
484+ m_messageHandler = [this ](connection_hdl hdl, server::message_ptr msg)
485+ {
486+ auto request = nlohmann::json::parse (msg->get_payload ());
487+ if (request[" method" ].get <std::string>().find (" .onEvent" ) != std::string::npos)
488+ {
489+ nlohmann::json response;
490+ response[" jsonrpc" ] = " 2.0" ;
491+ response[" id" ] = request[" id" ];
492+ response[" result" ][" listening" ] = true ;
493+ m_server.send (hdl, response.dump (), msg->get_opcode ());
494+
495+ nlohmann::json legacyEvent;
496+ legacyEvent[" jsonrpc" ] = " 2.0" ;
497+ legacyEvent[" id" ] = request[" id" ];
498+ legacyEvent[" result" ] = {{{" fired" , true }}};
499+ m_server.send (hdl, legacyEvent.dump (), msg->get_opcode ());
500+ }
501+ };
502+
503+ startServer ();
504+ IGateway& gateway = GetGatewayInstance ();
505+ auto connectionFuture = m_connectionPromise.get_future ();
506+
507+ Firebolt::Config cfg = getTestConfig ();
508+ cfg.legacyRPCv1 = true ;
509+ Firebolt::Error connectErr = gateway.connect (cfg, [this ](bool connected, const Firebolt::Error& err)
510+ { onConnectionChange (connected, err); });
511+ ASSERT_EQ (connectErr, Firebolt::Error::None);
512+
513+ ASSERT_EQ (connectionFuture.wait_for (std::chrono::seconds (2 )), std::future_status::ready);
514+
515+ auto onEvent = [](void * usercb, const nlohmann::json& params)
516+ { static_cast <std::promise<nlohmann::json>*>(usercb)->set_value (params); };
517+
518+ Firebolt::Error err = gateway.subscribe (" test.onEvent" , onEvent, &eventPromise);
519+ EXPECT_EQ (err, Firebolt::Error::None);
520+
521+ auto eventStatus = eventFuture.wait_for (std::chrono::seconds (2 ));
522+ ASSERT_EQ (eventStatus, std::future_status::ready) << " Legacy event was not received" ;
523+
524+ nlohmann::json eventParams = eventFuture.get ();
525+ EXPECT_TRUE (eventParams[0 ][" fired" ].get <bool >());
526+
527+ gateway.unsubscribe (" test.onEvent" , &eventPromise);
528+ }
529+
479530TEST_F (GatewayTest, UnsubscribeFromCallbackDoesNotDeadlock)
480531{
481532 m_messageHandler = [this ](connection_hdl hdl, server::message_ptr msg)
0 commit comments