Added vc loading from classpath for testing.

Change-Id: I71bf7f98497e04c133e0fe970b9ef9a84fd43399
diff --git a/Changes b/Changes
index 966f9de..8fef077 100644
--- a/Changes
+++ b/Changes
@@ -1,4 +1,4 @@
-0.60 2021-12-10
+0.60 2021-12-13
     - [feature] Implemented a new cache with on disk
       storage and auto-update (margaretha).
     - [feature] Support for tokenized snippet output
@@ -9,6 +9,7 @@
     - [feature] Added a delete method to VirtualCorpusCache (margaretha)
     - [feature] Added normalization for slash in Fingerprinter (margaretha)
     - [security] Updated log4j due to CVE-2021-44228 (diewald)
+    - [feature] Added vc loading from classpath (margaretha)
 
     !!! This is a security fix - please update!
 
diff --git a/src/main/java/de/ids_mannheim/korap/KrillCollection.java b/src/main/java/de/ids_mannheim/korap/KrillCollection.java
index 14153e7..8f8dbde 100644
--- a/src/main/java/de/ids_mannheim/korap/KrillCollection.java
+++ b/src/main/java/de/ids_mannheim/korap/KrillCollection.java
@@ -3,6 +3,7 @@
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.nio.ByteBuffer;
 import java.util.Properties;
 import java.util.Set;
@@ -175,6 +176,9 @@
 			return null;
         }
 
+        String p = prop.getProperty("krill.test", "false");
+        boolean isTest = Boolean.parseBoolean(p);
+                
         String namedVCPath = prop.getProperty("krill.namedVC");
 
 		if (!namedVCPath.endsWith("/")) {
@@ -184,6 +188,7 @@
 		String fileName = namedVCPath + ref + ".jsonld";
 		File file; 
         String json = null;
+        InputStream is = null;
         if ((file= new File(fileName)).exists()) {
             try (FileInputStream fis = new FileInputStream(file)) {
                 json = IOUtils.toString(fis,"utf-8");
@@ -209,6 +214,18 @@
 				return this;
             }
         }
+        // for testing
+        else if (isTest
+                && (is = retrieveInputStreamFromClasspath(fileName)) != null) {
+            try {
+                json = IOUtils.toString(is, "utf-8");
+            }
+            catch (IOException e) {
+                this.addError(StatusCodes.READING_COLLECTION_FAILED,
+                        e.getMessage());
+                return this;
+            }
+        }
         else{
             this.addError(StatusCodes.MISSING_COLLECTION,
                     "Collection is not found " + fileName);
@@ -219,6 +236,14 @@
 	};
 
 
+    private InputStream retrieveInputStreamFromClasspath (String fileName) {
+        if (!fileName.startsWith("/")) {
+            fileName = "/"+fileName;
+        }
+        return KrillCollection.class.getResourceAsStream(fileName);
+    }
+
+
     /**
      * Import the "collection" part of a KoralQuery.
      * 
diff --git a/src/test/java/de/ids_mannheim/korap/cache/TestVirtualCorpusCache.java b/src/test/java/de/ids_mannheim/korap/cache/TestVirtualCorpusCache.java
index b456930..95bf1c6 100644
--- a/src/test/java/de/ids_mannheim/korap/cache/TestVirtualCorpusCache.java
+++ b/src/test/java/de/ids_mannheim/korap/cache/TestVirtualCorpusCache.java
@@ -68,7 +68,6 @@
         assertFalse(VirtualCorpusCache.contains(vcId));
     }
 
-
     @Test
     public void testReferToUncachedVC () throws IOException, QueryException {
         String vcId = "named-vc1";
diff --git a/src/test/resources/krill.properties b/src/test/resources/krill.properties
index eb7f374..0c26284 100644
--- a/src/test/resources/krill.properties
+++ b/src/test/resources/krill.properties
@@ -1,7 +1,7 @@
 krill.version = ${project.version}
 krill.name = ${project.name}
 krill.indexDir = test-output
-krill.namedVC = vc
 krill.index.commit.count = 15
 
-krill.namedVC=src/test/resources/queries/collections/named-vcs/
\ No newline at end of file
+krill.namedVC = queries/collections/named-vcs/
+krill.test = true
\ No newline at end of file