Esempio n. 1
0
        public virtual void TestErrorInDocsWriterAdd()
        {
            MockRAMDirectory.Failure failure = new AnonymousClassFailure1(this);

            // create a couple of files

            System.String[] keywords  = new System.String[] { "1", "2" };
            System.String[] unindexed = new System.String[] { "Netherlands", "Italy" };
            System.String[] unstored  = new System.String[]
            { "Amsterdam has lots of bridges", "Venice has lots of canals" };
            System.String[] text = new System.String[] { "Amsterdam", "Venice" };

            MockRAMDirectory dir      = new MockRAMDirectory();
            IndexWriter      modifier = new IndexWriter(dir, new WhitespaceAnalyzer(), true, IndexWriter.MaxFieldLength.UNLIMITED, null);

            dir.FailOn(failure.Reset());

            for (int i = 0; i < keywords.Length; i++)
            {
                Document doc = new Document();
                doc.Add(new Field("id", keywords[i], Field.Store.YES, Field.Index.NOT_ANALYZED));
                doc.Add(new Field("country", unindexed[i], Field.Store.YES, Field.Index.NO));
                doc.Add(new Field("contents", unstored[i], Field.Store.NO, Field.Index.ANALYZED));
                doc.Add(new Field("city", text[i], Field.Store.YES, Field.Index.ANALYZED));
                try
                {
                    modifier.AddDocument(doc, null);
                }
                catch (System.IO.IOException io)
                {
                    break;
                }
            }

            System.String[] startFiles = dir.ListAll(null);
            SegmentInfos    infos      = new SegmentInfos();

            infos.Read(dir, null);
            new IndexFileDeleter(dir, new KeepOnlyLastCommitDeletionPolicy(), infos, null, null, null, null);
            System.String[] endFiles = dir.ListAll(null);

            Assert.IsTrue(CollectionsHelper.CompareStringArrays(startFiles, endFiles),
                          "docswriter abort() failed to delete unreferenced files:\n  before delete:\n    " +
                          ArrayToString(startFiles) + "\n  after delete:\n    " + ArrayToString(endFiles));

            modifier.Close();
        }