private void verifyDir(final Directory dir, final String expectedIndexName) throws IOException { DirectoryExtensions infDir = (DirectoryExtensions) dir; AssertJUnit.assertEquals(expectedIndexName, infDir.getIndexName()); writeTextToIndex(dir, 0, "hi all"); assertTextIsFoundInIds(dir, "hi", 0); writeTextToIndex(dir, 1, "all together"); assertTextIsFoundInIds(dir, "all", 0, 1); } }
@Test public void testRunningOnMultipleCaches() throws IOException { assert metadataCache != chunkCache; assert chunkCache != lockCache; assert lockCache != metadataCache; String indexName = "testingIndex"; TestSegmentReadLocker testSegmentReadLocker = new TestSegmentReadLocker(lockCache, chunkCache, metadataCache, indexName); Directory dir = DirectoryBuilder.newDirectoryInstance(metadataCache, chunkCache, lockCache, indexName) .overrideSegmentReadLocker(testSegmentReadLocker).chunkSize(100).create(); writeTextToIndex(dir, 0, "hello world"); assertTextIsFoundInIds(dir, "hello", 0); writeTextToIndex(dir, 1, "hello solar system"); assertTextIsFoundInIds(dir, "hello", 0, 1); assertTextIsFoundInIds(dir, "system", 1); optimizeIndex(dir); assertTextIsFoundInIds(dir, "hello", 0, 1); dir.close(); }
@Test public void testIndexWritingAndFinding() throws IOException { final String indexName = "indexName"; final Cache cache0 = cache(0, "lucene"); final Cache cache1 = cache(1, "lucene"); TestSegmentReadLocker readLocker = new TestSegmentReadLocker(cache0, cache0, cache0, indexName); Directory dirA = DirectoryBuilder.newDirectoryInstance(cache0, cache0, cache0, indexName).overrideSegmentReadLocker(readLocker).create(); Directory dirB = DirectoryBuilder.newDirectoryInstance(cache1, cache1, cache1, indexName).overrideSegmentReadLocker(readLocker).create(); writeTextToIndex(dirA, 0, "hi from node A"); assertTextIsFoundInIds(dirA, "hi", 0); assertTextIsFoundInIds(dirB, "hi", 0); writeTextToIndex(dirB, 1, "hello node A, how are you?"); assertTextIsFoundInIds(dirA, "hello", 1); assertTextIsFoundInIds(dirB, "hello", 1); assertTextIsFoundInIds(dirA, "node", 1, 0); // node is keyword in both documents id=0 and id=1 assertTextIsFoundInIds(dirB, "node", 1, 0); removeByTerm(dirA, "from"); assertTextIsFoundInIds(dirB, "node", 1); dirA.close(); dirB.close(); DirectoryIntegrityCheck.verifyDirectoryStructure(cache0, "indexName"); DirectoryIntegrityCheck.verifyDirectoryStructure(cache1, "indexName"); }
@Test @SuppressWarnings("unchecked") public void testIndexWritingAndFinding() throws IOException { final String indexName = "indexName"; final Cache<?,?> cache0 = cache(0, "lucene"); final Cache<?,?> cache1 = cache(1, "lucene"); TestSegmentReadLocker testSegmentReadLocker = new TestSegmentReadLocker((Cache<Object, Integer>) cache0, cache0, cache0, indexName); Directory dirA = DirectoryBuilder.newDirectoryInstance(cache0, cache0, cache0, indexName).overrideSegmentReadLocker(testSegmentReadLocker).create(); Directory dirB = DirectoryBuilder.newDirectoryInstance(cache1, cache1, cache1, indexName).overrideSegmentReadLocker(testSegmentReadLocker).create(); writeTextToIndex(dirA, 0, "hi from node A"); assertTextIsFoundInIds(dirA, "hi", 0); assertTextIsFoundInIds(dirB, "hi", 0); writeTextToIndex(dirB, 1, "hello node A, how are you?"); assertTextIsFoundInIds(dirA, "hello", 1); assertTextIsFoundInIds(dirB, "hello", 1); assertTextIsFoundInIds(dirA, "node", 1, 0); // node is keyword in both documents id=0 and id=1 assertTextIsFoundInIds(dirB, "node", 1, 0); removeByTerm(dirA, "from"); assertTextIsFoundInIds(dirB, "node", 1); dirA.close(); dirB.close(); DirectoryIntegrityCheck.verifyDirectoryStructure(cache0, "indexName"); DirectoryIntegrityCheck.verifyDirectoryStructure(cache1, "indexName"); }
@Test public void testReadingFromDifferentlySizedBuffers() throws IOException { cache = cacheManager.getCache(); Directory dirA = DirectoryBuilder.newDirectoryInstance(cache, cache, cache, "indexName").chunkSize(7).create(); writeTextToIndex(dirA, 0, "hi from node A"); Directory dirB = DirectoryBuilder.newDirectoryInstance(cache, cache, cache, "indexName").chunkSize(8).create(); assertTextIsFoundInIds(dirB, "hi", 0); writeTextToIndex(dirB, 1, "index B is sharing the same index but using a differently sized chunk size"); assertTextIsFoundInIds(dirA, "size", 1); }
@Test public void testIndexUsage() throws IOException { cache = cacheManager.getCache(); TestSegmentReadLocker testSegmentReadLocker = new TestSegmentReadLocker(cache, cache, cache, INDEX_NAME); Directory dir = DirectoryBuilder.newDirectoryInstance(cache, cache, cache, INDEX_NAME) .overrideSegmentReadLocker(testSegmentReadLocker).create(); writeTextToIndex(dir, 0, "hello database"); assertTextIsFoundInIds(dir, "hello", 0); writeTextToIndex(dir, 1, "you have to store my index segments"); writeTextToIndex(dir, 2, "so that I can shut down all nodes"); writeTextToIndex(dir, 3, "and restart later keeping the index around"); assertTextIsFoundInIds(dir, "index", 1, 3); removeByTerm(dir, "and"); assertTextIsFoundInIds(dir, "index", 1); dir.close(); for (Map.Entry me : cache.getAdvancedCache().withFlags(Flag.SKIP_CACHE_LOAD).entrySet()) { cacheCopy.put(me.getKey(), me.getValue()); } cache.stop(); cacheManager.stop(); }
@Test(dependsOnMethods="testIndexUsage") public void indexWasStored() throws IOException { cache = cacheManager.getCache(); boolean failed = false; for (Object key : cacheCopy.keySet()) { if (key instanceof FileReadLockKey) { log.error("Key found in store, shouldn't have persisted this or should have cleaned up all readlocks on directory close:" + key); failed = true; } else { Object expected = cacheCopy.get(key); Object actual = cache.get(key); if (expected==null && actual==null) continue; if (expected instanceof byte[]) { expected = Util.printArray((byte[]) expected, false); actual = Util.printArray((byte[]) actual, false); } if (expected == null || ! expected.equals(actual)) { log.error("Failure on key["+key.toString()+"] expected value:\n\t"+expected+"\tactual value:\n\t"+actual); failed = true; } } } AssertJUnit.assertFalse(failed); AssertJUnit.assertEquals("have a different number of keys", cacheCopy.keySet().size(), cache.keySet().size()); Directory dir = DirectoryBuilder.newDirectoryInstance(cache, cache, cache, INDEX_NAME).create(); assertTextIsFoundInIds(dir, "index", 1); dir.close(); }