@@ -32,7 +32,10 @@ use crate::{
3232 cardano_database_client:: ImmutableFileRange ,
3333 feedback:: MithrilEvent ,
3434 file_downloader:: { DownloadEvent , FileDownloader , FileDownloaderUri } ,
35- utils:: { create_directory_if_not_exists, delete_directory, read_files_in_directory} ,
35+ utils:: {
36+ TempDirectoryProvider , create_directory_if_not_exists, delete_directory,
37+ read_files_in_directory,
38+ } ,
3639} ;
3740
3841/// Represents the verified digests and the Merkle tree built from them.
@@ -185,14 +188,20 @@ impl VerifiedDigests {
185188
186189pub struct InternalArtifactProver {
187190 http_file_downloader : Arc < dyn FileDownloader > ,
191+ temp_directory_provider : Arc < dyn TempDirectoryProvider > ,
188192 logger : slog:: Logger ,
189193}
190194
191195impl InternalArtifactProver {
192196 /// Constructs a new `InternalArtifactProver`.
193- pub fn new ( http_file_downloader : Arc < dyn FileDownloader > , logger : slog:: Logger ) -> Self {
197+ pub fn new (
198+ http_file_downloader : Arc < dyn FileDownloader > ,
199+ temp_directory_provider : Arc < dyn TempDirectoryProvider > ,
200+ logger : slog:: Logger ,
201+ ) -> Self {
194202 Self {
195203 http_file_downloader,
204+ temp_directory_provider,
196205 logger,
197206 }
198207 }
@@ -223,7 +232,7 @@ impl InternalArtifactProver {
223232 certificate : & CertificateMessage ,
224233 cardano_database_snapshot : & CardanoDatabaseSnapshotMessage ,
225234 ) -> MithrilResult < VerifiedDigests > {
226- let digest_target_dir = Self :: digest_target_dir ( ) ;
235+ let digest_target_dir = self . digest_target_dir ( ) ;
227236 delete_directory ( & digest_target_dir) ?;
228237 self . download_unpack_digest_file ( & cardano_database_snapshot. digests , & digest_target_dir)
229238 . await ?;
@@ -423,8 +432,8 @@ impl InternalArtifactProver {
423432 Ok ( digest_map)
424433 }
425434
426- fn digest_target_dir ( ) -> PathBuf {
427- std :: env :: temp_dir ( ) . join ( "mithril_digest" )
435+ fn digest_target_dir ( & self ) -> PathBuf {
436+ self . temp_directory_provider . temp_dir ( )
428437 }
429438}
430439
@@ -437,6 +446,7 @@ mod tests {
437446 use std:: sync:: Arc ;
438447
439448 use mithril_common:: {
449+ current_function,
440450 entities:: { CardanoDbBeacon , Epoch , HexEncodedDigest } ,
441451 messages:: CardanoDatabaseDigestListItemMessage ,
442452 test:: { TempDir , double:: Dummy } ,
@@ -445,6 +455,7 @@ mod tests {
445455 use crate :: {
446456 cardano_database_client:: CardanoDatabaseClientDependencyInjector ,
447457 file_downloader:: MockFileDownloaderBuilder , test_utils:: TestLogger ,
458+ utils:: TimestampTempDirectoryProvider ,
448459 } ;
449460
450461 use super :: * ;
@@ -561,11 +572,13 @@ mod tests {
561572
562573 mod download_and_verify_digests {
563574 use mithril_common:: {
564- StdResult ,
575+ StdResult , current_function ,
565576 entities:: { ProtocolMessage , ProtocolMessagePartKey } ,
566577 messages:: DigestsMessagePart ,
567578 } ;
568579
580+ use crate :: utils:: TimestampTempDirectoryProvider ;
581+
569582 use super :: * ;
570583
571584 fn write_digest_file (
@@ -610,7 +623,7 @@ mod tests {
610623 }
611624
612625 #[ tokio:: test]
613- async fn download_and_verify_digest_should_return_digest_map_acording_to_beacon ( ) {
626+ async fn download_and_verify_digest_should_return_digest_map_according_to_beacon ( ) {
614627 let beacon = CardanoDbBeacon {
615628 epoch : Epoch ( 123 ) ,
616629 immutable_file_number : 42 ,
@@ -650,22 +663,28 @@ mod tests {
650663 } ,
651664 ..CardanoDatabaseSnapshotMessage :: dummy ( )
652665 } ;
666+ let temp_directory_provider =
667+ Arc :: new ( TimestampTempDirectoryProvider :: new ( current_function ! ( ) ) ) ;
668+ let digest_target_dir = temp_directory_provider. temp_dir ( ) ;
669+ let digest_target_dir_clone = digest_target_dir. clone ( ) ;
670+ let http_file_downloader = Arc :: new (
671+ MockFileDownloaderBuilder :: default ( )
672+ . with_file_uri ( digests_location)
673+ . with_target_dir ( digest_target_dir. clone ( ) )
674+ . with_compression ( None )
675+ . with_returning ( Box :: new ( move |_, _, _, _, _| {
676+ write_digest_file (
677+ & digest_target_dir_clone,
678+ & build_digests_map ( hightest_immutable_number_in_digest_file) ,
679+ ) ?;
680+
681+ Ok ( ( ) )
682+ } ) )
683+ . build ( ) ,
684+ ) ;
653685 let client = CardanoDatabaseClientDependencyInjector :: new ( )
654- . with_http_file_downloader ( Arc :: new (
655- MockFileDownloaderBuilder :: default ( )
656- . with_file_uri ( digests_location)
657- . with_target_dir ( InternalArtifactProver :: digest_target_dir ( ) )
658- . with_compression ( None )
659- . with_returning ( Box :: new ( move |_, _, _, _, _| {
660- write_digest_file (
661- & InternalArtifactProver :: digest_target_dir ( ) ,
662- & build_digests_map ( hightest_immutable_number_in_digest_file) ,
663- ) ?;
664-
665- Ok ( ( ) )
666- } ) )
667- . build ( ) ,
668- ) )
686+ . with_http_file_downloader ( http_file_downloader)
687+ . with_temp_directory_provider ( temp_directory_provider)
669688 . build_cardano_database_client ( ) ;
670689
671690 let verified_digests = client
@@ -681,7 +700,7 @@ mod tests {
681700 . collect ( ) ;
682701 assert_eq ! ( verified_digests. digests, expected_digests_in_certificate) ;
683702
684- assert ! ( !InternalArtifactProver :: digest_target_dir( ) . exists( ) ) ;
703+ assert ! ( !digest_target_dir. exists( ) ) ;
685704 }
686705 }
687706
@@ -704,6 +723,7 @@ mod tests {
704723 . with_times ( 2 )
705724 . build ( ) ,
706725 ) ,
726+ Arc :: new ( TimestampTempDirectoryProvider :: new ( current_function ! ( ) ) ) ,
707727 TestLogger :: stdout ( ) ,
708728 ) ;
709729
@@ -732,6 +752,7 @@ mod tests {
732752 let target_dir = Path :: new ( "." ) ;
733753 let artifact_prover = InternalArtifactProver :: new (
734754 Arc :: new ( MockFileDownloader :: new ( ) ) ,
755+ Arc :: new ( TimestampTempDirectoryProvider :: new ( current_function ! ( ) ) ) ,
735756 TestLogger :: stdout ( ) ,
736757 ) ;
737758
@@ -760,6 +781,7 @@ mod tests {
760781 . with_success ( )
761782 . build ( ) ,
762783 ) ,
784+ Arc :: new ( TimestampTempDirectoryProvider :: new ( current_function ! ( ) ) ) ,
763785 TestLogger :: stdout ( ) ,
764786 ) ;
765787
@@ -794,6 +816,7 @@ mod tests {
794816 . with_success ( )
795817 . build ( ) ,
796818 ) ,
819+ Arc :: new ( TimestampTempDirectoryProvider :: new ( current_function ! ( ) ) ) ,
797820 TestLogger :: stdout ( ) ,
798821 ) ;
799822
@@ -828,6 +851,7 @@ mod tests {
828851 . with_success ( )
829852 . build ( ) ,
830853 ) ,
854+ Arc :: new ( TimestampTempDirectoryProvider :: new ( current_function ! ( ) ) ) ,
831855 TestLogger :: stdout ( ) ,
832856 ) ;
833857
@@ -884,6 +908,7 @@ mod tests {
884908 . with_success ( )
885909 . build ( ) ,
886910 ) ,
911+ Arc :: new ( TimestampTempDirectoryProvider :: new ( current_function ! ( ) ) ) ,
887912 TestLogger :: stdout ( ) ,
888913 ) ;
889914 artifact_prover
@@ -907,6 +932,7 @@ mod tests {
907932 . with_success ( )
908933 . build ( ) ,
909934 ) ,
935+ Arc :: new ( TimestampTempDirectoryProvider :: new ( current_function ! ( ) ) ) ,
910936 TestLogger :: stdout ( ) ,
911937 ) ;
912938 artifact_prover
@@ -929,6 +955,7 @@ mod tests {
929955 . with_success ( )
930956 . build ( ) ,
931957 ) ,
958+ Arc :: new ( TimestampTempDirectoryProvider :: new ( current_function ! ( ) ) ) ,
932959 TestLogger :: stdout ( ) ,
933960 ) ;
934961 artifact_prover
@@ -961,6 +988,7 @@ mod tests {
961988 . with_success ( )
962989 . build ( ) ,
963990 ) ,
991+ Arc :: new ( TimestampTempDirectoryProvider :: new ( current_function ! ( ) ) ) ,
964992 TestLogger :: stdout ( ) ,
965993 ) ;
966994
0 commit comments