@@ -613,6 +613,172 @@ async fn test_recovery_create_warehouse() -> Result<()> {
613613 Ok ( ( ) )
614614}
615615
616+ #[ tokio:: test( flavor = "multi_thread" , worker_threads = 1 ) ]
617+ async fn test_assign_nodes_for_invalid_warehouse ( ) -> Result < ( ) > {
618+ let ( _, warehouse_manager, _nodes) = nodes ( Duration :: from_mins ( 30 ) , 2 ) . await ?;
619+
620+ let assign_warehouse_nodes =
621+ warehouse_manager. assign_warehouse_nodes ( String :: from ( "" ) , HashMap :: new ( ) ) ;
622+
623+ assert_eq ! ( assign_warehouse_nodes. await . unwrap_err( ) . code( ) , 2403 ) ;
624+
625+ let assign_warehouse_nodes =
626+ warehouse_manager. assign_warehouse_nodes ( String :: from ( "test_warehouse" ) , HashMap :: new ( ) ) ;
627+
628+ assert_eq ! ( assign_warehouse_nodes. await . unwrap_err( ) . code( ) , 2408 ) ;
629+
630+ let assign_warehouse_nodes = warehouse_manager. assign_warehouse_nodes (
631+ String :: from ( "test_warehouse" ) ,
632+ HashMap :: from ( [ ( String :: new ( ) , vec ! [ ] ) ] ) ,
633+ ) ;
634+
635+ assert_eq ! ( assign_warehouse_nodes. await . unwrap_err( ) . code( ) , 1006 ) ;
636+
637+ let assign_warehouse_nodes = warehouse_manager. assign_warehouse_nodes (
638+ String :: from ( "test_warehouse" ) ,
639+ HashMap :: from ( [ ( String :: from ( "test" ) , vec ! [ ] ) ] ) ,
640+ ) ;
641+
642+ assert_eq ! ( assign_warehouse_nodes. await . unwrap_err( ) . code( ) , 1006 ) ;
643+
644+ let assign_warehouse_nodes = warehouse_manager. assign_warehouse_nodes (
645+ String :: from ( "test_warehouse" ) ,
646+ HashMap :: from ( [ ( String :: from ( "test" ) , vec ! [ SelectedNode :: Random ( None ) ] ) ] ) ,
647+ ) ;
648+
649+ assert_eq ! ( assign_warehouse_nodes. await . unwrap_err( ) . code( ) , 2406 ) ;
650+
651+ Ok ( ( ) )
652+ }
653+
654+ #[ tokio:: test( flavor = "multi_thread" , worker_threads = 1 ) ]
655+ async fn test_unassign_nodes_for_invalid_warehouse ( ) -> Result < ( ) > {
656+ let ( _, warehouse_manager, _nodes) = nodes ( Duration :: from_mins ( 30 ) , 2 ) . await ?;
657+
658+ let unassign_warehouse_nodes = warehouse_manager. unassign_warehouse_nodes ( "" , HashMap :: new ( ) ) ;
659+
660+ assert_eq ! ( unassign_warehouse_nodes. await . unwrap_err( ) . code( ) , 2403 ) ;
661+
662+ let unassign_warehouse_nodes =
663+ warehouse_manager. unassign_warehouse_nodes ( "test_warehouse" , HashMap :: new ( ) ) ;
664+
665+ assert_eq ! ( unassign_warehouse_nodes. await . unwrap_err( ) . code( ) , 1006 ) ;
666+
667+ let unassign_warehouse_nodes = warehouse_manager
668+ . unassign_warehouse_nodes ( "test_warehouse" , HashMap :: from ( [ ( String :: new ( ) , vec ! [ ] ) ] ) ) ;
669+
670+ assert_eq ! ( unassign_warehouse_nodes. await . unwrap_err( ) . code( ) , 1006 ) ;
671+
672+ let unassign_warehouse_nodes = warehouse_manager. unassign_warehouse_nodes (
673+ "test_warehouse" ,
674+ HashMap :: from ( [ ( String :: from ( "test" ) , vec ! [ ] ) ] ) ,
675+ ) ;
676+
677+ assert_eq ! ( unassign_warehouse_nodes. await . unwrap_err( ) . code( ) , 1006 ) ;
678+
679+ let unassign_warehouse_nodes = warehouse_manager. unassign_warehouse_nodes (
680+ "test_warehouse" ,
681+ HashMap :: from ( [ ( String :: from ( "test" ) , vec ! [ SelectedNode :: Random ( None ) ] ) ] ) ,
682+ ) ;
683+
684+ assert_eq ! ( unassign_warehouse_nodes. await . unwrap_err( ) . code( ) , 2406 ) ;
685+
686+ warehouse_manager
687+ . create_warehouse ( String :: from ( "test_warehouse" ) , vec ! [
688+ SelectedNode :: Random ( None ) ,
689+ SelectedNode :: Random ( None ) ,
690+ ] )
691+ . await ?;
692+
693+ let unassign_warehouse_nodes = warehouse_manager. unassign_warehouse_nodes (
694+ "test_warehouse" ,
695+ HashMap :: from ( [ ( String :: from ( "test" ) , vec ! [ SelectedNode :: Random ( None ) ] ) ] ) ,
696+ ) ;
697+
698+ assert_eq ! ( unassign_warehouse_nodes. await . unwrap_err( ) . code( ) , 2410 ) ;
699+
700+ let unassign_warehouse_nodes = warehouse_manager. unassign_warehouse_nodes (
701+ "test_warehouse" ,
702+ HashMap :: from ( [ ( String :: from ( "default" ) , vec ! [ SelectedNode :: Random ( Some (
703+ String :: from( "unknown" ) ,
704+ ) ) ] ) ] ) ,
705+ ) ;
706+
707+ assert_eq ! ( unassign_warehouse_nodes. await . unwrap_err( ) . code( ) , 2401 ) ;
708+
709+ Ok ( ( ) )
710+ }
711+
712+ #[ tokio:: test( flavor = "multi_thread" , worker_threads = 1 ) ]
713+ async fn test_unassign_all_nodes_for_warehouse ( ) -> Result < ( ) > {
714+ let ( _, warehouse_manager, _nodes) = nodes ( Duration :: from_mins ( 30 ) , 2 ) . await ?;
715+ warehouse_manager
716+ . create_warehouse ( String :: from ( "test_warehouse" ) , vec ! [ SelectedNode :: Random (
717+ None ,
718+ ) ] )
719+ . await ?;
720+
721+ let unassign_warehouse_nodes = warehouse_manager. unassign_warehouse_nodes (
722+ "test_warehouse" ,
723+ HashMap :: from ( [ ( String :: from ( "default" ) , vec ! [
724+ SelectedNode :: Random ( None ) ,
725+ SelectedNode :: Random ( Some ( String :: from( "test_node_group" ) ) ) ,
726+ ] ) ] ) ,
727+ ) ;
728+
729+ assert_eq ! ( unassign_warehouse_nodes. await . unwrap_err( ) . code( ) , 2401 ) ;
730+ Ok ( ( ) )
731+ }
732+
733+ #[ tokio:: test( flavor = "multi_thread" , worker_threads = 1 ) ]
734+ async fn test_unassign_nodes_for_warehouse ( ) -> Result < ( ) > {
735+ let ( _, warehouse_manager, _nodes) = nodes ( Duration :: from_mins ( 30 ) , 2 ) . await ?;
736+ let create_warehouse = warehouse_manager
737+ . create_warehouse ( String :: from ( "test_warehouse" ) , vec ! [ SelectedNode :: Random (
738+ None ,
739+ ) ] ) ;
740+
741+ create_warehouse. await ?;
742+
743+ let mut node_1 = system_managed_node ( & GlobalUniqName :: unique ( ) ) ;
744+ node_1. node_group = Some ( String :: from ( "test_node_group" ) ) ;
745+ warehouse_manager. start_node ( node_1. clone ( ) ) . await ?;
746+
747+ let mut node_2 = system_managed_node ( & GlobalUniqName :: unique ( ) ) ;
748+ node_2. node_group = Some ( String :: from ( "test_node_group" ) ) ;
749+ warehouse_manager. start_node ( node_2. clone ( ) ) . await ?;
750+
751+ let add_warehouse_cluster = warehouse_manager. add_warehouse_cluster (
752+ String :: from ( "test_warehouse" ) ,
753+ String :: from ( "cluster_name" ) ,
754+ vec ! [
755+ SelectedNode :: Random ( Some ( String :: from( "test_node_group" ) ) ) ,
756+ SelectedNode :: Random ( None ) ,
757+ SelectedNode :: Random ( Some ( String :: from( "test_node_group" ) ) ) ,
758+ ] ,
759+ ) ;
760+
761+ add_warehouse_cluster. await ?;
762+
763+ let unassign_warehouse_nodes = warehouse_manager. unassign_warehouse_nodes (
764+ "test_warehouse" ,
765+ HashMap :: from ( [ ( String :: from ( "cluster_name" ) , vec ! [
766+ SelectedNode :: Random ( None ) ,
767+ SelectedNode :: Random ( Some ( String :: from( "test_node_group" ) ) ) ,
768+ ] ) ] ) ,
769+ ) ;
770+
771+ unassign_warehouse_nodes. await ?;
772+
773+ let nodes = warehouse_manager
774+ . list_warehouse_cluster_nodes ( "test_warehouse" , "cluster_name" )
775+ . await ?;
776+
777+ assert_eq ! ( nodes. len( ) , 1 ) ;
778+ assert ! ( nodes[ 0 ] . id == node_1. id || nodes[ 0 ] . id == node_2. id) ;
779+ Ok ( ( ) )
780+ }
781+
616782#[ tokio:: test( flavor = "multi_thread" , worker_threads = 1 ) ]
617783async fn test_concurrent_recovery_create_warehouse ( ) -> Result < ( ) > {
618784 let ( _, warehouse_manager, nodes) = nodes ( Duration :: from_mins ( 30 ) , 2 ) . await ?;
0 commit comments