@@ -90,6 +90,10 @@ rmqt::FieldTable generateDefaultClientProperties(
9090 rmqt::FieldValue (bsl::string (rmqamqpt::Constants::PRODUCT));
9191 props[" version" ] =
9292 rmqt::FieldValue (bsl::string (rmqamqpt::Constants::VERSION));
93+ props[" product_chain" ] =
94+ rmqt::FieldValue (bsl::string (rmqamqpt::Constants::PRODUCT));
95+ props[" version_chain" ] =
96+ rmqt::FieldValue (bsl::string (rmqamqpt::Constants::VERSION));
9397
9498 if (!connectionName.empty ()) {
9599 props[" connection_name" ] = rmqt::FieldValue (connectionName);
@@ -405,7 +409,7 @@ class ConnectionTests : public ::testing::Test {
405409 , d_sendChannel(bsl::make_shared<MockSendChannel>(d_retryHandlerChannel))
406410 , d_ackQueue(bsl::make_shared<rmqt::ConsumerAckQueue>())
407411 , d_metricPublisher(bsl::make_shared<rmqtestutil::MockMetricPublisher>())
408- , d_clientProperties(generateDefaultClientProperties() )
412+ , d_clientProperties()
409413 , d_factory(bsl::make_shared<ConnectionFactory>(d_resolver,
410414 d_timerFactory,
411415 d_errorCallback,
@@ -679,21 +683,23 @@ TEST_F(ConnectionTests, Handshake)
679683
680684TEST_F (ConnectionTests, ClientProperties)
681685{
682- rmqt::FieldTable overriddenClientProperties =
683- generateDefaultClientProperties ();
684- overriddenClientProperties[ " FOO " ] =
685- rmqt::FieldValue ( bsl::string ( " BAR " )); // Add one more
686+ rmqt::FieldTable inputClientProperties;
687+ inputClientProperties[ " FOO " ] =
688+ rmqt::FieldValue ( bsl::string ( " BAR " )); // Add a custom property
689+
686690 d_factory = bsl::make_shared<ConnectionFactory>(d_resolver,
687691 d_timerFactory,
688692 d_errorCallback,
689693 d_metricPublisher,
690- overriddenClientProperties ,
694+ inputClientProperties ,
691695 d_retryHandler,
692696 d_heartbeat,
693697 d_channelFactory);
694698
695- expectHeaderAndStartFrames (
696- overriddenClientProperties); // check it's as expected
699+ rmqt::FieldTable expectedProperties =
700+ generateDefaultClientProperties (" test-connection" );
701+ expectedProperties[" FOO" ] = rmqt::FieldValue (bsl::string (" BAR" ));
702+ expectHeaderAndStartFrames (expectedProperties);
697703 expectTuneFrames ();
698704 expectOpenFrame ();
699705
@@ -709,45 +715,152 @@ TEST_F(ConnectionTests, ClientProperties)
709715 d_eventLoop.run ();
710716}
711717
712- TEST_F (ConnectionTests, ClientPropertiesCantOverrideReservedOnes )
718+ TEST_F (ConnectionTests, ClientPropertiesCantOverrideConnectionName )
713719{
714- rmqt::FieldTable overriddenClientProperties =
715- generateDefaultClientProperties (" my random connection name" );
716- overriddenClientProperties[" platform" ] = rmqt::FieldValue (
717- bsl::string (" Should get overriden by library" )); // Add one more
718- overriddenClientProperties[" product" ] = rmqt::FieldValue (
719- bsl::string (" Should get overriden by library" )); // Add one more
720- overriddenClientProperties[" version" ] = rmqt::FieldValue (
721- bsl::string (" Should get overriden by library" )); // Add one more
722- overriddenClientProperties[" connection_name" ] = rmqt::FieldValue (
723- bsl::string (" Should get overriden by library" )); // Add one more
720+ rmqt::FieldTable inputClientProperties;
721+ inputClientProperties[" connection_name" ] =
722+ rmqt::FieldValue (bsl::string (" Should get overriden by library" ));
724723 d_factory = bsl::make_shared<ConnectionFactory>(d_resolver,
725724 d_timerFactory,
726725 d_errorCallback,
727726 d_metricPublisher,
728- overriddenClientProperties ,
727+ inputClientProperties ,
729728 d_retryHandler,
730729 d_heartbeat,
731730 d_channelFactory);
732731
733732 expectHeaderAndStartFrames (generateDefaultClientProperties (
734- " my real connection name" )); // despite setting overrides, the library
735- // has the final say
733+ " my real connection name" )); // connection_name is still reserved
736734 expectTuneFrames ();
737735 expectOpenFrame ();
738736
739737 {
740738 bsl::shared_ptr<rmqamqp::Connection> conn =
741739 createAndStartConnection (" my real connection name" );
742740
743- // 1. Handshake up to open with custom client properties
744741 d_eventLoop.run ();
745742 d_eventLoop.restart ();
746743
747744 expectShutdownCalls ();
748745 }
749746
750- // 2. Shutdown cleanly
747+ d_eventLoop.run ();
748+ }
749+
750+ TEST_F (ConnectionTests, ClientPropertiesDefaultsWhenNoneProvided)
751+ {
752+ rmqt::FieldTable emptyClientProperties;
753+ d_factory = bsl::make_shared<ConnectionFactory>(d_resolver,
754+ d_timerFactory,
755+ d_errorCallback,
756+ d_metricPublisher,
757+ emptyClientProperties,
758+ d_retryHandler,
759+ d_heartbeat,
760+ d_channelFactory);
761+
762+ expectHeaderAndStartFrames (
763+ generateDefaultClientProperties (" my connection" ));
764+ expectTuneFrames ();
765+ expectOpenFrame ();
766+
767+ {
768+ bsl::shared_ptr<rmqamqp::Connection> conn =
769+ createAndStartConnection (" my connection" );
770+
771+ d_eventLoop.run ();
772+ d_eventLoop.restart ();
773+
774+ expectShutdownCalls ();
775+ }
776+
777+ d_eventLoop.run ();
778+ }
779+
780+ TEST_F (ConnectionTests, ClientPropertiesCanOverrideProductAndVersion)
781+ {
782+ rmqt::FieldTable overriddenClientProperties;
783+ overriddenClientProperties[" product" ] =
784+ rmqt::FieldValue (bsl::string (" xyzlib" ));
785+ overriddenClientProperties[" version" ] =
786+ rmqt::FieldValue (bsl::string (" 4.5.6" ));
787+ d_factory = bsl::make_shared<ConnectionFactory>(d_resolver,
788+ d_timerFactory,
789+ d_errorCallback,
790+ d_metricPublisher,
791+ overriddenClientProperties,
792+ d_retryHandler,
793+ d_heartbeat,
794+ d_channelFactory);
795+
796+ rmqt::FieldTable expectedProperties =
797+ generateDefaultClientProperties (" my connection" );
798+ expectedProperties[" product" ] = rmqt::FieldValue (bsl::string (" xyzlib" ));
799+ expectedProperties[" version" ] = rmqt::FieldValue (bsl::string (" 4.5.6" ));
800+ expectedProperties[" product_chain" ] = rmqt::FieldValue (
801+ bsl::string (" xyzlib | " ) + bsl::string (rmqamqpt::Constants::PRODUCT));
802+ expectedProperties[" version_chain" ] = rmqt::FieldValue (
803+ bsl::string (" 4.5.6 | " ) + bsl::string (rmqamqpt::Constants::VERSION));
804+ expectHeaderAndStartFrames (expectedProperties);
805+ expectTuneFrames ();
806+ expectOpenFrame ();
807+
808+ {
809+ bsl::shared_ptr<rmqamqp::Connection> conn =
810+ createAndStartConnection (" my connection" );
811+
812+ d_eventLoop.run ();
813+ d_eventLoop.restart ();
814+
815+ expectShutdownCalls ();
816+ }
817+
818+ d_eventLoop.run ();
819+ }
820+
821+ TEST_F (ConnectionTests, ClientPropertiesWrapperSetsChains)
822+ {
823+ rmqt::FieldTable wrapperClientProperties;
824+ wrapperClientProperties[" product" ] =
825+ rmqt::FieldValue (bsl::string (" rmqcpp-wrapper" ));
826+ wrapperClientProperties[" version" ] = rmqt::FieldValue (bsl::string (" 1.2.3" ));
827+ wrapperClientProperties[" product_chain" ] =
828+ rmqt::FieldValue (bsl::string (" rmqcpp-wrapper" ));
829+ wrapperClientProperties[" version_chain" ] =
830+ rmqt::FieldValue (bsl::string (" 1.2.3" ));
831+ d_factory = bsl::make_shared<ConnectionFactory>(d_resolver,
832+ d_timerFactory,
833+ d_errorCallback,
834+ d_metricPublisher,
835+ wrapperClientProperties,
836+ d_retryHandler,
837+ d_heartbeat,
838+ d_channelFactory);
839+
840+ rmqt::FieldTable expectedProperties =
841+ generateDefaultClientProperties (" my connection" );
842+ expectedProperties[" product" ] =
843+ rmqt::FieldValue (bsl::string (" rmqcpp-wrapper" ));
844+ expectedProperties[" version" ] = rmqt::FieldValue (bsl::string (" 1.2.3" ));
845+ expectedProperties[" product_chain" ] =
846+ rmqt::FieldValue (bsl::string (" rmqcpp-wrapper | " ) +
847+ bsl::string (rmqamqpt::Constants::PRODUCT));
848+ expectedProperties[" version_chain" ] = rmqt::FieldValue (
849+ bsl::string (" 1.2.3 | " ) + bsl::string (rmqamqpt::Constants::VERSION));
850+ expectHeaderAndStartFrames (expectedProperties);
851+ expectTuneFrames ();
852+ expectOpenFrame ();
853+
854+ {
855+ bsl::shared_ptr<rmqamqp::Connection> conn =
856+ createAndStartConnection (" my connection" );
857+
858+ d_eventLoop.run ();
859+ d_eventLoop.restart ();
860+
861+ expectShutdownCalls ();
862+ }
863+
751864 d_eventLoop.run ();
752865}
753866
0 commit comments