@@ -95,6 +95,8 @@ public class ModelFileDownloadServiceTest {
95
95
File testAppModelFile ;
96
96
97
97
private ModelFileDownloadService modelFileDownloadService ;
98
+
99
+ private ModelFileDownloadService modelFileDownloadServiceInitialLoad ;
98
100
private SharedPreferencesUtil sharedPreferencesUtil ;
99
101
@ Mock DownloadManager mockDownloadManager ;
100
102
@ Mock ModelFileManager mockFileManager ;
@@ -116,7 +118,21 @@ public void setUp() throws IOException {
116
118
117
119
modelFileDownloadService =
118
120
new ModelFileDownloadService (
119
- app , mockDownloadManager , mockFileManager , sharedPreferencesUtil , mockStatsLogger );
121
+ app ,
122
+ mockDownloadManager ,
123
+ mockFileManager ,
124
+ sharedPreferencesUtil ,
125
+ mockStatsLogger ,
126
+ false );
127
+
128
+ modelFileDownloadServiceInitialLoad =
129
+ new ModelFileDownloadService (
130
+ app ,
131
+ mockDownloadManager ,
132
+ mockFileManager ,
133
+ sharedPreferencesUtil ,
134
+ mockStatsLogger ,
135
+ true );
120
136
121
137
matrixCursor = new MatrixCursor (new String [] {DownloadManager .COLUMN_STATUS });
122
138
testTempModelFile = File .createTempFile ("fakeTempFile" , ".tflite" );
@@ -519,7 +535,6 @@ public void ensureModelDownloaded_alreadyInProgess_UrlExpired() throws Exception
519
535
when (mockDownloadManager .enqueue (any ())).thenReturn (DOWNLOAD_ID ).thenReturn (downloadId2 );
520
536
521
537
// first download will get cancelled and cleaned - up before intent is sent.
522
-
523
538
// Complete the second download
524
539
Intent downloadCompleteIntent = new Intent (DownloadManager .ACTION_DOWNLOAD_COMPLETE );
525
540
downloadCompleteIntent .putExtra (DownloadManager .EXTRA_DOWNLOAD_ID , downloadId2 );
@@ -761,6 +776,7 @@ public void loadNewlyDownloadedModelFile_successFilePresent()
761
776
CustomModel retrievedModel = sharedPreferencesUtil .getCustomModelDetails (MODEL_NAME );
762
777
assertEquals (retrievedModel , customModelDownloadComplete );
763
778
verify (mockDownloadManager , times (1 )).remove (anyLong ());
779
+ verify (mockFileManager , never ()).deleteNonLatestCustomModels ();
764
780
verify (mockStatsLogger , times (1 ))
765
781
.logDownloadEventWithErrorCode (
766
782
eq (CUSTOM_MODEL_DOWNLOADING ),
@@ -770,7 +786,8 @@ public void loadNewlyDownloadedModelFile_successFilePresent()
770
786
}
771
787
772
788
@ Test
773
- public void loadNewlyDownloadedModelFile_successNoFile () throws FileNotFoundException {
789
+ public void loadNewlyDownloadedModelFile_successNoFile ()
790
+ throws FileNotFoundException , FirebaseMlException {
774
791
// Not found
775
792
assertNull (modelFileDownloadService .getDownloadingModelStatusCode (0L ));
776
793
matrixCursor .addRow (new Integer [] {DownloadManager .STATUS_SUCCESSFUL });
@@ -783,6 +800,7 @@ public void loadNewlyDownloadedModelFile_successNoFile() throws FileNotFoundExce
783
800
assertNull (modelFileDownloadService .loadNewlyDownloadedModelFile (CUSTOM_MODEL_DOWNLOADING ));
784
801
assertNull (sharedPreferencesUtil .getDownloadingCustomModelDetails (MODEL_NAME ));
785
802
verify (mockDownloadManager , times (1 )).remove (anyLong ());
803
+ verify (mockFileManager , never ()).deleteNonLatestCustomModels ();
786
804
verify (mockStatsLogger , times (1 ))
787
805
.logDownloadEventWithErrorCode (
788
806
eq (CUSTOM_MODEL_DOWNLOADING ),
@@ -792,20 +810,21 @@ public void loadNewlyDownloadedModelFile_successNoFile() throws FileNotFoundExce
792
810
}
793
811
794
812
@ Test
795
- public void loadNewlyDownloadedModelFile_Running () {
813
+ public void loadNewlyDownloadedModelFile_Running () throws FirebaseMlException {
796
814
// Not found
797
815
assertNull (modelFileDownloadService .getDownloadingModelStatusCode (0L ));
798
816
matrixCursor .addRow (new Integer [] {DownloadManager .STATUS_RUNNING });
799
817
when (mockDownloadManager .query (any ())).thenReturn (matrixCursor );
800
818
assertNull (modelFileDownloadService .loadNewlyDownloadedModelFile (CUSTOM_MODEL_DOWNLOADING ));
801
819
assertNull (sharedPreferencesUtil .getCustomModelDetails (MODEL_NAME ));
802
820
verify (mockDownloadManager , never ()).remove (anyLong ());
821
+ verify (mockFileManager , never ()).deleteNonLatestCustomModels ();
803
822
verify (mockStatsLogger , never ())
804
823
.logDownloadEventWithErrorCode (any (), anyBoolean (), any (), any ());
805
824
}
806
825
807
826
@ Test
808
- public void loadNewlyDownloadedModelFile_Failed () {
827
+ public void loadNewlyDownloadedModelFile_Failed () throws FirebaseMlException {
809
828
// Not found
810
829
assertNull (modelFileDownloadService .getDownloadingModelStatusCode (0L ));
811
830
matrixCursor =
@@ -820,10 +839,44 @@ public void loadNewlyDownloadedModelFile_Failed() {
820
839
assertNull (modelFileDownloadService .loadNewlyDownloadedModelFile (CUSTOM_MODEL_DOWNLOADING ));
821
840
assertNull (sharedPreferencesUtil .getCustomModelDetails (MODEL_NAME ));
822
841
verify (mockDownloadManager , times (1 )).remove (anyLong ());
823
- verify (mockStatsLogger , never ())
824
- .logDownloadEventWithErrorCode (any (), anyBoolean (), any (), any ());
825
842
verify (mockStatsLogger , times (1 ))
826
843
.logDownloadFailureWithReason (
827
844
eq (CUSTOM_MODEL_DOWNLOADING ), eq (false ), eq (DownloadManager .ERROR_INSUFFICIENT_SPACE ));
845
+ verify (mockFileManager , never ()).deleteNonLatestCustomModels ();
846
+ }
847
+
848
+ @ Test
849
+ public void loadNewlyDownloadedModelFile_initialLoad_successFilePresent ()
850
+ throws FirebaseMlException , FileNotFoundException {
851
+ // Not found
852
+ assertNull (modelFileDownloadServiceInitialLoad .getDownloadingModelStatusCode (0L ));
853
+ matrixCursor .addRow (new Integer [] {DownloadManager .STATUS_SUCCESSFUL });
854
+ when (mockDownloadManager .query (any ())).thenReturn (matrixCursor );
855
+ when (mockDownloadManager .openDownloadedFile (anyLong ()))
856
+ .thenReturn (
857
+ ParcelFileDescriptor .open (testTempModelFile , ParcelFileDescriptor .MODE_READ_ONLY ));
858
+ when (mockDownloadManager .remove (anyLong ())).thenReturn (1 );
859
+
860
+ when (mockFileManager .moveModelToDestinationFolder (any (), any ())).thenReturn (testAppModelFile );
861
+
862
+ assertEquals (
863
+ modelFileDownloadServiceInitialLoad .loadNewlyDownloadedModelFile (CUSTOM_MODEL_DOWNLOADING ),
864
+ testAppModelFile );
865
+
866
+ // second attempt should not call deleteNonLatestCustomModels a second time.
867
+ assertEquals (
868
+ modelFileDownloadServiceInitialLoad .loadNewlyDownloadedModelFile (CUSTOM_MODEL_DOWNLOADING ),
869
+ testAppModelFile );
870
+
871
+ CustomModel retrievedModel = sharedPreferencesUtil .getCustomModelDetails (MODEL_NAME );
872
+ assertEquals (retrievedModel , customModelDownloadComplete );
873
+ verify (mockDownloadManager , times (2 )).remove (anyLong ());
874
+ verify (mockFileManager , times (1 )).deleteNonLatestCustomModels ();
875
+ verify (mockStatsLogger , times (2 ))
876
+ .logDownloadEventWithErrorCode (
877
+ eq (CUSTOM_MODEL_DOWNLOADING ),
878
+ eq (true ),
879
+ eq (DownloadStatus .SUCCEEDED ),
880
+ eq (ErrorCode .NO_ERROR ));
828
881
}
829
882
}
0 commit comments