private void AssertChunking(Random random, int chunkSize) { DirectoryInfo path = CreateTempDir("mmap" + chunkSize); MMapDirectory mmapDir = new MMapDirectory(path, null, chunkSize); // we will map a lot, try to turn on the unmap hack if (MMapDirectory.UNMAP_SUPPORTED) { mmapDir.UseUnmap = true; } MockDirectoryWrapper dir = new MockDirectoryWrapper(random, mmapDir); RandomIndexWriter writer = new RandomIndexWriter(random, dir, NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)).SetMergePolicy(NewLogMergePolicy())); Document doc = new Document(); Field docid = NewStringField("docid", "0", Field.Store.YES); Field junk = NewStringField("junk", "", Field.Store.YES); doc.Add(docid); doc.Add(junk); int numDocs = 100; for (int i = 0; i < numDocs; i++) { docid.StringValue = "" + i; junk.StringValue = TestUtil.RandomUnicodeString(random); writer.AddDocument(doc); } IndexReader reader = writer.Reader; writer.Dispose(); int numAsserts = AtLeast(100); for (int i = 0; i < numAsserts; i++) { int docID = random.Next(numDocs); Assert.AreEqual("" + docID, reader.Document(docID).Get("docid")); } reader.Dispose(); dir.Dispose(); }
public virtual void TestFlushExceptions() { #if NETCOREAPP2_0 fail("LUCENENET TODO: Causing fatal crashes intermittently on NETCOREAPP2.0"); #endif MockDirectoryWrapper directory = NewMockDirectory(); FailOnlyOnFlush failure = new FailOnlyOnFlush(this); directory.FailOn(failure); IndexWriter writer = new IndexWriter(directory, (IndexWriterConfig)NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random)).SetMaxBufferedDocs(2)); Document doc = new Document(); Field idField = NewStringField("id", "", Field.Store.YES); doc.Add(idField); int extraCount = 0; for (int i = 0; i < 10; i++) { if (VERBOSE) { Console.WriteLine("TEST: iter=" + i); } for (int j = 0; j < 20; j++) { idField.SetStringValue(Convert.ToString(i * 20 + j)); writer.AddDocument(doc); } // must cycle here because sometimes the merge flushes // the doc we just added and so there's nothing to // flush, and we don't hit the exception while (true) { writer.AddDocument(doc); failure.SetDoFail(); try { writer.Flush(true, true); if (failure.hitExc) { Assert.Fail("failed to hit IOException"); } extraCount++; } catch (IOException ioe) { if (VERBOSE) { Console.WriteLine(ioe.StackTrace); } failure.ClearDoFail(); break; } } Assert.AreEqual(20 * (i + 1) + extraCount, writer.NumDocs); } writer.Dispose(); IndexReader reader = DirectoryReader.Open(directory); Assert.AreEqual(200 + extraCount, reader.NumDocs); reader.Dispose(); directory.Dispose(); }