@@ -9,7 +9,7 @@ use shrub_rs::models::params::ParamValue;
9
9
use shrub_rs:: models:: { commands:: FunctionCall , task:: EvgTask , variant:: BuildVariant } ;
10
10
11
11
use crate :: evergreen_names:: {
12
- ENTERPRISE_MODULE , GENERATE_RESMOKE_TASKS , IS_FUZZER , LINUX , MACOS , WINDOWS ,
12
+ ENTERPRISE_MODULE , GENERATE_RESMOKE_TASKS , IS_FUZZER , LINUX , MACOS , RUN_RESMOKE_TESTS , WINDOWS ,
13
13
} ;
14
14
use crate :: utils:: task_name:: remove_gen_suffix;
15
15
@@ -308,11 +308,18 @@ impl EvgConfigUtils for EvgConfigUtilsImpl {
308
308
///
309
309
/// Name of task the given resmoke suite executes.
310
310
fn find_suite_name < ' a > ( & self , task : & ' a EvgTask ) -> & ' a str {
311
- let suite = self . get_gen_task_var ( task, "suite" ) ;
312
- if let Some ( suite) = suite {
313
- suite
311
+ let optional_vars = get_resmoke_vars ( task) ;
312
+
313
+ let generated_task_name = remove_gen_suffix ( & task. name ) ;
314
+
315
+ if let Some ( vars) = optional_vars {
316
+ if let Some ( ParamValue :: String ( suite_var) ) = vars. get ( "suite" ) {
317
+ suite_var
318
+ } else {
319
+ generated_task_name
320
+ }
314
321
} else {
315
- remove_gen_suffix ( & task . name )
322
+ generated_task_name
316
323
}
317
324
}
318
325
@@ -654,6 +661,38 @@ fn get_generate_resmoke_func(task: &EvgTask) -> Option<&FunctionCall> {
654
661
}
655
662
}
656
663
664
+ /// Get the vars passed to "generate resmoke task" or "run tests".
665
+ ///
666
+ /// # Arguments
667
+ ///
668
+ /// * `task` - Shrub task to query.
669
+ ///
670
+ /// # Returns
671
+ ///
672
+ /// vars forwarded to resmoke.py.
673
+ fn get_resmoke_vars ( task : & EvgTask ) -> Option < & HashMap < String , ParamValue > > {
674
+ let command = if let Some ( commands) = & task. commands {
675
+ commands. iter ( ) . find ( |c| {
676
+ if let Function ( func) = c {
677
+ return func. func == GENERATE_RESMOKE_TASKS || func. func == RUN_RESMOKE_TESTS ;
678
+ }
679
+ false
680
+ } )
681
+ } else {
682
+ None
683
+ } ;
684
+
685
+ if let Some ( Function ( func) ) = command {
686
+ if let Some ( vars) = & func. vars {
687
+ Some ( vars)
688
+ } else {
689
+ None
690
+ }
691
+ } else {
692
+ None
693
+ }
694
+ }
695
+
657
696
#[ cfg( test) ]
658
697
mod tests {
659
698
use maplit:: btreemap;
@@ -706,7 +745,6 @@ mod tests {
706
745
"var2" . to_string( ) => ParamValue :: from( "value2" ) ,
707
746
} ,
708
747
) ,
709
- fn_call( "run tests" ) ,
710
748
] ) ,
711
749
..Default :: default ( )
712
750
} ;
@@ -728,7 +766,6 @@ mod tests {
728
766
"var2" . to_string( ) => ParamValue :: from( "value2" ) ,
729
767
} ,
730
768
) ,
731
- fn_call( "run tests" ) ,
732
769
] ) ,
733
770
..Default :: default ( )
734
771
} ;
@@ -739,7 +776,7 @@ mod tests {
739
776
740
777
// find_suite_name tests.
741
778
#[ test]
742
- fn test_find_suite_name_should_use_suite_var_if_it_exists ( ) {
779
+ fn test_find_suite_name_should_use_suite_var_for_generated_task_if_it_exists ( ) {
743
780
let evg_task = EvgTask {
744
781
name : "my_task_gen" . to_string ( ) ,
745
782
commands : Some ( vec ! [
@@ -752,7 +789,6 @@ mod tests {
752
789
"var2" . to_string( ) => ParamValue :: from( "value2" ) ,
753
790
} ,
754
791
) ,
755
- fn_call( "run tests" ) ,
756
792
] ) ,
757
793
..Default :: default ( )
758
794
} ;
@@ -761,8 +797,31 @@ mod tests {
761
797
assert_eq ! ( evg_config_utils. find_suite_name( & evg_task) , "my suite name" ) ;
762
798
}
763
799
800
+ // find_suite_name tests.
764
801
#[ test]
765
- fn test_find_suite_name_should_use_task_name_if_no_var ( ) {
802
+ fn test_find_suite_name_should_use_suite_var_for_non_generated_task_if_it_exists ( ) {
803
+ let evg_task = EvgTask {
804
+ name : "my_task" . to_string ( ) ,
805
+ commands : Some ( vec ! [
806
+ fn_call( "hello world" ) ,
807
+ fn_call_with_params(
808
+ "run tests" ,
809
+ hashmap! {
810
+ "var1" . to_string( ) => ParamValue :: from( "value1" ) ,
811
+ "suite" . to_string( ) => ParamValue :: from( "my suite name" ) ,
812
+ "var2" . to_string( ) => ParamValue :: from( "value2" ) ,
813
+ } ,
814
+ ) ,
815
+ ] ) ,
816
+ ..Default :: default ( )
817
+ } ;
818
+ let evg_config_utils = EvgConfigUtilsImpl :: new ( ) ;
819
+
820
+ assert_eq ! ( evg_config_utils. find_suite_name( & evg_task) , "my suite name" ) ;
821
+ }
822
+
823
+ #[ test]
824
+ fn test_find_suite_name_should_use_task_name_for_generated_task_if_no_var ( ) {
766
825
let evg_task = EvgTask {
767
826
name : "my_task_gen" . to_string ( ) ,
768
827
commands : Some ( vec ! [
@@ -774,7 +833,27 @@ mod tests {
774
833
"var2" . to_string( ) => ParamValue :: from( "value2" ) ,
775
834
} ,
776
835
) ,
777
- fn_call( "run tests" ) ,
836
+ ] ) ,
837
+ ..Default :: default ( )
838
+ } ;
839
+ let evg_config_utils = EvgConfigUtilsImpl :: new ( ) ;
840
+
841
+ assert_eq ! ( evg_config_utils. find_suite_name( & evg_task) , "my_task" ) ;
842
+ }
843
+
844
+ #[ test]
845
+ fn test_find_suite_name_should_use_task_name_for_non_generated_task_if_no_var ( ) {
846
+ let evg_task = EvgTask {
847
+ name : "my_task" . to_string ( ) ,
848
+ commands : Some ( vec ! [
849
+ fn_call( "hello world" ) ,
850
+ fn_call_with_params(
851
+ "run_tests" ,
852
+ hashmap! {
853
+ "var1" . to_string( ) => ParamValue :: from( "value1" ) ,
854
+ "var2" . to_string( ) => ParamValue :: from( "value2" ) ,
855
+ } ,
856
+ ) ,
778
857
] ) ,
779
858
..Default :: default ( )
780
859
} ;
0 commit comments