@@ -899,12 +899,7 @@ mod tests {
899
899
{
900
900
cass_cluster_set_token_aware_routing ( cluster_raw, 0 ) ;
901
901
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 ) ,
908
903
CassError :: CASS_OK
909
904
) ;
910
905
cass_cluster_set_latency_aware_routing ( cluster_raw, 1 ) ;
@@ -929,25 +924,98 @@ mod tests {
929
924
}
930
925
assert ! ( !cluster. load_balancing_config. token_awareness_enabled) ;
931
926
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
+ }
932
965
}
933
966
/* Test invalid configurations */
934
967
{
935
968
// Nonzero deprecated parameters
936
969
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(
938
1008
cluster_raw,
939
- "eu\0 " . as_ptr( ) as * const i8 ,
940
- 1 ,
941
- 0
1009
+ c"eu" . as_ptr( ) ,
1010
+ empty_str,
942
1011
) ,
943
1012
CassError :: CASS_ERROR_LIB_BAD_PARAMS
944
1013
) ;
945
1014
assert_cass_error_eq ! (
946
- cass_cluster_set_load_balance_dc_aware (
1015
+ cass_cluster_set_load_balance_rack_aware (
947
1016
cluster_raw,
948
- "eu\0 " . as_ptr( ) as * const i8 ,
949
- 0 ,
950
- 1
1017
+ empty_str,
1018
+ c"rack" . as_ptr( ) ,
951
1019
) ,
952
1020
CassError :: CASS_ERROR_LIB_BAD_PARAMS
953
1021
) ;
0 commit comments