aboutsummaryrefslogtreecommitdiffstats
path: root/jdisc_core/src/test/java/com/yahoo/jdisc/core/ConsoleLogListenerTestCase.java
blob: 7bb1d0d9b726f358a2bde86a095dfe716bf8552b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
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.LogEntry;
import org.osgi.service.log.LogLevel;
import org.osgi.service.log.LogListener;

import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.util.Optional;

import static org.junit.jupiter.api.Assertions.assertEquals;

/**
 * @author Vikas Panwar
 */
public class ConsoleLogListenerTestCase {

    private static final String HOSTNAME = ConsoleLogFormatter.formatOptional(ConsoleLogListener.getHostname());
    private static final String PROCESS_ID = ConsoleLogListener.getProcessId();

    @Test
    void requireThatLogLevelParserKnowsOsgiLogLevels() {
        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(Optional.empty(), ConsoleLogListener.parseLogLevel("OFF"));
    }

    @Test
    void requireThatLogLevelParserKnowsAll() {
        assertEquals(LogLevel.TRACE, ConsoleLogListener.parseLogLevel("ALL").orElseThrow());
    }

    @Test
    void requireThatLogLevelParserErrorsReturnDefault() {
        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 (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" +
                "0.000000\t" + HOSTNAME + "\t" + PROCESS_ID + "\t-\t-\terror\tmessage\n" +
                "0.000000\t" + HOSTNAME + "\t" + PROCESS_ID + "\t-\t-\twarning\tmessage\n" +
                "0.000000\t" + HOSTNAME + "\t" + PROCESS_ID + "\t-\t-\tinfo\tmessage\n" +
                "0.000000\t" + HOSTNAME + "\t" + PROCESS_ID + "\t-\t-\tdebug\tmessage\n" +
                "0.000000\t" + HOSTNAME + "\t" + PROCESS_ID + "\t-\t-\tunknown\tmessage\n",
                out.toString());
    }

    private static class MyEntry implements LogEntry {

        final String message;
        final LogLevel level;
        final long time;

        MyEntry(long time, LogLevel level, String message) {
            this.message = message;
            this.level = level;
            this.time = time;
        }

        @Override
        public long getTime() {
            return time;
        }

        @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.ordinal();
        }

        @Override
        public String getMessage() {
            return message;
        }

        @Override
        public Throwable getException() {
            return null;
        }

        @Override
        public Bundle getBundle() {
            return null;
        }

        @Override
        public ServiceReference<?> getServiceReference() {
            return null;
        }
    }
}