@@ -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