@@ -96,7 +96,7 @@ fn expected_plan(name: &str) -> ExpectedPlan {
9696 }
9797}
9898
99- fn assert_selected_plan ( name : & str , plan : & impl serde:: Serialize ) {
99+ fn assert_selected_plan ( name : & str , plan : & impl serde:: Serialize ) -> Option < String > {
100100 let expected = expected_plan ( name) ;
101101 let artifact = serde_json:: to_value ( plan) . unwrap ( ) ;
102102 let entries = artifact[ "query_plan" ] [ "entries" ] . as_object ( ) . unwrap ( ) ;
@@ -117,7 +117,9 @@ fn assert_selected_plan(name: &str, plan: &impl serde::Serialize) {
117117 materializations. is_empty( ) ,
118118 "{name}: fallback cannot claim a summary"
119119 ) ;
120- return ;
120+ return Some ( format ! (
121+ "{name}: issue #754 requires an ASAP-local physical plan; exact fallback is not a correct answer"
122+ ) ) ;
121123 } ;
122124 if let Some ( operation) = expected. root_operation {
123125 assert_eq ! ( node[ "op" ] , "logical" , "{name}: missing root operator" ) ;
@@ -205,6 +207,7 @@ fn assert_selected_plan(name: &str, plan: &impl serde::Serialize) {
205207 "{name}: wrong PromQL range"
206208 ) ;
207209 }
210+ None
208211}
209212
210213/// The same ten expressions used by level 2 must compile to typed, connected plans.
@@ -215,6 +218,7 @@ fn issue754_queries_have_valid_physical_plans() {
215218 ) )
216219 . unwrap ( ) ;
217220 assert_eq ! ( suite. queries. len( ) , 10 , "the issue-754 contract changed" ) ;
221+ let mut missing_local_plans = Vec :: new ( ) ;
218222 for case in suite. queries {
219223 let expected = expected_plan ( & case. name ) ;
220224 let mut snapshot: Value = serde_json:: from_str ( include_str ! (
@@ -305,7 +309,9 @@ fn issue754_queries_have_valid_physical_plans() {
305309 . unwrap_or_else ( |error| panic ! ( "{} selected plan failed: {error}" , case. name) ) ;
306310 let selected_entry = selected. query_plan . lookup ( & case. expr ) . unwrap ( ) ;
307311 assert ! ( selected_entry. nodes. contains_key( & selected_entry. root) ) ;
308- assert_selected_plan ( & case. name , & selected) ;
312+ if let Some ( error) = assert_selected_plan ( & case. name , & selected) {
313+ missing_local_plans. push ( error) ;
314+ }
309315 if let Some ( installed) = selected
310316 . precompute_plan
311317 . executable_dags
@@ -330,4 +336,9 @@ fn issue754_queries_have_valid_physical_plans() {
330336 . unwrap ( ) ;
331337 }
332338 }
339+ assert ! (
340+ missing_local_plans. is_empty( ) ,
341+ "{}" ,
342+ missing_local_plans. join( "\n " )
343+ ) ;
333344}
0 commit comments