Fix VC cache setup/cleanup and test fails

[ERROR] Failures:
[ERROR]   TestVirtualCorpusCache.testCleanUpVC:152 expected:<3> but
was:<5>
[ERROR]   TestVirtualCorpusCache.testCollectionWithVCRefAndPubDate:476
expected:<2> but was:<1>
[ERROR]
TestVirtualCorpusCache.testNamedVCsAfterCorpusWithMissingDocs:407
[ERROR]
TestVirtualCorpusCache.testNamedVCsAfterQueryWithMissingDocs:335
[ERROR]   TestVirtualCorpusCache.testNestedNamedVCs:248
[ERROR]   TestVirtualCorpusCache.testReferToUncachedVC:88
[ERROR]   TestVirtualCorpusCache.testStoreUncachedVC:72
[ERROR]   TestVirtualCorpusCache.testUpdateCachedVC:112 expected:<2> but
was:<3>
[ERROR] Errors:
[ERROR]   TestVirtualCorpusCache.testCache:215 ยป IndexOutOfBounds Index
1 out of bounds for length 1
[INFO]
[ERROR] Tests run: 723, Failures: 8, Errors: 1, Skipped: 0

Change-Id: I6c2565d25cb7db5af78cac82cf9d5fcebc293979
diff --git a/src/main/java/de/ids_mannheim/korap/cache/VirtualCorpusCache.java b/src/main/java/de/ids_mannheim/korap/cache/VirtualCorpusCache.java
index 81e094c..73566a2 100644
--- a/src/main/java/de/ids_mannheim/korap/cache/VirtualCorpusCache.java
+++ b/src/main/java/de/ids_mannheim/korap/cache/VirtualCorpusCache.java
@@ -245,13 +245,22 @@
         map.clear();
 
         File vcCache = new File(CACHE_LOCATION + "/");
-        for (File vc : vcCache.listFiles()) {
-            for (File f : vc.listFiles()) {
-                if (f.exists()) {
-                    f.delete();
+        if (!vcCache.exists()) {
+            return;
+        }
+        File[] vcs = vcCache.listFiles();
+        if (vcs != null) {
+            for (File vc : vcs) {
+                File[] files = vc.listFiles();
+                if (files != null) {
+                    for (File f : files) {
+                        if (f.exists()) {
+                            f.delete();
+                        }
+                    }
                 }
+                vc.delete();
             }
-            vc.delete();
         }
         vcCache.delete();
     }
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 2c8edc2..ef6c436 100644
--- a/src/test/java/de/ids_mannheim/korap/cache/TestVirtualCorpusCache.java
+++ b/src/test/java/de/ids_mannheim/korap/cache/TestVirtualCorpusCache.java
@@ -12,6 +12,8 @@
 
 import org.apache.commons.io.IOUtils;
 import org.junit.Test;
+import org.junit.Before;
+import org.junit.After;
 
 import de.ids_mannheim.korap.Krill;
 import de.ids_mannheim.korap.KrillCollection;
@@ -46,6 +48,19 @@
         queryRefJson2 = IOUtils.toString(is, "utf-8");
     }
 
+    @Before
+    public void setUpCacheLocation() {
+        // Use an isolated cache directory per test run to avoid cross-test interference
+        VirtualCorpusCache.CACHE_LOCATION = "target/vc-cache-test-" + System.nanoTime();
+        VirtualCorpusCache.reset();
+        new VirtualCorpusCache();
+    }
+
+    @After
+    public void tearDownCache() {
+        VirtualCorpusCache.reset();
+    }
+
 
     public static KrillIndex createIndex () throws IOException {
         KrillIndex ki = new KrillIndex();