@@ -643,17 +643,13 @@ TEST_F(SessionUnitTest, HostListenerNodeDown) {
643643}
644644
645645TEST_F (SessionUnitTest, LocalDcUpdatedOnPolicy) {
646- mockssandra::SimpleCluster cluster (simple (), 3 , 2 );
646+ mockssandra::SimpleCluster cluster (simple (), 3 , 1 );
647647 ASSERT_EQ (cluster.start_all (), 0 );
648648
649649 TestHostListener::Ptr listener (new TestHostListener ());
650650
651651 Config config;
652- config.contact_points ().push_back (Address (" 127.0.0.1" , 9042 ));
653- config.set_use_randomized_contact_points (
654- false ); // Ensure round robin order over DC for query execution
655- config.set_token_aware_routing (false );
656- config.set_load_balancing_policy (new DCAwarePolicy (" dc1" ));
652+ config.contact_points ().push_back (Address (" 127.0.0.4" , 9042 ));
657653 config.set_cluster_metadata_resolver_factory (
658654 ClusterMetadataResolverFactory::Ptr (new LocalDcClusterMetadataResolverFactory (" dc2" )));
659655 config.set_host_listener (listener);
@@ -666,22 +662,168 @@ TEST_F(SessionUnitTest, LocalDcUpdatedOnPolicy) {
666662 listener->wait_for_event (WAIT_FOR_TIME));
667663 EXPECT_EQ (HostEventFuture::Event (HostEventFuture::START_NODE, Address (" 127.0.0.4" , 9042 )),
668664 listener->wait_for_event (WAIT_FOR_TIME));
669- EXPECT_EQ (HostEventFuture::Event (HostEventFuture::ADD_NODE, Address (" 127.0.0.5" , 9042 )),
665+ }
666+
667+ for (int i = 0 ; i < 20 ; ++i) { // Validate the request processors are using DC2 only
668+ QueryRequest::Ptr request (new QueryRequest (" blah" , 0 ));
669+
670+ ResponseFuture::Ptr future = session.execute (request, NULL );
671+ EXPECT_TRUE (future->wait_for (WAIT_FOR_TIME));
672+ EXPECT_FALSE (future->error ());
673+ EXPECT_EQ (" 127.0.0.4" , future->address ().to_string ());
674+ }
675+
676+ close (&session);
677+
678+ ASSERT_EQ (0u , listener->event_count ());
679+ }
680+
681+ TEST_F (SessionUnitTest, LocalDcNotOverriddenOnPolicy) {
682+ mockssandra::SimpleCluster cluster (simple (), 1 , 3 );
683+ ASSERT_EQ (cluster.start_all (), 0 );
684+
685+ TestHostListener::Ptr listener (new TestHostListener ());
686+
687+ Config config;
688+ config.contact_points ().push_back (Address (" 127.0.0.1" , 9042 ));
689+ config.set_load_balancing_policy (new DCAwarePolicy (" dc1" ));
690+ config.set_cluster_metadata_resolver_factory (
691+ ClusterMetadataResolverFactory::Ptr (new LocalDcClusterMetadataResolverFactory (" dc2" )));
692+ config.set_host_listener (listener);
693+
694+ Session session;
695+ connect (config, &session);
696+
697+ { // Initial nodes available from peers table (should be DC1)
698+ EXPECT_EQ (HostEventFuture::Event (HostEventFuture::ADD_NODE, Address (" 127.0.0.1" , 9042 )),
670699 listener->wait_for_event (WAIT_FOR_TIME));
671- EXPECT_EQ (HostEventFuture::Event (HostEventFuture::START_NODE, Address (" 127.0.0.5 " , 9042 )),
700+ EXPECT_EQ (HostEventFuture::Event (HostEventFuture::START_NODE, Address (" 127.0.0.1 " , 9042 )),
672701 listener->wait_for_event (WAIT_FOR_TIME));
673702 }
674703
675- for (int i = 0 ; i < 20 ; ++i) { // Validate the request processors are using DC2 only
704+ for (int i = 0 ; i < 20 ; ++i) { // Validate the request processors are using DC1 only
676705 QueryRequest::Ptr request (new QueryRequest (" blah" , 0 ));
677706
678707 ResponseFuture::Ptr future = session.execute (request, NULL );
679708 EXPECT_TRUE (future->wait_for (WAIT_FOR_TIME));
680709 EXPECT_FALSE (future->error ());
710+ EXPECT_EQ (" 127.0.0.1" , future->address ().to_string ());
711+ }
712+
713+ close (&session);
714+
715+ ASSERT_EQ (0u , listener->event_count ());
716+ }
717+
718+ TEST_F (SessionUnitTest, LocalDcOverriddenOnPolicyUsingExecutionProfiles) {
719+ mockssandra::SimpleCluster cluster (simple (), 3 , 1 );
720+ ASSERT_EQ (cluster.start_all (), 0 );
721+
722+ TestHostListener::Ptr listener (new TestHostListener ());
723+
724+ Config config;
725+ config.contact_points ().push_back (Address (" 127.0.0.4" , 9042 ));
726+ config.set_use_randomized_contact_points (
727+ false ); // Ensure round robin order over DC for query execution
728+ config.set_cluster_metadata_resolver_factory (
729+ ClusterMetadataResolverFactory::Ptr (new LocalDcClusterMetadataResolverFactory (" dc2" )));
730+ config.set_host_listener (listener);
731+
732+ ExecutionProfile profile;
733+ profile.set_load_balancing_policy (new DCAwarePolicy ());
734+ config.set_execution_profile (" use_propagated_local_dc" , &profile);
735+
736+ Session session;
737+ connect (config, &session);
738+
739+ { // Initial nodes available from peers table (should be DC2)
740+ EXPECT_EQ (HostEventFuture::Event (HostEventFuture::ADD_NODE, Address (" 127.0.0.4" , 9042 )),
741+ listener->wait_for_event (WAIT_FOR_TIME));
742+ EXPECT_EQ (HostEventFuture::Event (HostEventFuture::START_NODE, Address (" 127.0.0.4" , 9042 )),
743+ listener->wait_for_event (WAIT_FOR_TIME));
744+ }
745+
746+ for (int i = 0 ; i < 20 ; ++i) { // Validate the default profile is using DC2 only
747+ QueryRequest::Ptr request (new QueryRequest (" blah" , 0 ));
681748
682- String expected_address = " 127.0.0." ;
683- expected_address.append ((i % 2 == 0 ) ? " 4" : " 5" );
684- EXPECT_EQ (expected_address, future->address ().to_string ());
749+ ResponseFuture::Ptr future = session.execute (request, NULL );
750+ EXPECT_TRUE (future->wait_for (WAIT_FOR_TIME));
751+ EXPECT_FALSE (future->error ());
752+ EXPECT_EQ (" 127.0.0.4" , future->address ().to_string ());
753+ }
754+
755+ for (int i = 0 ; i < 20 ; ++i) { // Validate the default profile is using DC2 only
756+ QueryRequest::Ptr request (new QueryRequest (" blah" , 0 ));
757+ request->set_execution_profile_name (" use_propagated_local_dc" );
758+
759+ ResponseFuture::Ptr future = session.execute (request, NULL );
760+ EXPECT_TRUE (future->wait_for (WAIT_FOR_TIME));
761+ EXPECT_FALSE (future->error ());
762+ EXPECT_EQ (" 127.0.0.4" , future->address ().to_string ());
763+ }
764+
765+ close (&session);
766+
767+ ASSERT_EQ (0u , listener->event_count ());
768+ }
769+
770+ TEST_F (SessionUnitTest, LocalDcNotOverriddenOnPolicyUsingExecutionProfiles) {
771+ mockssandra::SimpleCluster cluster (simple (), 3 , 1 );
772+ ASSERT_EQ (cluster.start_all (), 0 );
773+
774+ TestHostListener::Ptr listener (new TestHostListener ());
775+
776+ Config config;
777+ config.contact_points ().push_back (Address (" 127.0.0.4" , 9042 ));
778+ config.set_use_randomized_contact_points (
779+ false ); // Ensure round robin order over DC for query execution
780+ config.set_cluster_metadata_resolver_factory (
781+ ClusterMetadataResolverFactory::Ptr (new LocalDcClusterMetadataResolverFactory (" dc2" )));
782+ config.set_host_listener (listener);
783+
784+ ExecutionProfile profile;
785+ profile.set_load_balancing_policy (new DCAwarePolicy (" dc1" ));
786+ config.set_execution_profile (" use_dc1" , &profile);
787+
788+ Session session;
789+ connect (config, &session);
790+
791+ { // Initial nodes available from peers table (should be DC1 and DC2)
792+ EXPECT_EQ (HostEventFuture::Event (HostEventFuture::ADD_NODE, Address (" 127.0.0.1" , 9042 )),
793+ listener->wait_for_event (WAIT_FOR_TIME));
794+ EXPECT_EQ (HostEventFuture::Event (HostEventFuture::START_NODE, Address (" 127.0.0.1" , 9042 )),
795+ listener->wait_for_event (WAIT_FOR_TIME));
796+ EXPECT_EQ (HostEventFuture::Event (HostEventFuture::ADD_NODE, Address (" 127.0.0.2" , 9042 )),
797+ listener->wait_for_event (WAIT_FOR_TIME));
798+ EXPECT_EQ (HostEventFuture::Event (HostEventFuture::START_NODE, Address (" 127.0.0.2" , 9042 )),
799+ listener->wait_for_event (WAIT_FOR_TIME));
800+ EXPECT_EQ (HostEventFuture::Event (HostEventFuture::ADD_NODE, Address (" 127.0.0.3" , 9042 )),
801+ listener->wait_for_event (WAIT_FOR_TIME));
802+ EXPECT_EQ (HostEventFuture::Event (HostEventFuture::START_NODE, Address (" 127.0.0.3" , 9042 )),
803+ listener->wait_for_event (WAIT_FOR_TIME));
804+ EXPECT_EQ (HostEventFuture::Event (HostEventFuture::ADD_NODE, Address (" 127.0.0.4" , 9042 )),
805+ listener->wait_for_event (WAIT_FOR_TIME));
806+ EXPECT_EQ (HostEventFuture::Event (HostEventFuture::START_NODE, Address (" 127.0.0.4" , 9042 )),
807+ listener->wait_for_event (WAIT_FOR_TIME));
808+ }
809+
810+ for (int i = 0 ; i < 20 ; ++i) { // Validate the default profile is using DC2 only
811+ QueryRequest::Ptr request (new QueryRequest (" blah" , 0 ));
812+
813+ ResponseFuture::Ptr future = session.execute (request, NULL );
814+ EXPECT_TRUE (future->wait_for (WAIT_FOR_TIME));
815+ EXPECT_FALSE (future->error ());
816+ EXPECT_EQ (" 127.0.0.4" , future->address ().to_string ());
817+ }
818+
819+ for (int i = 0 ; i < 20 ; ++i) { // Validate the default profile is using DC1 only
820+ QueryRequest::Ptr request (new QueryRequest (" blah" , 0 ));
821+ request->set_execution_profile_name (" use_dc1" );
822+
823+ ResponseFuture::Ptr future = session.execute (request, NULL );
824+ EXPECT_TRUE (future->wait_for (WAIT_FOR_TIME));
825+ EXPECT_FALSE (future->error ());
826+ EXPECT_NE (" 127.0.0.4" , future->address ().to_string ());
685827 }
686828
687829 close (&session);
0 commit comments