summaryrefslogtreecommitdiffstats
path: root/jdisc_core
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@yahooinc.com>2023-09-04 11:50:35 +0200
committerBjørn Christian Seime <bjorncs@yahooinc.com>2023-09-04 14:33:30 +0200
commit0273b5ab2c83b02678617e9dc7e969080c044c9c (patch)
treeeffec8747a2a13650ab632eebcbf41f3e4af40f9 /jdisc_core
parentc28b8521f0b652bbe23c1ab97ad85a98d13b27de (diff)
Remove dead code and handle API changes
Diffstat (limited to 'jdisc_core')
-rw-r--r--jdisc_core/pom.xml6
-rw-r--r--jdisc_core/src/main/java/com/yahoo/jdisc/core/ConsoleLogFormatter.java14
-rw-r--r--jdisc_core/src/main/java/com/yahoo/jdisc/core/ConsoleLogListener.java32
-rw-r--r--jdisc_core/src/main/java/com/yahoo/jdisc/core/OsgiLogHandler.java14
-rw-r--r--jdisc_core/src/main/java/com/yahoo/jdisc/core/OsgiLogManager.java103
-rw-r--r--jdisc_core/src/test/java/com/yahoo/jdisc/core/ConsoleLogFormatterTestCase.java54
-rw-r--r--jdisc_core/src/test/java/com/yahoo/jdisc/core/ConsoleLogListenerTestCase.java46
-rw-r--r--jdisc_core/src/test/java/com/yahoo/jdisc/core/OsgiLogHandlerTestCase.java50
-rw-r--r--jdisc_core/src/test/java/com/yahoo/jdisc/core/OsgiLogManagerTestCase.java185
9 files changed, 115 insertions, 389 deletions
diff --git a/jdisc_core/pom.xml b/jdisc_core/pom.xml
index 4471269358a..cde7aabdd91 100644
--- a/jdisc_core/pom.xml
+++ b/jdisc_core/pom.xml
@@ -105,11 +105,7 @@
<exclusions>
<exclusion>
<groupId>org.osgi</groupId>
- <artifactId>org.osgi.compendium</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.core</artifactId>
+ <artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
diff --git a/jdisc_core/src/main/java/com/yahoo/jdisc/core/ConsoleLogFormatter.java b/jdisc_core/src/main/java/com/yahoo/jdisc/core/ConsoleLogFormatter.java
index 080f3d3f74b..f7f53d304df 100644
--- a/jdisc_core/src/main/java/com/yahoo/jdisc/core/ConsoleLogFormatter.java
+++ b/jdisc_core/src/main/java/com/yahoo/jdisc/core/ConsoleLogFormatter.java
@@ -4,7 +4,7 @@ package com.yahoo.jdisc.core;
import org.osgi.framework.Bundle;
import org.osgi.framework.ServiceReference;
import org.osgi.service.log.LogEntry;
-import org.osgi.service.log.LogService;
+import org.osgi.service.log.LogLevel;
import java.io.PrintWriter;
import java.io.StringWriter;
@@ -86,17 +86,17 @@ class ConsoleLogFormatter {
}
private StringBuilder formatLevel(LogEntry entry, StringBuilder out) {
- switch (entry.getLevel()) {
- case LogService.LOG_ERROR:
+ switch (entry.getLogLevel()) {
+ case ERROR:
out.append("error");
break;
- case LogService.LOG_WARNING:
+ case WARN:
out.append("warning");
break;
- case LogService.LOG_INFO:
+ case INFO:
out.append("info");
break;
- case LogService.LOG_DEBUG:
+ case DEBUG:
out.append("debug");
break;
default:
@@ -117,7 +117,7 @@ class ConsoleLogFormatter {
private StringBuilder formatException(LogEntry entry, StringBuilder out) {
Throwable t = entry.getException();
if (t != null) {
- if (entry.getLevel() == LogService.LOG_INFO) {
+ if (entry.getLogLevel() == LogLevel.INFO) {
out.append(": ");
String msg = t.getMessage();
if (msg != null) {
diff --git a/jdisc_core/src/main/java/com/yahoo/jdisc/core/ConsoleLogListener.java b/jdisc_core/src/main/java/com/yahoo/jdisc/core/ConsoleLogListener.java
index 2cfa604109b..1d872bbcb64 100644
--- a/jdisc_core/src/main/java/com/yahoo/jdisc/core/ConsoleLogListener.java
+++ b/jdisc_core/src/main/java/com/yahoo/jdisc/core/ConsoleLogListener.java
@@ -3,62 +3,64 @@ package com.yahoo.jdisc.core;
import com.yahoo.net.HostName;
import org.osgi.service.log.LogEntry;
+import org.osgi.service.log.LogLevel;
import org.osgi.service.log.LogListener;
import java.io.PrintStream;
+import java.util.Optional;
/**
* @author Vikas Panwar
*/
class ConsoleLogListener implements LogListener {
- public static final int DEFAULT_LOG_LEVEL = Integer.MAX_VALUE;
+ public static final LogLevel DEFAULT_LOG_LEVEL = LogLevel.TRACE;
private final ConsoleLogFormatter formatter;
private final PrintStream out;
- private final int maxLevel;
+ private final LogLevel maxLevel;
ConsoleLogListener(PrintStream out, String serviceName, String logLevel) {
this.out = out;
this.formatter = new ConsoleLogFormatter(getHostname(), getProcessId(), serviceName);
- this.maxLevel = parseLogLevel(logLevel);
+ this.maxLevel = parseLogLevel(logLevel).orElse(null);
}
@Override
public void logged(LogEntry entry) {
- if (entry.getLevel() > maxLevel) {
+ if (maxLevel == null || !maxLevel.implies(entry.getLogLevel())) {
return;
}
out.println(formatter.formatEntry(entry));
}
- public static int parseLogLevel(String logLevel) {
+ public static Optional<LogLevel> parseLogLevel(String logLevel) {
if (logLevel == null || logLevel.isEmpty()) {
- return DEFAULT_LOG_LEVEL;
+ return Optional.of(DEFAULT_LOG_LEVEL);
}
if (logLevel.equalsIgnoreCase("OFF")) {
- return Integer.MIN_VALUE;
+ return Optional.empty();
}
if (logLevel.equalsIgnoreCase("ERROR")) {
- return 1;
+ return Optional.of(LogLevel.ERROR);
}
if (logLevel.equalsIgnoreCase("WARNING")) {
- return 2;
+ return Optional.of(LogLevel.WARN);
}
if (logLevel.equalsIgnoreCase("INFO")) {
- return 3;
+ return Optional.of(LogLevel.INFO);
}
if (logLevel.equalsIgnoreCase("DEBUG")) {
- return 4;
+ return Optional.of(LogLevel.DEBUG);
}
if (logLevel.equalsIgnoreCase("ALL")) {
- return Integer.MAX_VALUE;
+ return Optional.of(LogLevel.TRACE);
}
try {
- return Integer.valueOf(logLevel);
- } catch (NumberFormatException e) {
+ return Optional.of(LogLevel.values()[Integer.parseInt(logLevel)]);
+ } catch (NumberFormatException | IndexOutOfBoundsException e) {
// fall through
}
- return DEFAULT_LOG_LEVEL;
+ return Optional.of(DEFAULT_LOG_LEVEL);
}
public static ConsoleLogListener newInstance() {
diff --git a/jdisc_core/src/main/java/com/yahoo/jdisc/core/OsgiLogHandler.java b/jdisc_core/src/main/java/com/yahoo/jdisc/core/OsgiLogHandler.java
index 48fdb2a0293..989bc26dd85 100644
--- a/jdisc_core/src/main/java/com/yahoo/jdisc/core/OsgiLogHandler.java
+++ b/jdisc_core/src/main/java/com/yahoo/jdisc/core/OsgiLogHandler.java
@@ -4,6 +4,7 @@ package com.yahoo.jdisc.core;
import com.google.common.collect.ImmutableMap;
import org.osgi.framework.Bundle;
import org.osgi.framework.ServiceReference;
+import org.osgi.service.log.LogLevel;
import org.osgi.service.log.LogService;
import java.util.Dictionary;
@@ -45,8 +46,9 @@ class OsgiLogHandler extends Handler {
}
@Override
+ @SuppressWarnings("deprecation")
public void publish(LogRecord record) {
- logService.log(new LogRecordReference(record), toServiceLevel(record.getLevel()), record.getMessage(),
+ logService.log(new LogRecordReference(record), toServiceLevel(record.getLevel()).ordinal(), record.getMessage(),
record.getThrown());
}
@@ -60,22 +62,22 @@ class OsgiLogHandler extends Handler {
// empty
}
- public static int toServiceLevel(Level level) {
+ public static LogLevel toServiceLevel(Level level) {
int val = level.intValue();
if (val >= Level.SEVERE.intValue()) {
- return LogService.LOG_ERROR;
+ return LogLevel.ERROR;
}
if (val >= Level.WARNING.intValue()) {
- return LogService.LOG_WARNING;
+ return LogLevel.WARN;
}
if (val >= Level.INFO.intValue()) {
- return LogService.LOG_INFO;
+ return LogLevel.INFO;
}
// Level.CONFIG
// Level.FINE
// Level.FINER
// Level.FINEST
- return LogService.LOG_DEBUG;
+ return LogLevel.DEBUG;
}
private static <T> Map<String, T> createDictionary(T[] in) {
diff --git a/jdisc_core/src/main/java/com/yahoo/jdisc/core/OsgiLogManager.java b/jdisc_core/src/main/java/com/yahoo/jdisc/core/OsgiLogManager.java
deleted file mode 100644
index 0530d63fe7a..00000000000
--- a/jdisc_core/src/main/java/com/yahoo/jdisc/core/OsgiLogManager.java
+++ /dev/null
@@ -1,103 +0,0 @@
-// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.jdisc.core;
-
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.log.LogService;
-import org.osgi.util.tracker.ServiceTracker;
-import org.osgi.util.tracker.ServiceTrackerCustomizer;
-
-import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.logging.Handler;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * TODO: unused, remove (not public api)
- *
- * @author Simon Thoresen Hult
- */
-class OsgiLogManager implements LogService {
-
- private static final Object globalLock = new Object();
- private final CopyOnWriteArrayList<LogService> services = new CopyOnWriteArrayList<>();
- private final boolean configureLogLevel;
- private ServiceTracker<LogService,LogService> tracker;
-
- OsgiLogManager(boolean configureLogLevel) {
- this.configureLogLevel = configureLogLevel;
- }
-
- public void install(BundleContext osgiContext) {
- if (tracker != null) {
- throw new IllegalStateException("OsgiLogManager already installed.");
- }
- tracker = new ServiceTracker<>(osgiContext, LogService.class, new ServiceTrackerCustomizer<>() {
-
- @Override
- public LogService addingService(ServiceReference<LogService> reference) {
- LogService service = osgiContext.getService(reference);
- services.add(service);
- return service;
- }
-
- @Override
- public void modifiedService(ServiceReference<LogService> reference, LogService service) {
-
- }
-
- @Override
- public void removedService(ServiceReference<LogService> reference, LogService service) {
- services.remove(service);
- }
- });
- tracker.open();
- synchronized (globalLock) {
- Logger root = Logger.getLogger("");
- if (configureLogLevel) {
- root.setLevel(Level.ALL);
- }
- for (Handler handler : root.getHandlers()) {
- root.removeHandler(handler);
- }
- root.addHandler(new OsgiLogHandler(this));
- }
- }
-
- public boolean uninstall() {
- if (tracker == null) {
- return false;
- }
- tracker.close(); // implicitly clears the services array
- tracker = null;
- return true;
- }
-
- @Override
- public void log(int level, String message) {
- log(null, level, message, null);
- }
-
- @Override
- public void log(int level, String message, Throwable throwable) {
- log(null, level, message, throwable);
- }
-
- @SuppressWarnings("rawtypes")
- @Override
- public void log(ServiceReference serviceRef, int level, String message) {
- log(serviceRef, level, message, null);
- }
-
- @SuppressWarnings("rawtypes")
- @Override
- public void log(ServiceReference serviceRef, int level, String message, Throwable throwable) {
- for (LogService obj : services) {
- obj.log(serviceRef, level, message, throwable);
- }
- }
-
- public static OsgiLogManager newInstance() {
- return new OsgiLogManager(System.getProperty("java.util.logging.config.file") == null);
- }
-}
diff --git a/jdisc_core/src/test/java/com/yahoo/jdisc/core/ConsoleLogFormatterTestCase.java b/jdisc_core/src/test/java/com/yahoo/jdisc/core/ConsoleLogFormatterTestCase.java
index 64130ddc125..4376ccb6c7e 100644
--- a/jdisc_core/src/test/java/com/yahoo/jdisc/core/ConsoleLogFormatterTestCase.java
+++ b/jdisc_core/src/test/java/com/yahoo/jdisc/core/ConsoleLogFormatterTestCase.java
@@ -6,7 +6,7 @@ import org.mockito.Mockito;
import org.osgi.framework.Bundle;
import org.osgi.framework.ServiceReference;
import org.osgi.service.log.LogEntry;
-import org.osgi.service.log.LogService;
+import org.osgi.service.log.LogLevel;
import java.io.PrintWriter;
import java.io.StringWriter;
@@ -22,14 +22,14 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
public class ConsoleLogFormatterTestCase {
private static final ConsoleLogFormatter SIMPLE_FORMATTER = new ConsoleLogFormatter(null, null, null);
- private static final LogEntry SIMPLE_ENTRY = new MyEntry(0, 0, null);
+ private static final LogEntry SIMPLE_ENTRY = new MyEntry(0, LogLevel.AUDIT, null);
// TODO: Should (at least) use ConsoleLogFormatter.ABSENCE_REPLACEMENT instead of literal '-'. See ticket 7128315.
@Test
void requireThatMillisecondsArePadded() {
for (int i = 0; i < 10000; ++i) {
- LogEntry entry = new MyEntry(i, 0, null);
+ LogEntry entry = new MyEntry(i, LogLevel.AUDIT, null);
Instant instant = Instant.ofEpochMilli(i);
assertEquals(String.format("%d.%06d\t-\t-\t-\t-\tunknown\t", instant.getEpochSecond(), instant.getNano() / 1000),
SIMPLE_FORMATTER.formatEntry(entry));
@@ -70,7 +70,7 @@ public class ConsoleLogFormatterTestCase {
@Test
void requireThatProcessIdIncludesThreadIdWhenAvailable() {
- LogEntry entry = new MyEntry(0, 0, null).putProperty("THREAD_ID", "threadId");
+ LogEntry entry = new MyEntry(0, LogLevel.AUDIT, null).putProperty("THREAD_ID", "threadId");
assertEquals("0.000000\t-\tprocessId/threadId\t-\t-\tunknown\t",
new ConsoleLogFormatter(null, "processId", null).formatEntry(entry));
}
@@ -93,7 +93,7 @@ public class ConsoleLogFormatterTestCase {
@Test
void requireThatBundleNameIsIncluded() {
- LogEntry entry = new MyEntry(0, 0, null).setBundleSymbolicName("bundleName");
+ LogEntry entry = new MyEntry(0, LogLevel.AUDIT, null).setBundleSymbolicName("bundleName");
assertEquals("0.000000\t-\t-\t-\tbundleName\tunknown\t",
SIMPLE_FORMATTER.formatEntry(entry));
}
@@ -106,7 +106,7 @@ public class ConsoleLogFormatterTestCase {
@Test
void requireThatLoggerNameIsIncluded() {
- LogEntry entry = new MyEntry(0, 0, null).putProperty("LOGGER_NAME", "loggerName");
+ LogEntry entry = new MyEntry(0, LogLevel.AUDIT, null).putProperty("LOGGER_NAME", "loggerName");
assertEquals("0.000000\t-\t-\t-\t/loggerName\tunknown\t",
SIMPLE_FORMATTER.formatEntry(entry));
}
@@ -119,7 +119,7 @@ public class ConsoleLogFormatterTestCase {
@Test
void requireThatBundleAndLoggerNameIsCombined() {
- LogEntry entry = new MyEntry(0, 0, null).setBundleSymbolicName("bundleName")
+ LogEntry entry = new MyEntry(0, LogLevel.AUDIT, null).setBundleSymbolicName("bundleName")
.putProperty("LOGGER_NAME", "loggerName");
assertEquals("0.000000\t-\t-\t-\tbundleName/loggerName\tunknown\t",
SIMPLE_FORMATTER.formatEntry(entry));
@@ -129,34 +129,32 @@ public class ConsoleLogFormatterTestCase {
void requireThatLevelNameIsIncluded() {
ConsoleLogFormatter formatter = SIMPLE_FORMATTER;
assertEquals("0.000000\t-\t-\t-\t-\terror\t",
- formatter.formatEntry(new MyEntry(0, LogService.LOG_ERROR, null)));
+ formatter.formatEntry(new MyEntry(0, LogLevel.ERROR, null)));
assertEquals("0.000000\t-\t-\t-\t-\twarning\t",
- formatter.formatEntry(new MyEntry(0, LogService.LOG_WARNING, null)));
+ formatter.formatEntry(new MyEntry(0, LogLevel.WARN, null)));
assertEquals("0.000000\t-\t-\t-\t-\tinfo\t",
- formatter.formatEntry(new MyEntry(0, LogService.LOG_INFO, null)));
+ formatter.formatEntry(new MyEntry(0, LogLevel.INFO, null)));
assertEquals("0.000000\t-\t-\t-\t-\tdebug\t",
- formatter.formatEntry(new MyEntry(0, LogService.LOG_DEBUG, null)));
- assertEquals("0.000000\t-\t-\t-\t-\tunknown\t",
- formatter.formatEntry(new MyEntry(0, 69, null)));
+ formatter.formatEntry(new MyEntry(0, LogLevel.DEBUG, null)));
}
@Test
void requireThatMessageIsIncluded() {
- LogEntry entry = new MyEntry(0, 0, "message");
+ LogEntry entry = new MyEntry(0, LogLevel.AUDIT, "message");
assertEquals("0.000000\t-\t-\t-\t-\tunknown\tmessage",
SIMPLE_FORMATTER.formatEntry(entry));
}
@Test
void requireThatMessageIsOptional() {
- LogEntry entry = new MyEntry(0, 0, null);
+ LogEntry entry = new MyEntry(0, LogLevel.AUDIT, null);
assertEquals("0.000000\t-\t-\t-\t-\tunknown\t",
SIMPLE_FORMATTER.formatEntry(entry));
}
@Test
void requireThatMessageIsEscaped() {
- LogEntry entry = new MyEntry(0, 0, "\\\n\r\t");
+ LogEntry entry = new MyEntry(0, LogLevel.AUDIT, "\\\n\r\t");
assertEquals("0.000000\t-\t-\t-\t-\tunknown\t\\\\\\n\\r\\t",
SIMPLE_FORMATTER.formatEntry(entry));
}
@@ -164,7 +162,7 @@ public class ConsoleLogFormatterTestCase {
@Test
void requireThatExceptionIsIncluded() {
Throwable t = new Throwable();
- LogEntry entry = new MyEntry(0, 0, null).setException(t);
+ LogEntry entry = new MyEntry(0, LogLevel.AUDIT, null).setException(t);
assertEquals("0.000000\t-\t-\t-\t-\tunknown\t\\n" + formatThrowable(t),
SIMPLE_FORMATTER.formatEntry(entry));
}
@@ -172,7 +170,7 @@ public class ConsoleLogFormatterTestCase {
@Test
void requireThatExceptionIsEscaped() {
Throwable t = new Throwable("\\\n\r\t");
- LogEntry entry = new MyEntry(0, 0, null).setException(t);
+ LogEntry entry = new MyEntry(0, LogLevel.AUDIT, null).setException(t);
assertEquals("0.000000\t-\t-\t-\t-\tunknown\t\\n" + formatThrowable(t),
SIMPLE_FORMATTER.formatEntry(entry));
}
@@ -180,7 +178,7 @@ public class ConsoleLogFormatterTestCase {
@Test
void requireThatExceptionIsSimplifiedForInfoEntries() {
Throwable t = new Throwable("exception");
- LogEntry entry = new MyEntry(0, LogService.LOG_INFO, "entry").setException(t);
+ LogEntry entry = new MyEntry(0, LogLevel.INFO, "entry").setException(t);
assertEquals("0.000000\t-\t-\t-\t-\tinfo\tentry: exception",
SIMPLE_FORMATTER.formatEntry(entry));
}
@@ -188,7 +186,7 @@ public class ConsoleLogFormatterTestCase {
@Test
void requireThatSimplifiedExceptionIsEscaped() {
Throwable t = new Throwable("\\\n\r\t");
- LogEntry entry = new MyEntry(0, LogService.LOG_INFO, "entry").setException(t);
+ LogEntry entry = new MyEntry(0, LogLevel.INFO, "entry").setException(t);
assertEquals("0.000000\t-\t-\t-\t-\tinfo\tentry: \\\\\\n\\r\\t",
SIMPLE_FORMATTER.formatEntry(entry));
}
@@ -196,7 +194,7 @@ public class ConsoleLogFormatterTestCase {
@Test
void requireThatSimplifiedExceptionMessageIsOptional() {
Throwable t = new Throwable();
- LogEntry entry = new MyEntry(0, LogService.LOG_INFO, "entry").setException(t);
+ LogEntry entry = new MyEntry(0, LogLevel.INFO, "entry").setException(t);
assertEquals("0.000000\t-\t-\t-\t-\tinfo\tentry: java.lang.Throwable",
SIMPLE_FORMATTER.formatEntry(entry));
}
@@ -210,13 +208,13 @@ public class ConsoleLogFormatterTestCase {
private static class MyEntry implements LogEntry {
final String message;
- final int level;
+ final LogLevel level;
final long time;
Bundle bundle = null;
ServiceReference<?> serviceReference = null;
Throwable exception;
- MyEntry(long time, int level, String message) {
+ MyEntry(long time, LogLevel level, String message) {
this.message = message;
this.level = level;
this.time = time;
@@ -244,9 +242,15 @@ public class ConsoleLogFormatterTestCase {
return time;
}
- @Override
+ @Override public LogLevel getLogLevel() { return level; }
+ @Override public String getLoggerName() { return null; }
+ @Override public long getSequence() { return 0; }
+ @Override public String getThreadInfo() { return null; }
+ @Override public StackTraceElement getLocation() { return null; }
+
+ @Override @SuppressWarnings("deprecation")
public int getLevel() {
- return level;
+ return level.ordinal();
}
@Override
diff --git a/jdisc_core/src/test/java/com/yahoo/jdisc/core/ConsoleLogListenerTestCase.java b/jdisc_core/src/test/java/com/yahoo/jdisc/core/ConsoleLogListenerTestCase.java
index 0efefc21a2f..88d73f32550 100644
--- a/jdisc_core/src/test/java/com/yahoo/jdisc/core/ConsoleLogListenerTestCase.java
+++ b/jdisc_core/src/test/java/com/yahoo/jdisc/core/ConsoleLogListenerTestCase.java
@@ -5,11 +5,12 @@ import org.junit.jupiter.api.Test;
import org.osgi.framework.Bundle;
import org.osgi.framework.ServiceReference;
import org.osgi.service.log.LogEntry;
+import org.osgi.service.log.LogLevel;
import org.osgi.service.log.LogListener;
-import org.osgi.service.log.LogService;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
+import java.util.Optional;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -23,42 +24,35 @@ public class ConsoleLogListenerTestCase {
@Test
void requireThatLogLevelParserKnowsOsgiLogLevels() {
- assertEquals(LogService.LOG_ERROR, ConsoleLogListener.parseLogLevel("ERROR"));
- assertEquals(LogService.LOG_WARNING, ConsoleLogListener.parseLogLevel("WARNING"));
- assertEquals(LogService.LOG_INFO, ConsoleLogListener.parseLogLevel("INFO"));
- assertEquals(LogService.LOG_DEBUG, ConsoleLogListener.parseLogLevel("DEBUG"));
+ assertEquals(LogLevel.ERROR, ConsoleLogListener.parseLogLevel("ERROR").orElseThrow());
+ assertEquals(LogLevel.WARN, ConsoleLogListener.parseLogLevel("WARNING").orElseThrow());
+ assertEquals(LogLevel.INFO, ConsoleLogListener.parseLogLevel("INFO").orElseThrow());
+ assertEquals(LogLevel.DEBUG, ConsoleLogListener.parseLogLevel("DEBUG").orElseThrow());
}
@Test
void requireThatLogLevelParserKnowsOff() {
- assertEquals(Integer.MIN_VALUE, ConsoleLogListener.parseLogLevel("OFF"));
+ assertEquals(Optional.empty(), ConsoleLogListener.parseLogLevel("OFF"));
}
@Test
void requireThatLogLevelParserKnowsAll() {
- assertEquals(Integer.MAX_VALUE, ConsoleLogListener.parseLogLevel("ALL"));
- }
-
- @Test
- void requireThatLogLevelParserKnowsIntegers() {
- for (int i = -69; i < 69; ++i) {
- assertEquals(i, ConsoleLogListener.parseLogLevel(String.valueOf(i)));
- }
+ assertEquals(LogLevel.TRACE, ConsoleLogListener.parseLogLevel("ALL").orElseThrow());
}
@Test
void requireThatLogLevelParserErrorsReturnDefault() {
- assertEquals(ConsoleLogListener.DEFAULT_LOG_LEVEL, ConsoleLogListener.parseLogLevel(null));
- assertEquals(ConsoleLogListener.DEFAULT_LOG_LEVEL, ConsoleLogListener.parseLogLevel(""));
- assertEquals(ConsoleLogListener.DEFAULT_LOG_LEVEL, ConsoleLogListener.parseLogLevel("foo"));
+ assertEquals(ConsoleLogListener.DEFAULT_LOG_LEVEL, ConsoleLogListener.parseLogLevel(null).orElseThrow());
+ assertEquals(ConsoleLogListener.DEFAULT_LOG_LEVEL, ConsoleLogListener.parseLogLevel("").orElseThrow());
+ assertEquals(ConsoleLogListener.DEFAULT_LOG_LEVEL, ConsoleLogListener.parseLogLevel("foo").orElseThrow());
}
@Test
void requireThatLogEntryWithLevelAboveThresholdIsNotOutput() {
ByteArrayOutputStream out = new ByteArrayOutputStream();
LogListener listener = new ConsoleLogListener(new PrintStream(out), null, "5");
- for (int i = 0; i < 10; ++i) {
- listener.logged(new MyEntry(0, i, "message"));
+ for (LogLevel l : LogLevel.values()) {
+ listener.logged(new MyEntry(0, l, "message"));
}
// TODO: Should use ConsoleLogFormatter.ABSENCE_REPLACEMENT instead of literal '-'. See ticket 7128315.
assertEquals("0.000000\t" + HOSTNAME + "\t" + PROCESS_ID + "\t-\t-\tunknown\tmessage\n" +
@@ -73,10 +67,10 @@ public class ConsoleLogListenerTestCase {
private static class MyEntry implements LogEntry {
final String message;
- final int level;
+ final LogLevel level;
final long time;
- MyEntry(long time, int level, String message) {
+ MyEntry(long time, LogLevel level, String message) {
this.message = message;
this.level = level;
this.time = time;
@@ -87,9 +81,15 @@ public class ConsoleLogListenerTestCase {
return time;
}
- @Override
+ @Override public LogLevel getLogLevel() { return level; }
+ @Override public String getLoggerName() { return null; }
+ @Override public long getSequence() { return 0; }
+ @Override public String getThreadInfo() { return null; }
+ @Override public StackTraceElement getLocation() { return null; }
+
+ @Override @SuppressWarnings("deprecation")
public int getLevel() {
- return level;
+ return level.ordinal();
}
@Override
diff --git a/jdisc_core/src/test/java/com/yahoo/jdisc/core/OsgiLogHandlerTestCase.java b/jdisc_core/src/test/java/com/yahoo/jdisc/core/OsgiLogHandlerTestCase.java
index 626cae67c41..f5a86b63ae5 100644
--- a/jdisc_core/src/test/java/com/yahoo/jdisc/core/OsgiLogHandlerTestCase.java
+++ b/jdisc_core/src/test/java/com/yahoo/jdisc/core/OsgiLogHandlerTestCase.java
@@ -2,7 +2,9 @@
package com.yahoo.jdisc.core;
import org.junit.jupiter.api.Test;
+import org.osgi.framework.Bundle;
import org.osgi.framework.ServiceReference;
+import org.osgi.service.log.LogLevel;
import org.osgi.service.log.LogService;
import java.time.Instant;
@@ -30,40 +32,40 @@ public class OsgiLogHandlerTestCase {
Logger log = newLogger(logService);
log.log(Level.INFO, "foo");
- assertEquals(OsgiLogHandler.toServiceLevel(Level.INFO), logService.lastLevel);
+ assertEquals(OsgiLogHandler.toServiceLevel(Level.INFO), logService.lastLevel());
assertEquals("foo", logService.lastMessage);
assertNull(logService.lastThrowable);
Throwable t = new Throwable();
log.log(Level.SEVERE, "bar", t);
- assertEquals(OsgiLogHandler.toServiceLevel(Level.SEVERE), logService.lastLevel);
+ assertEquals(OsgiLogHandler.toServiceLevel(Level.SEVERE), logService.lastLevel());
assertEquals("bar", logService.lastMessage);
assertEquals(t, logService.lastThrowable);
}
@Test
void requireThatStadardLogLevelsAreConverted() {
- assertLogLevel(LogService.LOG_ERROR, Level.SEVERE);
- assertLogLevel(LogService.LOG_WARNING, Level.WARNING);
- assertLogLevel(LogService.LOG_INFO, Level.INFO);
- assertLogLevel(LogService.LOG_DEBUG, Level.CONFIG);
- assertLogLevel(LogService.LOG_DEBUG, Level.FINE);
- assertLogLevel(LogService.LOG_DEBUG, Level.FINER);
- assertLogLevel(LogService.LOG_DEBUG, Level.FINEST);
+ assertLogLevel(LogLevel.ERROR, Level.SEVERE);
+ assertLogLevel(LogLevel.WARN, Level.WARNING);
+ assertLogLevel(LogLevel.INFO, Level.INFO);
+ assertLogLevel(LogLevel.DEBUG, Level.CONFIG);
+ assertLogLevel(LogLevel.DEBUG, Level.FINE);
+ assertLogLevel(LogLevel.DEBUG, Level.FINER);
+ assertLogLevel(LogLevel.DEBUG, Level.FINEST);
}
@Test
void requireThatCustomLogLevelsAreConverted() {
for (int i = Level.ALL.intValue() - 69; i < Level.OFF.intValue() + 69; ++i) {
- int expectedLevel;
+ LogLevel expectedLevel;
if (i >= Level.SEVERE.intValue()) {
- expectedLevel = LogService.LOG_ERROR;
+ expectedLevel = LogLevel.ERROR;
} else if (i >= Level.WARNING.intValue()) {
- expectedLevel = LogService.LOG_WARNING;
+ expectedLevel = LogLevel.WARN;
} else if (i >= Level.INFO.intValue()) {
- expectedLevel = LogService.LOG_INFO;
+ expectedLevel = LogLevel.INFO;
} else {
- expectedLevel = LogService.LOG_DEBUG;
+ expectedLevel = LogLevel.DEBUG;
}
assertLogLevel(expectedLevel, new MyLogLevel(i));
}
@@ -120,11 +122,11 @@ public class OsgiLogHandlerTestCase {
assertNull(ref.getProperty("unknown"));
}
- private static void assertLogLevel(int expectedLevel, Level level) {
+ private static void assertLogLevel(LogLevel expectedLevel, Level level) {
MyLogService logService = new MyLogService();
Logger log = newLogger(logService);
log.log(level, "message");
- assertEquals(expectedLevel, logService.lastLevel);
+ assertEquals(expectedLevel, logService.lastLevel());
}
@SuppressWarnings("unchecked")
@@ -154,28 +156,36 @@ public class OsgiLogHandlerTestCase {
String lastMessage;
Throwable lastThrowable;
- @Override
+ LogLevel lastLevel() { return LogLevel.values()[lastLevel]; }
+
+ @Override @SuppressWarnings("deprecation")
public void log(int level, String message) {
log(null, level, message, null);
}
- @Override
+ @Override @SuppressWarnings("deprecation")
public void log(int level, String message, Throwable throwable) {
log(null, level, message, throwable);
}
- @Override
+ @Override @SuppressWarnings("deprecation")
public void log(ServiceReference serviceReference, int level, String message) {
log(serviceReference, level, message, null);
}
- @Override
+ @Override @SuppressWarnings("deprecation")
public void log(ServiceReference serviceReference, int level, String message, Throwable throwable) {
lastServiceReference = serviceReference;
lastLevel = level;
lastMessage = message;
lastThrowable = throwable;
}
+
+ @Override public org.osgi.service.log.Logger getLogger(String s) { return null; }
+ @Override public org.osgi.service.log.Logger getLogger(Class<?> aClass) { return null; }
+ @Override public <L extends org.osgi.service.log.Logger> L getLogger(String s, Class<L> aClass) { return null; }
+ @Override public <L extends org.osgi.service.log.Logger> L getLogger(Class<?> aClass, Class<L> aClass1) { return null; }
+ @Override public <L extends org.osgi.service.log.Logger> L getLogger(Bundle bundle, String s, Class<L> aClass) { return null; }
}
private static class MyResourceBundle extends ResourceBundle {
diff --git a/jdisc_core/src/test/java/com/yahoo/jdisc/core/OsgiLogManagerTestCase.java b/jdisc_core/src/test/java/com/yahoo/jdisc/core/OsgiLogManagerTestCase.java
deleted file mode 100644
index 7b5af97ca13..00000000000
--- a/jdisc_core/src/test/java/com/yahoo/jdisc/core/OsgiLogManagerTestCase.java
+++ /dev/null
@@ -1,185 +0,0 @@
-// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.jdisc.core;
-
-import com.yahoo.jdisc.test.TestDriver;
-import org.junit.jupiter.api.Test;
-import org.mockito.Mockito;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleException;
-import org.osgi.framework.ServiceReference;
-import org.osgi.framework.ServiceRegistration;
-import org.osgi.service.log.LogService;
-
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.junit.jupiter.api.Assertions.assertSame;
-
-
-/**
- * @author Simon Thoresen Hult
- */
-public class OsgiLogManagerTestCase {
-
- @Test
- void requireThatAllLogMethodsAreImplemented() throws BundleException {
- FelixFramework felix = TestDriver.newOsgiFramework();
- felix.start();
-
- BundleContext ctx = felix.bundleContext();
- OsgiLogManager manager = new OsgiLogManager(true);
- manager.install(ctx);
- MyLogService service = new MyLogService();
- ctx.registerService(LogService.class.getName(), service, null);
-
- manager.log(2, "a");
- assertLast(service, null, 2, "a", null);
-
- Throwable t1 = new Throwable();
- manager.log(4, "b", t1);
- assertLast(service, null, 4, "b", t1);
-
- ServiceReference<?> ref1 = Mockito.mock(ServiceReference.class);
- manager.log(ref1, 8, "c");
- assertLast(service, ref1, 8, "c", null);
-
- ServiceReference<?> ref2 = Mockito.mock(ServiceReference.class);
- Throwable t2 = new Throwable();
- manager.log(ref2, 16, "d", t2);
- assertLast(service, ref2, 16, "d", t2);
-
- manager.uninstall();
- felix.stop();
- }
-
- @Test
- void requireThatLogManagerWritesToAllRegisteredLogServices() throws BundleException {
- FelixFramework felix = TestDriver.newOsgiFramework();
- felix.start();
-
- BundleContext ctx = felix.bundleContext();
- MyLogService foo = new MyLogService();
- ServiceRegistration<LogService> fooReg = ctx.registerService(LogService.class, foo, null);
-
- OsgiLogManager manager = new OsgiLogManager(true);
- manager.install(ctx);
-
- ServiceReference<?> ref1 = Mockito.mock(ServiceReference.class);
- Throwable t1 = new Throwable();
- manager.log(ref1, 2, "a", t1);
- assertLast(foo, ref1, 2, "a", t1);
-
- MyLogService bar = new MyLogService();
- ServiceRegistration<LogService> barReg = ctx.registerService(LogService.class, bar, null);
-
- ServiceReference<?> ref2 = Mockito.mock(ServiceReference.class);
- Throwable t2 = new Throwable();
- manager.log(ref2, 4, "b", t2);
- assertLast(foo, ref2, 4, "b", t2);
- assertLast(bar, ref2, 4, "b", t2);
-
- MyLogService baz = new MyLogService();
- ServiceRegistration<LogService> bazReg = ctx.registerService(LogService.class, baz, null);
-
- ServiceReference<?> ref3 = Mockito.mock(ServiceReference.class);
- Throwable t3 = new Throwable();
- manager.log(ref3, 8, "c", t3);
- assertLast(foo, ref3, 8, "c", t3);
- assertLast(bar, ref3, 8, "c", t3);
- assertLast(baz, ref3, 8, "c", t3);
-
- fooReg.unregister();
-
- ServiceReference<?> ref4 = Mockito.mock(ServiceReference.class);
- Throwable t4 = new Throwable();
- manager.log(ref4, 16, "d", t4);
- assertLast(foo, ref3, 8, "c", t3);
- assertLast(bar, ref4, 16, "d", t4);
- assertLast(baz, ref4, 16, "d", t4);
-
- barReg.unregister();
-
- ServiceReference<?> ref5 = Mockito.mock(ServiceReference.class);
- Throwable t5 = new Throwable();
- manager.log(ref5, 32, "e", t5);
- assertLast(foo, ref3, 8, "c", t3);
- assertLast(bar, ref4, 16, "d", t4);
- assertLast(baz, ref5, 32, "e", t5);
-
- bazReg.unregister();
-
- ServiceReference<?> ref6 = Mockito.mock(ServiceReference.class);
- Throwable t6 = new Throwable();
- manager.log(ref6, 64, "f", t6);
- assertLast(foo, ref3, 8, "c", t3);
- assertLast(bar, ref4, 16, "d", t4);
- assertLast(baz, ref5, 32, "e", t5);
-
- manager.uninstall();
- felix.stop();
- }
-
- @Test
- void requireThatRootLoggerModificationCanBeDisabled() throws BundleException {
- Logger logger = Logger.getLogger("");
- logger.setLevel(Level.WARNING);
-
- new OsgiLogManager(false).install(Mockito.mock(BundleContext.class));
- assertEquals(Level.WARNING, logger.getLevel());
-
- new OsgiLogManager(true).install(Mockito.mock(BundleContext.class));
- assertEquals(Level.ALL, logger.getLevel());
- }
-
- @Test
- void requireThatRootLoggerLevelIsModifiedIfNoLoggerConfigIsGiven() {
- Logger logger = Logger.getLogger("");
- logger.setLevel(Level.WARNING);
-
- OsgiLogManager.newInstance().install(Mockito.mock(BundleContext.class));
-
- assertNull(System.getProperty("java.util.logging.config.file"));
- assertEquals(Level.ALL, logger.getLevel());
- }
-
- private static void assertLast(MyLogService service, ServiceReference<?> ref, int level, String message, Throwable t) {
- assertSame(ref, service.lastServiceReference);
- assertEquals(level, service.lastLevel);
- assertEquals(message, service.lastMessage);
- assertSame(t, service.lastThrowable);
- }
-
- @SuppressWarnings("rawtypes")
- private static class MyLogService implements LogService {
-
- ServiceReference lastServiceReference;
- int lastLevel;
- String lastMessage;
- Throwable lastThrowable;
-
- @Override
- public void log(int level, String message) {
- log(null, level, message, null);
- }
-
- @Override
- public void log(int level, String message, Throwable throwable) {
- log(null, level, message, throwable);
- }
-
- @Override
- public void log(ServiceReference serviceReference, int level, String message) {
- log(serviceReference, level, message, null);
- }
-
- @Override
- public void log(ServiceReference serviceReference, int level, String message, Throwable throwable) {
- lastServiceReference = serviceReference;
- lastLevel = level;
- lastMessage = message;
- lastThrowable = throwable;
- }
- }
-}