64
64
import org .opengrok .indexer .history .RepositoryFactory ;
65
65
import org .opengrok .indexer .index .Indexer ;
66
66
import org .opengrok .indexer .search .QueryBuilder ;
67
+ import org .opengrok .indexer .util .IOUtils ;
67
68
import org .opengrok .indexer .util .TestRepository ;
68
69
import org .opengrok .indexer .web .DummyHttpServletRequest ;
69
70
import org .opengrok .indexer .web .QueryParameters ;
70
71
import org .opengrok .indexer .web .SortOrder ;
71
72
73
+ import static org .junit .jupiter .api .Assertions .assertAll ;
72
74
import static org .junit .jupiter .api .Assertions .assertEquals ;
73
75
import static org .junit .jupiter .api .Assertions .assertFalse ;
74
76
import static org .junit .jupiter .api .Assertions .assertNotNull ;
@@ -367,6 +369,10 @@ void testGetLatestRevisionViaIndex() throws Exception {
367
369
String rev = LatestRevisionUtil .getLastRevFromIndex (new File (repository .getSourceRoot (), filePath ));
368
370
assertNotNull (rev );
369
371
assertEquals (HASH_AA35C258 , rev );
372
+
373
+ // cleanup
374
+ env .releaseIndexSearchers ();
375
+ IOUtils .removeRecursive (env .getDataRootFile ().toPath ());
370
376
}
371
377
372
378
@ Test
@@ -683,7 +689,7 @@ public String getPathInfo() {
683
689
684
690
@ ParameterizedTest
685
691
@ ValueSource (booleans = {true , false })
686
- void testIsNotModifiedEtag (boolean createTimestamp ) throws IOException {
692
+ void testIsNotModifiedEtag (boolean createTimestamp ) throws Exception {
687
693
HttpServletRequest req = new DummyHttpServletRequest () {
688
694
@ Override
689
695
public String getHeader (String name ) {
@@ -699,8 +705,25 @@ public String getPathInfo() {
699
705
}
700
706
};
701
707
702
- // The ETag value depends on the timestamp file .
708
+ // Need data root to be populated for the isNotModified() check, so index first .
703
709
RuntimeEnvironment env = RuntimeEnvironment .getInstance ();
710
+ env .setSourceRoot (repository .getSourceRoot ());
711
+ env .setDataRoot (repository .getDataRoot ());
712
+ env .setProjectsEnabled (true );
713
+ env .setHistoryEnabled (true );
714
+ RepositoryFactory .initializeIgnoredNames (env );
715
+
716
+ Indexer indexer = Indexer .getInstance ();
717
+ indexer .prepareIndexer (
718
+ env ,
719
+ true , // search for repositories
720
+ true , // scan and add projects
721
+ // don't create dictionary
722
+ null , // subFiles - needed when refreshing history partially
723
+ null ); // repositories - needed when refreshing history partially
724
+ indexer .doIndexerExecution (null , null );
725
+
726
+ // The ETag value depends on the timestamp file.
704
727
env .refreshDateForLastIndexRun ();
705
728
Path timestampPath = Path .of (env .getDataRootPath (), IndexTimestamp .TIMESTAMP_FILE_NAME );
706
729
Files .deleteIfExists (timestampPath );
@@ -713,6 +736,10 @@ public String getPathInfo() {
713
736
HttpServletResponse resp = mock (HttpServletResponse .class );
714
737
assertFalse (cfg .isNotModified (req , resp ));
715
738
verify (resp ).setHeader (eq (HttpHeaders .ETAG ), startsWith ("W/" ));
739
+
740
+ // cleanup
741
+ env .releaseIndexSearchers ();
742
+ IOUtils .removeRecursive (env .getDataRootFile ().toPath ());
716
743
}
717
744
718
745
@ Test
@@ -924,4 +951,85 @@ public String getContextPath() {
924
951
cfg .addScript (scriptName );
925
952
assertFalse (cfg .getScripts ().getScriptNames ().contains (scriptName ));
926
953
}
954
+
955
+ @ Test
956
+ void testFindDataFilesNullOrEmpty () {
957
+ HttpServletRequest req = new DummyHttpServletRequest () {
958
+ @ Override
959
+ public String getPathInfo () {
960
+ return "path" ;
961
+ }
962
+ };
963
+
964
+ PageConfig cfg = PageConfig .get (req );
965
+ assertAll (() -> {
966
+ File [] files = cfg .findDataFiles (null );
967
+ assertNotNull (files );
968
+ assertEquals (0 , files .length );
969
+ },
970
+ () -> {
971
+ File [] files = cfg .findDataFiles (new ArrayList <>());
972
+ assertNotNull (files );
973
+ assertEquals (0 , files .length );
974
+ });
975
+ }
976
+
977
+ @ Test
978
+ void testFindDataFilesNonExistent () {
979
+ HttpServletRequest req = new DummyHttpServletRequest () {
980
+ @ Override
981
+ public String getPathInfo () {
982
+ return "path" ;
983
+ }
984
+ };
985
+
986
+ PageConfig cfg = PageConfig .get (req );
987
+ var filenames = List .of ("nonexistent1" , "nonexistent2" );
988
+ File [] files = cfg .findDataFiles (filenames );
989
+ assertNotNull (files );
990
+ assertEquals (2 , files .length );
991
+ assertTrue (Arrays .stream (files ).allMatch (Objects ::isNull ));
992
+ }
993
+
994
+ @ ParameterizedTest
995
+ @ ValueSource (booleans = {true , false })
996
+ void testFindDataFiles (boolean isCompressed ) throws Exception {
997
+ HttpServletRequest req = new DummyHttpServletRequest () {
998
+ @ Override
999
+ public String getPathInfo () {
1000
+ return "mercurial" ;
1001
+ }
1002
+ };
1003
+
1004
+ RuntimeEnvironment env = RuntimeEnvironment .getInstance ();
1005
+ env .setSourceRoot (repository .getSourceRoot ());
1006
+ env .setDataRoot (repository .getDataRoot ());
1007
+ env .setProjectsEnabled (true );
1008
+ env .setHistoryEnabled (true );
1009
+ env .setCompressXref (isCompressed );
1010
+ RepositoryFactory .initializeIgnoredNames (env );
1011
+
1012
+ Indexer indexer = Indexer .getInstance ();
1013
+ indexer .prepareIndexer (
1014
+ env ,
1015
+ true , // search for repositories
1016
+ true , // scan and add projects
1017
+ // don't create dictionary
1018
+ null , // subFiles - needed when refreshing history partially
1019
+ null ); // repositories - needed when refreshing history partially
1020
+ indexer .doIndexerExecution (null , null );
1021
+
1022
+ PageConfig cfg = PageConfig .get (req );
1023
+ var filenames = List .of ("main.c" , "nonexistent" , "Makefile" );
1024
+ File [] files = cfg .findDataFiles (filenames );
1025
+ assertNotNull (files );
1026
+ assertEquals (filenames .size (), files .length );
1027
+ assertTrue (files [0 ].exists ());
1028
+ assertNull (files [1 ]);
1029
+ assertTrue (files [2 ].exists ());
1030
+
1031
+ // cleanup
1032
+ env .releaseIndexSearchers ();
1033
+ IOUtils .removeRecursive (env .getDataRootFile ().toPath ());
1034
+ }
927
1035
}
0 commit comments