Allow to assert log messages multiple times in one go This helps to keep tests short and concise. Change-Id: Ia57c27be510a2ae4b275e56f2c9673dcfdb0c2da
diff --git a/src/test/java/com/googlesource/gerrit/plugins/its/base/testutil/LoggingMockingTestCase.java b/src/test/java/com/googlesource/gerrit/plugins/its/base/testutil/LoggingMockingTestCase.java index 2d456c0..8ca3d5b 100644 --- a/src/test/java/com/googlesource/gerrit/plugins/its/base/testutil/LoggingMockingTestCase.java +++ b/src/test/java/com/googlesource/gerrit/plugins/its/base/testutil/LoggingMockingTestCase.java
@@ -14,6 +14,8 @@ package com.googlesource.gerrit.plugins.its.base.testutil; +import static com.google.common.truth.Truth.assertThat; + import com.google.common.collect.Lists; import com.google.gerrit.entities.Account; import com.google.gerrit.entities.BranchNameKey; @@ -36,24 +38,38 @@ private java.util.Collection<LogRecord> records; - protected final void assertLogMessageContains(String needle, Level level) { - LogRecord hit = null; - Iterator<LogRecord> iter = records.iterator(); - while (hit == null && iter.hasNext()) { - LogRecord record = iter.next(); - if (record.getMessage().contains(needle)) { - if (level == null || LogUtil.equalLevels(record.getLevel(), level)) { - hit = record; + protected final void assertLogMessageContains(String needle, Level level, int times) { + // We do not support `times == 0`, as it's ambiguous if it means the message does not occur at + // all, or message assertion should be skipped. + assertThat(times).isGreaterThan(0); + + while (times-- > 0) { + LogRecord hit = null; + Iterator<LogRecord> iter = records.iterator(); + while (hit == null && iter.hasNext()) { + LogRecord record = iter.next(); + if (record.getMessage().contains(needle)) { + if (level == null || LogUtil.equalLevels(record.getLevel(), level)) { + hit = record; + } } } + removeLogHit(hit, "containing '" + needle + "'"); } - removeLogHit(hit, "containing '" + needle + "'"); + } + + protected final void assertLogMessageContains(String needle, Level level) { + assertLogMessageContains(needle, level, 1); } protected final void assertLogMessageContains(String needle) { assertLogMessageContains(needle, null); } + protected final void assertLogMessageContains(String needle, int times) { + assertLogMessageContains(needle, null, times); + } + protected final void assertLogThrowableMessageContains(String needle) { LogRecord hit = null; Iterator<LogRecord> iter = records.iterator();