@@ -899,12 +899,7 @@ mod tests {
899899 {
900900 cass_cluster_set_token_aware_routing ( cluster_raw, 0 ) ;
901901 assert_cass_error_eq ! (
902- cass_cluster_set_load_balance_dc_aware(
903- cluster_raw,
904- "eu\0 " . as_ptr( ) as * const i8 ,
905- 0 ,
906- 0
907- ) ,
902+ cass_cluster_set_load_balance_dc_aware( cluster_raw, c"eu" . as_ptr( ) , 0 , 0 ) ,
908903 CassError :: CASS_OK
909904 ) ;
910905 cass_cluster_set_latency_aware_routing ( cluster_raw, 1 ) ;
@@ -929,25 +924,98 @@ mod tests {
929924 }
930925 assert ! ( !cluster. load_balancing_config. token_awareness_enabled) ;
931926 assert ! ( cluster. load_balancing_config. latency_awareness_enabled) ;
927+
928+ // set preferred rack+dc
929+ assert_cass_error_eq ! (
930+ cass_cluster_set_load_balance_rack_aware(
931+ cluster_raw,
932+ c"eu-east" . as_ptr( ) ,
933+ c"rack1" . as_ptr( ) ,
934+ ) ,
935+ CassError :: CASS_OK
936+ ) ;
937+
938+ let node_location_preference =
939+ & cluster. load_balancing_config . node_location_preference ;
940+ match node_location_preference {
941+ NodeLocationPreference :: DatacenterAndRack {
942+ local_dc,
943+ local_rack,
944+ } => {
945+ assert_eq ! ( local_dc, "eu-east" ) ;
946+ assert_eq ! ( local_rack, "rack1" ) ;
947+ }
948+ _ => panic ! ( "Expected preferred dc and rack" ) ,
949+ }
950+
951+ // set back to preferred dc
952+ assert_cass_error_eq ! (
953+ cass_cluster_set_load_balance_dc_aware( cluster_raw, c"eu" . as_ptr( ) , 0 , 0 ) ,
954+ CassError :: CASS_OK
955+ ) ;
956+
957+ let node_location_preference =
958+ & cluster. load_balancing_config . node_location_preference ;
959+ match node_location_preference {
960+ NodeLocationPreference :: Datacenter { local_dc } => {
961+ assert_eq ! ( local_dc, "eu" )
962+ }
963+ _ => panic ! ( "Expected preferred dc" ) ,
964+ }
932965 }
933966 /* Test invalid configurations */
934967 {
935968 // Nonzero deprecated parameters
936969 assert_cass_error_eq ! (
937- cass_cluster_set_load_balance_dc_aware(
970+ cass_cluster_set_load_balance_dc_aware( cluster_raw, c"eu" . as_ptr( ) , 1 , 0 ) ,
971+ CassError :: CASS_ERROR_LIB_BAD_PARAMS
972+ ) ;
973+ assert_cass_error_eq ! (
974+ cass_cluster_set_load_balance_dc_aware( cluster_raw, c"eu" . as_ptr( ) , 0 , 1 ) ,
975+ CassError :: CASS_ERROR_LIB_BAD_PARAMS
976+ ) ;
977+
978+ // null pointers
979+ assert_cass_error_eq ! (
980+ cass_cluster_set_load_balance_dc_aware( cluster_raw, std:: ptr:: null( ) , 0 , 0 ) ,
981+ CassError :: CASS_ERROR_LIB_BAD_PARAMS
982+ ) ;
983+ assert_cass_error_eq ! (
984+ cass_cluster_set_load_balance_rack_aware(
985+ cluster_raw,
986+ c"eu" . as_ptr( ) ,
987+ std:: ptr:: null( ) ,
988+ ) ,
989+ CassError :: CASS_ERROR_LIB_BAD_PARAMS
990+ ) ;
991+ assert_cass_error_eq ! (
992+ cass_cluster_set_load_balance_rack_aware(
993+ cluster_raw,
994+ std:: ptr:: null( ) ,
995+ c"rack" . as_ptr( ) ,
996+ ) ,
997+ CassError :: CASS_ERROR_LIB_BAD_PARAMS
998+ ) ;
999+
1000+ // empty strings
1001+ let empty_str = "\0 " . as_ptr ( ) as * const i8 ;
1002+ assert_cass_error_eq ! (
1003+ cass_cluster_set_load_balance_dc_aware( cluster_raw, std:: ptr:: null( ) , 0 , 0 ) ,
1004+ CassError :: CASS_ERROR_LIB_BAD_PARAMS
1005+ ) ;
1006+ assert_cass_error_eq ! (
1007+ cass_cluster_set_load_balance_rack_aware(
9381008 cluster_raw,
939- "eu\0 " . as_ptr( ) as * const i8 ,
940- 1 ,
941- 0
1009+ c"eu" . as_ptr( ) ,
1010+ empty_str,
9421011 ) ,
9431012 CassError :: CASS_ERROR_LIB_BAD_PARAMS
9441013 ) ;
9451014 assert_cass_error_eq ! (
946- cass_cluster_set_load_balance_dc_aware (
1015+ cass_cluster_set_load_balance_rack_aware (
9471016 cluster_raw,
948- "eu\0 " . as_ptr( ) as * const i8 ,
949- 0 ,
950- 1
1017+ empty_str,
1018+ c"rack" . as_ptr( ) ,
9511019 ) ,
9521020 CassError :: CASS_ERROR_LIB_BAD_PARAMS
9531021 ) ;
0 commit comments