@@ -942,12 +942,7 @@ mod tests {
942942 {
943943 cass_cluster_set_token_aware_routing ( cluster_raw, 0 ) ;
944944 assert_cass_error_eq ! (
945- cass_cluster_set_load_balance_dc_aware(
946- cluster_raw,
947- "eu\0 " . as_ptr( ) as * const i8 ,
948- 0 ,
949- 0
950- ) ,
945+ cass_cluster_set_load_balance_dc_aware( cluster_raw, c"eu" . as_ptr( ) , 0 , 0 ) ,
951946 CassError :: CASS_OK
952947 ) ;
953948 cass_cluster_set_latency_aware_routing ( cluster_raw, 1 ) ;
@@ -972,25 +967,98 @@ mod tests {
972967 }
973968 assert ! ( !cluster. load_balancing_config. token_awareness_enabled) ;
974969 assert ! ( cluster. load_balancing_config. latency_awareness_enabled) ;
970+
971+ // set preferred rack+dc
972+ assert_cass_error_eq ! (
973+ cass_cluster_set_load_balance_rack_aware(
974+ cluster_raw,
975+ c"eu-east" . as_ptr( ) ,
976+ c"rack1" . as_ptr( ) ,
977+ ) ,
978+ CassError :: CASS_OK
979+ ) ;
980+
981+ let node_location_preference =
982+ & cluster. load_balancing_config . node_location_preference ;
983+ match node_location_preference {
984+ NodeLocationPreference :: DatacenterAndRack {
985+ local_dc,
986+ local_rack,
987+ } => {
988+ assert_eq ! ( local_dc, "eu-east" ) ;
989+ assert_eq ! ( local_rack, "rack1" ) ;
990+ }
991+ _ => panic ! ( "Expected preferred dc and rack" ) ,
992+ }
993+
994+ // set back to preferred dc
995+ assert_cass_error_eq ! (
996+ cass_cluster_set_load_balance_dc_aware( cluster_raw, c"eu" . as_ptr( ) , 0 , 0 ) ,
997+ CassError :: CASS_OK
998+ ) ;
999+
1000+ let node_location_preference =
1001+ & cluster. load_balancing_config . node_location_preference ;
1002+ match node_location_preference {
1003+ NodeLocationPreference :: Datacenter { local_dc } => {
1004+ assert_eq ! ( local_dc, "eu" )
1005+ }
1006+ _ => panic ! ( "Expected preferred dc" ) ,
1007+ }
9751008 }
9761009 /* Test invalid configurations */
9771010 {
9781011 // Nonzero deprecated parameters
9791012 assert_cass_error_eq ! (
980- cass_cluster_set_load_balance_dc_aware(
1013+ cass_cluster_set_load_balance_dc_aware( cluster_raw, c"eu" . as_ptr( ) , 1 , 0 ) ,
1014+ CassError :: CASS_ERROR_LIB_BAD_PARAMS
1015+ ) ;
1016+ assert_cass_error_eq ! (
1017+ cass_cluster_set_load_balance_dc_aware( cluster_raw, c"eu" . as_ptr( ) , 0 , 1 ) ,
1018+ CassError :: CASS_ERROR_LIB_BAD_PARAMS
1019+ ) ;
1020+
1021+ // null pointers
1022+ assert_cass_error_eq ! (
1023+ cass_cluster_set_load_balance_dc_aware( cluster_raw, std:: ptr:: null( ) , 0 , 0 ) ,
1024+ CassError :: CASS_ERROR_LIB_BAD_PARAMS
1025+ ) ;
1026+ assert_cass_error_eq ! (
1027+ cass_cluster_set_load_balance_rack_aware(
1028+ cluster_raw,
1029+ c"eu" . as_ptr( ) ,
1030+ std:: ptr:: null( ) ,
1031+ ) ,
1032+ CassError :: CASS_ERROR_LIB_BAD_PARAMS
1033+ ) ;
1034+ assert_cass_error_eq ! (
1035+ cass_cluster_set_load_balance_rack_aware(
1036+ cluster_raw,
1037+ std:: ptr:: null( ) ,
1038+ c"rack" . as_ptr( ) ,
1039+ ) ,
1040+ CassError :: CASS_ERROR_LIB_BAD_PARAMS
1041+ ) ;
1042+
1043+ // empty strings
1044+ let empty_str = "\0 " . as_ptr ( ) as * const i8 ;
1045+ assert_cass_error_eq ! (
1046+ cass_cluster_set_load_balance_dc_aware( cluster_raw, std:: ptr:: null( ) , 0 , 0 ) ,
1047+ CassError :: CASS_ERROR_LIB_BAD_PARAMS
1048+ ) ;
1049+ assert_cass_error_eq ! (
1050+ cass_cluster_set_load_balance_rack_aware(
9811051 cluster_raw,
982- "eu\0 " . as_ptr( ) as * const i8 ,
983- 1 ,
984- 0
1052+ c"eu" . as_ptr( ) ,
1053+ empty_str,
9851054 ) ,
9861055 CassError :: CASS_ERROR_LIB_BAD_PARAMS
9871056 ) ;
9881057 assert_cass_error_eq ! (
989- cass_cluster_set_load_balance_dc_aware (
1058+ cass_cluster_set_load_balance_rack_aware (
9901059 cluster_raw,
991- "eu\0 " . as_ptr( ) as * const i8 ,
992- 0 ,
993- 1
1060+ empty_str,
1061+ c"rack" . as_ptr( ) ,
9941062 ) ,
9951063 CassError :: CASS_ERROR_LIB_BAD_PARAMS
9961064 ) ;
0 commit comments