@@ -972,12 +972,7 @@ mod tests {
972
972
{
973
973
cass_cluster_set_token_aware_routing ( cluster_raw, 0 ) ;
974
974
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 ) ,
981
976
CassError :: CASS_OK
982
977
) ;
983
978
cass_cluster_set_latency_aware_routing ( cluster_raw, 1 ) ;
@@ -1001,25 +996,98 @@ mod tests {
1001
996
}
1002
997
assert ! ( !cluster. load_balancing_config. token_awareness_enabled) ;
1003
998
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
+ }
1004
1037
}
1005
1038
/* Test invalid configurations */
1006
1039
{
1007
1040
// Nonzero deprecated parameters
1008
1041
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(
1010
1080
cluster_raw,
1011
- "eu\0 " . as_ptr( ) as * const i8 ,
1012
- 1 ,
1013
- 0
1081
+ c"eu" . as_ptr( ) ,
1082
+ empty_str,
1014
1083
) ,
1015
1084
CassError :: CASS_ERROR_LIB_BAD_PARAMS
1016
1085
) ;
1017
1086
assert_cass_error_eq ! (
1018
- cass_cluster_set_load_balance_dc_aware (
1087
+ cass_cluster_set_load_balance_rack_aware (
1019
1088
cluster_raw,
1020
- "eu\0 " . as_ptr( ) as * const i8 ,
1021
- 0 ,
1022
- 1
1089
+ empty_str,
1090
+ c"rack" . as_ptr( ) ,
1023
1091
) ,
1024
1092
CassError :: CASS_ERROR_LIB_BAD_PARAMS
1025
1093
) ;
0 commit comments