From 73800826e7a8a386668fb6833fac69583876894d Mon Sep 17 00:00:00 2001 From: minherz Date: Sun, 16 Jan 2022 17:48:25 +0000 Subject: [PATCH 1/5] fix: use initialized logging option in constructor Add unit test to validate LoggingHandler construction with default args. Fixes #842 --- .../com/google/cloud/logging/LoggingHandler.java | 2 +- .../google/cloud/logging/LoggingHandlerTest.java | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/google-cloud-logging/src/main/java/com/google/cloud/logging/LoggingHandler.java b/google-cloud-logging/src/main/java/com/google/cloud/logging/LoggingHandler.java index 983127d5a..92b9f8794 100644 --- a/google-cloud-logging/src/main/java/com/google/cloud/logging/LoggingHandler.java +++ b/google-cloud-logging/src/main/java/com/google/cloud/logging/LoggingHandler.java @@ -241,7 +241,7 @@ public LoggingHandler( setLevel(level); baseLevel = level.equals(Level.ALL) ? Level.FINEST : level; flushLevel = config.getFlushLevel(); - Boolean f1 = options.getAutoPopulateMetadata(); + Boolean f1 = loggingOptions.getAutoPopulateMetadata(); Boolean f2 = config.getAutoPopulateMetadata(); autoPopulateMetadata = isTrueOrNull(f1) && isTrueOrNull(f2); redirectToStdout = firstNonNull(config.getRedirectToStdout(), Boolean.FALSE); diff --git a/google-cloud-logging/src/test/java/com/google/cloud/logging/LoggingHandlerTest.java b/google-cloud-logging/src/test/java/com/google/cloud/logging/LoggingHandlerTest.java index 921d58307..f8fc56012 100644 --- a/google-cloud-logging/src/test/java/com/google/cloud/logging/LoggingHandlerTest.java +++ b/google-cloud-logging/src/test/java/com/google/cloud/logging/LoggingHandlerTest.java @@ -22,6 +22,7 @@ import static org.easymock.EasyMock.reset; import static org.easymock.EasyMock.verify; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import com.google.api.client.util.Strings; @@ -205,9 +206,9 @@ public void setUp() { expect(options.getService()).andStubReturn(logging); expect(options.getAutoPopulateMetadata()).andStubReturn(Boolean.FALSE); logging.setFlushSeverity(EasyMock.anyObject(Severity.class)); - expectLastCall().once(); + expectLastCall().anyTimes(); logging.setWriteSynchronicity(EasyMock.anyObject(Synchronicity.class)); - expectLastCall().once(); + expectLastCall().anyTimes(); } @After @@ -221,6 +222,12 @@ private static LogRecord newLogRecord(Level level, String message) { return record; } + @Test + public void testDefaultHandlerCreation() { + replay(options, logging); + assertNotNull(new LoggingHandler()); + } + @Test public void testPublishLevels() { logging.write(ImmutableList.of(FINEST_ENTRY), DEFAULT_OPTIONS); @@ -483,6 +490,7 @@ public void testFlushLevel() { @Test public void testSyncWrite() { + reset(logging); LogEntry entry = LogEntry.newBuilder(Payload.StringPayload.of(MESSAGE)) .setSeverity(Severity.DEBUG) @@ -491,10 +499,10 @@ public void testSyncWrite() { .setTimestamp(123456789L) .build(); + logging.setWriteSynchronicity(Synchronicity.ASYNC); logging.setWriteSynchronicity(Synchronicity.SYNC); - expectLastCall().once(); logging.write(ImmutableList.of(entry), DEFAULT_OPTIONS); - expectLastCall().once(); + logging.setFlushSeverity(Severity.ERROR); replay(options, logging); LoggingHandler handler = new LoggingHandler(LOG_NAME, options, DEFAULT_RESOURCE); From 9b17e9dc1a95d4f04d09ad592d48789c05a994b7 Mon Sep 17 00:00:00 2001 From: Owl Bot Date: Sun, 16 Jan 2022 17:51:20 +0000 Subject: [PATCH 2/5] =?UTF-8?q?=F0=9F=A6=89=20Updates=20from=20OwlBot?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fcc49a88d..8461f799d 100644 --- a/README.md +++ b/README.md @@ -412,7 +412,7 @@ Java is a registered trademark of Oracle and/or its affiliates. [kokoro-badge-link-4]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-logging/java8-win.html [kokoro-badge-image-5]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-logging/java11.svg [kokoro-badge-link-5]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-logging/java11.html -[stability-image]: https://img.shields.io/badge/stability-stable-green +[stability-image]: https://img.shields.io/badge/stability-unknown-red [maven-version-image]: https://img.shields.io/maven-central/v/com.google.cloud/google-cloud-logging.svg [maven-version-link]: https://search.maven.org/search?q=g:com.google.cloud%20AND%20a:google-cloud-logging&core=gav [authentication]: https://github.com/googleapis/google-cloud-java#authentication From 56d68914691b265db791ea0f1da474b9a5d2785e Mon Sep 17 00:00:00 2001 From: minherz Date: Mon, 17 Jan 2022 09:54:54 +0000 Subject: [PATCH 3/5] chore: fix behavior in unitialized environment unit tests run without actual credentials or GCP environment is configured. need to mock discovery of environment properties such as default project id. --- .../com/google/cloud/logging/LoggingHandlerTest.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/google-cloud-logging/src/test/java/com/google/cloud/logging/LoggingHandlerTest.java b/google-cloud-logging/src/test/java/com/google/cloud/logging/LoggingHandlerTest.java index f8fc56012..7398e0308 100644 --- a/google-cloud-logging/src/test/java/com/google/cloud/logging/LoggingHandlerTest.java +++ b/google-cloud-logging/src/test/java/com/google/cloud/logging/LoggingHandlerTest.java @@ -224,7 +224,14 @@ private static LogRecord newLogRecord(Level level, String message) { @Test public void testDefaultHandlerCreation() { - replay(options, logging); + // mocks behavior of MonitoredResourceUtil which is used by LoggingOptions.getDefaultInstance() + // static method + ResourceTypeEnvironmentGetter getterMock = + EasyMock.createMock(ResourceTypeEnvironmentGetter.class); + expect(getterMock.getAttribute("project/project-id")).andReturn(PROJECT); + expect(getterMock.getAttribute("")).andStubReturn(null); + MonitoredResourceUtil.setEnvironmentGetter(getterMock); + replay(options, logging, getterMock); assertNotNull(new LoggingHandler()); } From 5b7a50f14f822cd6310c6814d6f98d5d31c4856f Mon Sep 17 00:00:00 2001 From: minherz Date: Mon, 17 Jan 2022 10:44:43 +0000 Subject: [PATCH 4/5] chore: fixing the unit test environment change mocking GCP environment config from using MonitoredResourceUtil to using fake system property. --- .../cloud/logging/LoggingHandlerTest.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/google-cloud-logging/src/test/java/com/google/cloud/logging/LoggingHandlerTest.java b/google-cloud-logging/src/test/java/com/google/cloud/logging/LoggingHandlerTest.java index 7398e0308..dbe3f7f5f 100644 --- a/google-cloud-logging/src/test/java/com/google/cloud/logging/LoggingHandlerTest.java +++ b/google-cloud-logging/src/test/java/com/google/cloud/logging/LoggingHandlerTest.java @@ -53,6 +53,7 @@ public class LoggingHandlerTest { private static final String LOG_NAME = "java.log"; private static final String MESSAGE = "message"; private static final String PROJECT = "project"; + private static final String PROJECT_ENV_NAME = "GOOGLE_CLOUD_PROJECT"; private static final MonitoredResource DEFAULT_RESOURCE = MonitoredResource.of("global", ImmutableMap.of("project_id", PROJECT)); @@ -224,15 +225,15 @@ private static LogRecord newLogRecord(Level level, String message) { @Test public void testDefaultHandlerCreation() { - // mocks behavior of MonitoredResourceUtil which is used by LoggingOptions.getDefaultInstance() - // static method - ResourceTypeEnvironmentGetter getterMock = - EasyMock.createMock(ResourceTypeEnvironmentGetter.class); - expect(getterMock.getAttribute("project/project-id")).andReturn(PROJECT); - expect(getterMock.getAttribute("")).andStubReturn(null); - MonitoredResourceUtil.setEnvironmentGetter(getterMock); - replay(options, logging, getterMock); + String oldProject = System.getProperty(PROJECT_ENV_NAME); + System.setProperty(PROJECT_ENV_NAME, PROJECT); + replay(options, logging); assertNotNull(new LoggingHandler()); + if (oldProject != null) { + System.setProperty(PROJECT_ENV_NAME, oldProject); + } else { + System.clearProperty(PROJECT_ENV_NAME); + } } @Test From 1777fbfff0aa6029fd53c730c872ffc33d4d4788 Mon Sep 17 00:00:00 2001 From: Owl Bot Date: Tue, 18 Jan 2022 17:55:48 +0000 Subject: [PATCH 5/5] =?UTF-8?q?=F0=9F=A6=89=20Updates=20from=20OwlBot?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8461f799d..fcc49a88d 100644 --- a/README.md +++ b/README.md @@ -412,7 +412,7 @@ Java is a registered trademark of Oracle and/or its affiliates. [kokoro-badge-link-4]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-logging/java8-win.html [kokoro-badge-image-5]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-logging/java11.svg [kokoro-badge-link-5]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-logging/java11.html -[stability-image]: https://img.shields.io/badge/stability-unknown-red +[stability-image]: https://img.shields.io/badge/stability-stable-green [maven-version-image]: https://img.shields.io/maven-central/v/com.google.cloud/google-cloud-logging.svg [maven-version-link]: https://search.maven.org/search?q=g:com.google.cloud%20AND%20a:google-cloud-logging&core=gav [authentication]: https://github.com/googleapis/google-cloud-java#authentication