From f11a0f70394746b11ea12bffd820d1983321b52d Mon Sep 17 00:00:00 2001 From: arostovtsev Date: Fri, 10 Aug 2018 00:26:27 -0700 Subject: Introduce a retriever for logging handler properties. We want a way for Bazel to find a logging handler's current log file without direct dependencies on the exact handler class. We do this with an abstract parent class whose concrete child class (to be used as a singleton) will be given in startup_options, i.e. in the same place as the server logging configuration. RELNOTES: None. PiperOrigin-RevId: 208171084 --- src/test/java/com/google/devtools/build/lib/BUILD | 1 + .../build/lib/util/SimpleLogHandlerTest.java | 53 ++++++++++++++++++++++ 2 files changed, 54 insertions(+) (limited to 'src/test') diff --git a/src/test/java/com/google/devtools/build/lib/BUILD b/src/test/java/com/google/devtools/build/lib/BUILD index f030b0abe0..50d954e62e 100644 --- a/src/test/java/com/google/devtools/build/lib/BUILD +++ b/src/test/java/com/google/devtools/build/lib/BUILD @@ -324,6 +324,7 @@ java_test( "//src/main/java/com/google/devtools/build/lib/vfs", "//src/main/java/com/google/devtools/build/lib/vfs/inmemoryfs", "//src/main/java/com/google/devtools/common/options", + "//third_party:truth8", ], ) diff --git a/src/test/java/com/google/devtools/build/lib/util/SimpleLogHandlerTest.java b/src/test/java/com/google/devtools/build/lib/util/SimpleLogHandlerTest.java index a8f95727f7..4b889508af 100644 --- a/src/test/java/com/google/devtools/build/lib/util/SimpleLogHandlerTest.java +++ b/src/test/java/com/google/devtools/build/lib/util/SimpleLogHandlerTest.java @@ -15,10 +15,12 @@ package com.google.devtools.build.lib.util; import static com.google.common.truth.Truth.assertThat; +import static com.google.common.truth.Truth8.assertThat; import static com.google.devtools.build.lib.testutil.MoreAsserts.assertThrows; import static java.nio.charset.StandardCharsets.UTF_8; import com.google.common.base.Strings; +import com.google.devtools.build.lib.util.SimpleLogHandler.HandlerQuerier; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; @@ -39,9 +41,11 @@ import java.util.Arrays; import java.util.Date; import java.util.Optional; import java.util.TimeZone; +import java.util.logging.FileHandler; import java.util.logging.Formatter; import java.util.logging.Level; import java.util.logging.LogRecord; +import java.util.logging.Logger; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; @@ -386,4 +390,53 @@ public final class SimpleLogHandlerTest { assertThat(Files.exists(kept)).isTrue(); assertThat(Files.exists(currentLogPath)).isTrue(); } + + @Test + public void getLoggerFilePath_onSimpleLogHandler_withFile_returnsPath() throws Exception { + HandlerQuerier handlerQuerier = new HandlerQuerier(); + SimpleLogHandler handler = + SimpleLogHandler.builder().setPrefix(tmp.getRoot() + File.separator + "hello").build(); + Logger logger = Logger.getAnonymousLogger(); + logger.addHandler(handler); + handler.publish(new LogRecord(Level.SEVERE, "Hello world")); // Ensure log file is opened. + + Optional retrievedLogPath = handlerQuerier.getLoggerFilePath(logger); + + assertThat(retrievedLogPath).isPresent(); + assertThat(retrievedLogPath.get().toString()) + .startsWith(tmp.getRoot() + File.separator + "hello"); + + handler.close(); + } + + @Test + public void getLoggerFilePath_onSimpleLogHandler_withoutFile_returnsEmpty() throws Exception { + HandlerQuerier handlerQuerier = new HandlerQuerier(); + SimpleLogHandler handler = + SimpleLogHandler.builder().setPrefix(tmp.getRoot() + File.separator + "hello").build(); + Logger logger = Logger.getAnonymousLogger(); + logger.addHandler(handler); + + assertThat(handlerQuerier.getLoggerFilePath(logger)).isEmpty(); + } + + @Test + public void getLoggerFilePath_onUnsupportedLogHandler_fails() throws Exception { + HandlerQuerier handlerQuerier = new HandlerQuerier(); + FileHandler unsupportedHandler = new FileHandler(tmp.getRoot() + File.separator + "hello"); + Logger logger = Logger.getAnonymousLogger(); + logger.addHandler(unsupportedHandler); + + assertThrows(IllegalArgumentException.class, () -> handlerQuerier.getLoggerFilePath(logger)); + + unsupportedHandler.close(); + } + + @Test + public void getLoggerFilePath_onMissingLogHandler_fails() throws Exception { + HandlerQuerier handlerQuerier = new HandlerQuerier(); + Logger logger = Logger.getAnonymousLogger(); + + assertThrows(IllegalArgumentException.class, () -> handlerQuerier.getLoggerFilePath(logger)); + } } -- cgit v1.2.3