OpenRaoLoggerProviderTest.java

/*
 * Copyright (c) 2022, RTE (http://www.rte-france.com)
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 */

package com.powsybl.openrao.commons.logs;

import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.read.ListAppender;
import org.junit.jupiter.api.Test;
import org.slf4j.LoggerFactory;

import java.util.List;

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

/**
 * @author Peter Mitri {@literal <peter.mitri at rte-france.com>}
 */
class OpenRaoLoggerProviderTest {
    private ListAppender<ILoggingEvent> getLogs(Class clazz) {
        Logger logger = (Logger) LoggerFactory.getLogger(clazz);
        ListAppender<ILoggingEvent> listAppender = new ListAppender<>();
        listAppender.start();
        logger.addAppender(listAppender);
        return listAppender;
    }

    @Test
    void testBusinessLogs() {
        assertTrue(OpenRaoLoggerProvider.BUSINESS_LOGS.isInfoEnabled());
        assertTrue(OpenRaoLoggerProvider.BUSINESS_LOGS.isTraceEnabled());

        ListAppender<ILoggingEvent> listAppender = getLogs(RaoBusinessLogs.class);

        assertTrue(OpenRaoLoggerProvider.BUSINESS_LOGS instanceof RaoBusinessLogs);

        OpenRaoLoggerProvider.BUSINESS_LOGS.info("info");
        OpenRaoLoggerProvider.BUSINESS_LOGS.error("error");

        List<ILoggingEvent> logsList = listAppender.list;

        assertEquals(2, logsList.size());
        assertEquals("[INFO] info", logsList.get(0).toString());
        assertEquals("[ERROR] error", logsList.get(1).toString());

        assertThrows(IllegalCallerException.class, () -> OpenRaoLoggerProvider.BUSINESS_LOGS.trace("log"));
        assertThrows(IllegalCallerException.class, () -> OpenRaoLoggerProvider.BUSINESS_LOGS.debug("log"));
        assertThrows(IllegalCallerException.class, () -> OpenRaoLoggerProvider.BUSINESS_LOGS.warn("log"));
    }

    @Test
    void testBusinessWarns() {
        assertTrue(OpenRaoLoggerProvider.BUSINESS_WARNS.isInfoEnabled());
        assertTrue(OpenRaoLoggerProvider.BUSINESS_WARNS.isTraceEnabled());

        ListAppender<ILoggingEvent> listAppender = getLogs(RaoBusinessWarns.class);

        assertTrue(OpenRaoLoggerProvider.BUSINESS_WARNS instanceof RaoBusinessWarns);

        OpenRaoLoggerProvider.BUSINESS_WARNS.warn("warn1");
        OpenRaoLoggerProvider.BUSINESS_WARNS.warn("warn2");

        List<ILoggingEvent> logsList = listAppender.list;

        assertEquals(2, logsList.size());
        assertEquals("[WARN] warn1", logsList.get(0).toString());
        assertEquals("[WARN] warn2", logsList.get(1).toString());

        assertThrows(IllegalCallerException.class, () -> OpenRaoLoggerProvider.BUSINESS_WARNS.trace("log"));
        assertThrows(IllegalCallerException.class, () -> OpenRaoLoggerProvider.BUSINESS_WARNS.debug("log"));
        assertThrows(IllegalCallerException.class, () -> OpenRaoLoggerProvider.BUSINESS_WARNS.info("log"));
        assertThrows(IllegalCallerException.class, () -> OpenRaoLoggerProvider.BUSINESS_WARNS.error("log"));
    }

    @Test
    void testTechnicalLogs() {
        assertTrue(OpenRaoLoggerProvider.TECHNICAL_LOGS.isInfoEnabled());
        assertTrue(OpenRaoLoggerProvider.TECHNICAL_LOGS.isTraceEnabled());

        ListAppender<ILoggingEvent> listAppender = getLogs(TechnicalLogs.class);

        assertTrue(OpenRaoLoggerProvider.TECHNICAL_LOGS instanceof TechnicalLogs);

        OpenRaoLoggerProvider.TECHNICAL_LOGS.info("info");
        OpenRaoLoggerProvider.TECHNICAL_LOGS.warn("warn");
        OpenRaoLoggerProvider.TECHNICAL_LOGS.error("error");
        OpenRaoLoggerProvider.TECHNICAL_LOGS.debug("debug");
        OpenRaoLoggerProvider.TECHNICAL_LOGS.trace("trace");

        List<ILoggingEvent> logsList = listAppender.list;

        assertEquals(5, logsList.size());
        assertEquals("[INFO] info", logsList.get(0).toString());
        assertEquals("[WARN] warn", logsList.get(1).toString());
        assertEquals("[ERROR] error", logsList.get(2).toString());
        assertEquals("[DEBUG] debug", logsList.get(3).toString());
        assertEquals("[TRACE] trace", logsList.get(4).toString());
    }
}