@@ -197,6 +197,15 @@ pub trait Connection: Send + Sync {
197197        benchmark_request :  & BenchmarkRequest , 
198198        benchmark_request_status :  BenchmarkRequestStatus , 
199199    )  -> anyhow:: Result < ( ) > ; 
200+ 
201+     /// Update a Try commit to have a `sha` and `parent_sha`. Will update the 
202+      /// status of the request too a ready state. 
203+      async  fn  attach_shas_to_try_benchmark_request ( 
204+         & self , 
205+         pr :  u32 , 
206+         sha :  & str , 
207+         parent_sha :  & str , 
208+     )  -> anyhow:: Result < ( ) > ; 
200209} 
201210
202211#[ async_trait:: async_trait]  
@@ -534,4 +543,108 @@ mod tests {
534543        } ) 
535544        . await ; 
536545    } 
546+ 
547+     #[ tokio:: test]  
548+     async  fn  updating_try_commits ( )  { 
549+         run_postgres_test ( |ctx| async  { 
550+             let  db = ctx. db_client ( ) ; 
551+             let  db = db. connection ( ) . await ; 
552+             let  time = chrono:: DateTime :: from_str ( "2021-09-01T00:00:00.000Z" ) . unwrap ( ) ; 
553+             let  pr = 42 ; 
554+ 
555+             let  try_benchmark_request = BenchmarkRequest :: create_try ( 
556+                 None , 
557+                 None , 
558+                 pr, 
559+                 time, 
560+                 BenchmarkRequestStatus :: WaitingForArtifacts , 
561+                 "cranelift" , 
562+                 "" , 
563+             ) ; 
564+             db. insert_benchmark_request ( & try_benchmark_request) . await ; 
565+             db. attach_shas_to_try_benchmark_request ( pr,  "foo" ,  "bar" ) 
566+                 . await 
567+                 . unwrap ( ) ; 
568+             let  requests = db
569+                 . get_benchmark_requests_by_status ( & [ BenchmarkRequestStatus :: ArtifactsReady ] ) 
570+                 . await 
571+                 . unwrap ( ) ; 
572+ 
573+             assert_eq ! ( requests. len( ) ,  1 ) ; 
574+             assert_eq ! ( requests[ 0 ] . tag( ) ,  Some ( "foo" ) ) ; 
575+             assert_eq ! ( requests[ 0 ] . parent_sha( ) ,  Some ( "bar" ) ) ; 
576+             assert_eq ! ( requests[ 0 ] . status,  BenchmarkRequestStatus :: ArtifactsReady ) ; 
577+ 
578+             Ok ( ctx) 
579+         } ) 
580+         . await ; 
581+     } 
582+ 
583+     #[ tokio:: test]  
584+     async  fn  adding_try_commit_to_completed_request ( )  { 
585+         run_postgres_test ( |ctx| async  { 
586+             let  db = ctx. db_client ( ) ; 
587+             let  db = db. connection ( ) . await ; 
588+             let  time = chrono:: DateTime :: from_str ( "2021-09-01T00:00:00.000Z" ) . unwrap ( ) ; 
589+             let  pr = 42 ; 
590+ 
591+             let  completed_try = BenchmarkRequest :: create_try ( 
592+                 Some ( "sha-2" ) , 
593+                 Some ( "p-sha-1" ) , 
594+                 pr, 
595+                 time, 
596+                 BenchmarkRequestStatus :: Completed , 
597+                 "cranelift" , 
598+                 "" , 
599+             ) ; 
600+             db. insert_benchmark_request ( & completed_try) . await ; 
601+ 
602+             let  try_benchmark_request = BenchmarkRequest :: create_try ( 
603+                 None , 
604+                 None , 
605+                 pr, 
606+                 time, 
607+                 BenchmarkRequestStatus :: WaitingForArtifacts , 
608+                 "cranelift" , 
609+                 "" , 
610+             ) ; 
611+             // deliberately insert twice 
612+             db. insert_benchmark_request ( & try_benchmark_request) . await ; 
613+             // this one should fail 
614+             db. insert_benchmark_request ( & try_benchmark_request) . await ; 
615+             db. attach_shas_to_try_benchmark_request ( pr,  "foo" ,  "bar" ) 
616+                 . await 
617+                 . unwrap ( ) ; 
618+ 
619+             let  requests = db
620+                 . get_benchmark_requests_by_status ( & [ 
621+                     BenchmarkRequestStatus :: WaitingForArtifacts , 
622+                     BenchmarkRequestStatus :: ArtifactsReady , 
623+                     BenchmarkRequestStatus :: InProgress , 
624+                     BenchmarkRequestStatus :: Completed , 
625+                 ] ) 
626+                 . await 
627+                 . unwrap ( ) ; 
628+ 
629+             assert_eq ! ( requests. len( ) ,  2 ) ; 
630+             let  completed_try = requests
631+                 . iter ( ) 
632+                 . find ( |req| req. status  == BenchmarkRequestStatus :: Completed ) ; 
633+             assert ! ( completed_try. is_some( ) ) ; 
634+             assert_eq ! ( completed_try. unwrap( ) . pr( ) ,  Some ( & pr) ) ; 
635+             assert_eq ! ( completed_try. unwrap( ) . tag( ) ,  Some ( "sha-2" ) ) ; 
636+             assert_eq ! ( completed_try. unwrap( ) . parent_sha( ) ,  Some ( "p-sha-1" ) ) ; 
637+ 
638+             let  artifacts_ready_try = requests
639+                 . iter ( ) 
640+                 . find ( |req| req. status  == BenchmarkRequestStatus :: ArtifactsReady ) ; 
641+             assert ! ( artifacts_ready_try. is_some( ) ) ; 
642+             assert_eq ! ( artifacts_ready_try. unwrap( ) . pr( ) ,  Some ( & pr) ) ; 
643+             assert_eq ! ( artifacts_ready_try. unwrap( ) . tag( ) ,  Some ( "foo" ) ) ; 
644+             assert_eq ! ( artifacts_ready_try. unwrap( ) . parent_sha( ) ,  Some ( "bar" ) ) ; 
645+ 
646+             Ok ( ctx) 
647+         } ) 
648+         . await ; 
649+     } 
537650} 
0 commit comments