public virtual void TestRefCounts2() { Directory dir1 = GetDir1(Random()); Directory dir2 = GetDir2(Random()); DirectoryReader ir1 = DirectoryReader.Open(dir1); DirectoryReader ir2 = DirectoryReader.Open(dir2); // don't close subreaders, so ParallelReader will increment refcounts ParallelCompositeReader pr = new ParallelCompositeReader(false, ir1, ir2); IndexReader psub1 = pr.GetSequentialSubReaders()[0]; // check RefCounts Assert.AreEqual(2, ir1.RefCount); Assert.AreEqual(2, ir2.RefCount); Assert.AreEqual(1, psub1.RefCount, "refCount must be 1, as the synthetic reader was created by ParallelCompositeReader"); pr.Dispose(); Assert.AreEqual(1, ir1.RefCount); Assert.AreEqual(1, ir2.RefCount); Assert.AreEqual(0, psub1.RefCount, "refcount must be 0 because parent was closed"); ir1.Dispose(); ir2.Dispose(); Assert.AreEqual(0, ir1.RefCount); Assert.AreEqual(0, ir2.RefCount); Assert.AreEqual(0, psub1.RefCount, "refcount should not change anymore"); dir1.Dispose(); dir2.Dispose(); }
public virtual void TestCloseInnerReader() { Directory dir1 = GetDir1(Random); CompositeReader ir1 = DirectoryReader.Open(dir1); Assert.AreEqual(1, ir1.GetSequentialSubReaders()[0].RefCount); // with overlapping ParallelCompositeReader pr = new ParallelCompositeReader(true, new CompositeReader[] { ir1 }, new CompositeReader[] { ir1 }); IndexReader psub = pr.GetSequentialSubReaders()[0]; Assert.AreEqual(1, psub.RefCount); ir1.Dispose(); Assert.AreEqual(1, psub.RefCount, "refCount of synthetic subreader should be unchanged"); try { psub.Document(0); Assert.Fail("Subreader should be already closed because inner reader was closed!"); } #pragma warning disable 168 catch (ObjectDisposedException e) #pragma warning restore 168 { // pass } try { pr.Document(0); Assert.Fail("ParallelCompositeReader should be already closed because inner reader was closed!"); } #pragma warning disable 168 catch (ObjectDisposedException e) #pragma warning restore 168 { // pass } // noop: pr.Dispose(); Assert.AreEqual(0, psub.RefCount); dir1.Dispose(); }
public virtual void TestRefCounts1() { Directory dir1 = GetDir1(Random()); Directory dir2 = GetDir2(Random()); DirectoryReader ir1, ir2; // close subreaders, ParallelReader will not change refCounts, but close on its own close ParallelCompositeReader pr = new ParallelCompositeReader(ir1 = DirectoryReader.Open(dir1), ir2 = DirectoryReader.Open(dir2)); IndexReader psub1 = pr.GetSequentialSubReaders()[0]; // check RefCounts Assert.AreEqual(1, ir1.RefCount); Assert.AreEqual(1, ir2.RefCount); Assert.AreEqual(1, psub1.RefCount); pr.Dispose(); Assert.AreEqual(0, ir1.RefCount); Assert.AreEqual(0, ir2.RefCount); Assert.AreEqual(0, psub1.RefCount); dir1.Dispose(); dir2.Dispose(); }