@@ -972,12 +972,7 @@ mod tests {
972972 {
973973 cass_cluster_set_token_aware_routing ( cluster_raw, 0 ) ;
974974 assert_cass_error_eq ! (
975- cass_cluster_set_load_balance_dc_aware(
976- cluster_raw,
977- "eu\0 " . as_ptr( ) as * const i8 ,
978- 0 ,
979- 0
980- ) ,
975+ cass_cluster_set_load_balance_dc_aware( cluster_raw, c"eu" . as_ptr( ) , 0 , 0 ) ,
981976 CassError :: CASS_OK
982977 ) ;
983978 cass_cluster_set_latency_aware_routing ( cluster_raw, 1 ) ;
@@ -1001,25 +996,98 @@ mod tests {
1001996 }
1002997 assert ! ( !cluster. load_balancing_config. token_awareness_enabled) ;
1003998 assert ! ( cluster. load_balancing_config. latency_awareness_enabled) ;
999+
1000+ // set preferred rack+dc
1001+ assert_cass_error_eq ! (
1002+ cass_cluster_set_load_balance_rack_aware(
1003+ cluster_raw,
1004+ c"eu-east" . as_ptr( ) ,
1005+ c"rack1" . as_ptr( ) ,
1006+ ) ,
1007+ CassError :: CASS_OK
1008+ ) ;
1009+
1010+ let node_location_preference =
1011+ & cluster. load_balancing_config . load_balancing_kind ;
1012+ match node_location_preference {
1013+ Some ( LoadBalancingKind :: RackAware {
1014+ local_dc,
1015+ local_rack,
1016+ } ) => {
1017+ assert_eq ! ( local_dc, "eu-east" ) ;
1018+ assert_eq ! ( local_rack, "rack1" ) ;
1019+ }
1020+ _ => panic ! ( "Expected preferred dc and rack" ) ,
1021+ }
1022+
1023+ // set back to preferred dc
1024+ assert_cass_error_eq ! (
1025+ cass_cluster_set_load_balance_dc_aware( cluster_raw, c"eu" . as_ptr( ) , 0 , 0 ) ,
1026+ CassError :: CASS_OK
1027+ ) ;
1028+
1029+ let node_location_preference =
1030+ & cluster. load_balancing_config . load_balancing_kind ;
1031+ match node_location_preference {
1032+ Some ( LoadBalancingKind :: DcAware { local_dc } ) => {
1033+ assert_eq ! ( local_dc, "eu" )
1034+ }
1035+ _ => panic ! ( "Expected preferred dc" ) ,
1036+ }
10041037 }
10051038 /* Test invalid configurations */
10061039 {
10071040 // Nonzero deprecated parameters
10081041 assert_cass_error_eq ! (
1009- cass_cluster_set_load_balance_dc_aware(
1042+ cass_cluster_set_load_balance_dc_aware( cluster_raw, c"eu" . as_ptr( ) , 1 , 0 ) ,
1043+ CassError :: CASS_ERROR_LIB_BAD_PARAMS
1044+ ) ;
1045+ assert_cass_error_eq ! (
1046+ cass_cluster_set_load_balance_dc_aware( cluster_raw, c"eu" . as_ptr( ) , 0 , 1 ) ,
1047+ CassError :: CASS_ERROR_LIB_BAD_PARAMS
1048+ ) ;
1049+
1050+ // null pointers
1051+ assert_cass_error_eq ! (
1052+ cass_cluster_set_load_balance_dc_aware( cluster_raw, std:: ptr:: null( ) , 0 , 0 ) ,
1053+ CassError :: CASS_ERROR_LIB_BAD_PARAMS
1054+ ) ;
1055+ assert_cass_error_eq ! (
1056+ cass_cluster_set_load_balance_rack_aware(
1057+ cluster_raw,
1058+ c"eu" . as_ptr( ) ,
1059+ std:: ptr:: null( ) ,
1060+ ) ,
1061+ CassError :: CASS_ERROR_LIB_BAD_PARAMS
1062+ ) ;
1063+ assert_cass_error_eq ! (
1064+ cass_cluster_set_load_balance_rack_aware(
1065+ cluster_raw,
1066+ std:: ptr:: null( ) ,
1067+ c"rack" . as_ptr( ) ,
1068+ ) ,
1069+ CassError :: CASS_ERROR_LIB_BAD_PARAMS
1070+ ) ;
1071+
1072+ // empty strings
1073+ let empty_str = "\0 " . as_ptr ( ) as * const i8 ;
1074+ assert_cass_error_eq ! (
1075+ cass_cluster_set_load_balance_dc_aware( cluster_raw, std:: ptr:: null( ) , 0 , 0 ) ,
1076+ CassError :: CASS_ERROR_LIB_BAD_PARAMS
1077+ ) ;
1078+ assert_cass_error_eq ! (
1079+ cass_cluster_set_load_balance_rack_aware(
10101080 cluster_raw,
1011- "eu\0 " . as_ptr( ) as * const i8 ,
1012- 1 ,
1013- 0
1081+ c"eu" . as_ptr( ) ,
1082+ empty_str,
10141083 ) ,
10151084 CassError :: CASS_ERROR_LIB_BAD_PARAMS
10161085 ) ;
10171086 assert_cass_error_eq ! (
1018- cass_cluster_set_load_balance_dc_aware (
1087+ cass_cluster_set_load_balance_rack_aware (
10191088 cluster_raw,
1020- "eu\0 " . as_ptr( ) as * const i8 ,
1021- 0 ,
1022- 1
1089+ empty_str,
1090+ c"rack" . as_ptr( ) ,
10231091 ) ,
10241092 CassError :: CASS_ERROR_LIB_BAD_PARAMS
10251093 ) ;
0 commit comments