@@ -886,11 +886,13 @@ mod tests {
886886 let cluster = ptr_to_ref ( cluster_raw) ;
887887 {
888888 assert_matches ! ( cluster. load_balancing_config. dc_awareness, None ) ;
889+ assert_matches ! ( cluster. load_balancing_config. rack_awareness, None ) ;
889890 assert ! ( cluster. load_balancing_config. token_awareness_enabled) ;
890891 assert ! ( !cluster. load_balancing_config. latency_awareness_enabled) ;
891892 }
892893 {
893894 cass_cluster_set_token_aware_routing ( cluster_raw, 0 ) ;
895+ // Just for the test purposes we enable both dc and rack+dc awareness.
894896 assert_cass_error_eq ! (
895897 cass_cluster_set_load_balance_dc_aware(
896898 cluster_raw,
@@ -900,6 +902,14 @@ mod tests {
900902 ) ,
901903 CassError :: CASS_OK
902904 ) ;
905+ assert_cass_error_eq ! (
906+ cass_cluster_set_load_balance_rack_aware(
907+ cluster_raw,
908+ "eu-east\0 " . as_ptr( ) as * const i8 ,
909+ "rack1\0 " . as_ptr( ) as * const i8 ,
910+ ) ,
911+ CassError :: CASS_OK
912+ ) ;
903913 cass_cluster_set_latency_aware_routing ( cluster_raw, 1 ) ;
904914 // These values cannot currently be tested to be set properly in the latency awareness builder,
905915 // but at least we test that the function completed successfully.
@@ -914,6 +924,13 @@ mod tests {
914924
915925 let dc_awareness = cluster. load_balancing_config . dc_awareness . as_ref ( ) . unwrap ( ) ;
916926 assert_eq ! ( dc_awareness. local_dc, "eu" ) ;
927+ let rack_awareness = cluster
928+ . load_balancing_config
929+ . rack_awareness
930+ . as_ref ( )
931+ . unwrap ( ) ;
932+ assert_eq ! ( rack_awareness. local_dc, "eu-east" ) ;
933+ assert_eq ! ( rack_awareness. local_rack, "rack1" ) ;
917934 assert ! ( !cluster. load_balancing_config. token_awareness_enabled) ;
918935 assert ! ( cluster. load_balancing_config. latency_awareness_enabled) ;
919936 }
@@ -938,6 +955,51 @@ mod tests {
938955 ) ,
939956 CassError :: CASS_ERROR_LIB_BAD_PARAMS
940957 ) ;
958+
959+ // null pointers
960+ assert_cass_error_eq ! (
961+ cass_cluster_set_load_balance_dc_aware( cluster_raw, std:: ptr:: null( ) , 0 , 0 ) ,
962+ CassError :: CASS_ERROR_LIB_BAD_PARAMS
963+ ) ;
964+ assert_cass_error_eq ! (
965+ cass_cluster_set_load_balance_rack_aware(
966+ cluster_raw,
967+ "eu\0 " . as_ptr( ) as * const i8 ,
968+ std:: ptr:: null( ) ,
969+ ) ,
970+ CassError :: CASS_ERROR_LIB_BAD_PARAMS
971+ ) ;
972+ assert_cass_error_eq ! (
973+ cass_cluster_set_load_balance_rack_aware(
974+ cluster_raw,
975+ std:: ptr:: null( ) ,
976+ "rack\0 " . as_ptr( ) as * const i8 ,
977+ ) ,
978+ CassError :: CASS_ERROR_LIB_BAD_PARAMS
979+ ) ;
980+
981+ // empty strings
982+ let empty_str = "\0 " . as_ptr ( ) as * const i8 ;
983+ assert_cass_error_eq ! (
984+ cass_cluster_set_load_balance_dc_aware( cluster_raw, std:: ptr:: null( ) , 0 , 0 ) ,
985+ CassError :: CASS_ERROR_LIB_BAD_PARAMS
986+ ) ;
987+ assert_cass_error_eq ! (
988+ cass_cluster_set_load_balance_rack_aware(
989+ cluster_raw,
990+ "eu\0 " . as_ptr( ) as * const i8 ,
991+ empty_str,
992+ ) ,
993+ CassError :: CASS_ERROR_LIB_BAD_PARAMS
994+ ) ;
995+ assert_cass_error_eq ! (
996+ cass_cluster_set_load_balance_rack_aware(
997+ cluster_raw,
998+ empty_str,
999+ "rack\0 " . as_ptr( ) as * const i8 ,
1000+ ) ,
1001+ CassError :: CASS_ERROR_LIB_BAD_PARAMS
1002+ ) ;
9411003 }
9421004 }
9431005
0 commit comments