@@ -942,12 +942,7 @@ mod tests {
942
942
{
943
943
cass_cluster_set_token_aware_routing ( cluster_raw, 0 ) ;
944
944
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 ) ,
951
946
CassError :: CASS_OK
952
947
) ;
953
948
cass_cluster_set_latency_aware_routing ( cluster_raw, 1 ) ;
@@ -972,25 +967,98 @@ mod tests {
972
967
}
973
968
assert ! ( !cluster. load_balancing_config. token_awareness_enabled) ;
974
969
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
+ }
975
1008
}
976
1009
/* Test invalid configurations */
977
1010
{
978
1011
// Nonzero deprecated parameters
979
1012
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(
981
1051
cluster_raw,
982
- "eu\0 " . as_ptr( ) as * const i8 ,
983
- 1 ,
984
- 0
1052
+ c"eu" . as_ptr( ) ,
1053
+ empty_str,
985
1054
) ,
986
1055
CassError :: CASS_ERROR_LIB_BAD_PARAMS
987
1056
) ;
988
1057
assert_cass_error_eq ! (
989
- cass_cluster_set_load_balance_dc_aware (
1058
+ cass_cluster_set_load_balance_rack_aware (
990
1059
cluster_raw,
991
- "eu\0 " . as_ptr( ) as * const i8 ,
992
- 0 ,
993
- 1
1060
+ empty_str,
1061
+ c"rack" . as_ptr( ) ,
994
1062
) ,
995
1063
CassError :: CASS_ERROR_LIB_BAD_PARAMS
996
1064
) ;
0 commit comments