From 02528c6757d10420cc7d545282b49c4322943ac7 Mon Sep 17 00:00:00 2001 From: Michael McCandless Date: Tue, 15 Nov 2022 14:20:04 -0500 Subject: [PATCH] #10878: add some test verbosity on failure (#11935) --- .../lucene/index/TestIndexFileDeleter.java | 33 ++++++++++++++++--- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/lucene/core/src/test/org/apache/lucene/index/TestIndexFileDeleter.java b/lucene/core/src/test/org/apache/lucene/index/TestIndexFileDeleter.java index 01cdbbe0c17..c10fc32c5c9 100644 --- a/lucene/core/src/test/org/apache/lucene/index/TestIndexFileDeleter.java +++ b/lucene/core/src/test/org/apache/lucene/index/TestIndexFileDeleter.java @@ -16,9 +16,17 @@ */ package org.apache.lucene.index; -import java.io.*; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.PrintStream; import java.nio.file.Path; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; import java.util.concurrent.atomic.AtomicBoolean; import org.apache.lucene.codecs.simpletext.SimpleTextCodec; import org.apache.lucene.document.Document; @@ -34,6 +42,7 @@ import org.apache.lucene.tests.index.RandomIndexWriter; import org.apache.lucene.tests.store.MockDirectoryWrapper; import org.apache.lucene.tests.util.LuceneTestCase; import org.apache.lucene.tests.util.TestUtil; +import org.apache.lucene.util.IOUtils; import org.apache.lucene.util.InfoStream; /* @@ -430,13 +439,19 @@ public class TestIndexFileDeleter extends LuceneTestCase { final AtomicBoolean doFailExc = new AtomicBoolean(); + final ByteArrayOutputStream bytesLog = new ByteArrayOutputStream(); + final PrintStream log = new PrintStream(bytesLog, true, IOUtils.UTF_8); + dir.failOn( new MockDirectoryWrapper.Failure() { @Override public void eval(MockDirectoryWrapper dir) throws IOException { if (doFailExc.get() && random().nextInt(4) == 1) { if (callStackContains(IndexFileDeleter.class, "decRef")) { - throw new RuntimeException("fake fail"); + RuntimeException re = new RuntimeException("fake fail"); + log.println("Now throw fake exception:"); + re.printStackTrace(log); + throw re; } } } @@ -453,11 +468,15 @@ public class TestIndexFileDeleter extends LuceneTestCase { // suppress only FakeIOException: if (exc instanceof RuntimeException && exc.getMessage().equals("fake fail")) { // ok to ignore + log.println("Ignoring \"ok\" exception:"); + exc.printStackTrace(log); } else if ((exc instanceof AlreadyClosedException || exc instanceof IllegalStateException) && exc.getCause() != null && "fake fail".equals(exc.getCause().getMessage())) { // also ok to ignore + log.println("Ignoring \"ok\" exception:"); + exc.printStackTrace(log); } else { super.handleMergeException(exc); } @@ -489,10 +508,14 @@ public class TestIndexFileDeleter extends LuceneTestCase { w.addDocument(doc); } } catch (Throwable t) { - if (t.toString().contains("fake fail") - || (t.getCause() != null && t.getCause().toString().contains("fake fail"))) { + if ((t.toString().contains("fake fail") + || (t.getCause() != null && t.getCause().toString().contains("fake fail")))) { // ok + log.println("Ignoring \"ok\" exception:"); + t.printStackTrace(log); } else { + System.out.println("test failed! full log:"); + System.out.print(bytesLog.toString("UTF-8")); throw t; } }