/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.ambari.scom.logging;
import org.eclipse.persistence.logging.SessionLog;
import org.eclipse.persistence.logging.SessionLogEntry;
import org.junit.Assert;
import org.junit.Test;
import org.slf4j.Logger;
import java.util.logging.Formatter;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import static org.easymock.EasyMock.anyObject;
import static org.easymock.EasyMock.createNiceMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
/**
* JpaLogger Tests
*/
public class JpaLoggerTest {
@Test
public void testLog() throws Exception {
Logger logger = createNiceMock(Logger.class);
SessionLogEntry severeEntry = createNiceMock(SessionLogEntry.class);
SessionLogEntry configEntry = createNiceMock(SessionLogEntry.class);
SessionLogEntry finestEntry = createNiceMock(SessionLogEntry.class);
Formatter formatter = createNiceMock(Formatter.class);
JpaLogger jpaLogger = new TestJpaLogger(logger, formatter);
// set expectations
expect(severeEntry.getLevel()).andReturn(SessionLog.SEVERE);
expect(formatter.format((LogRecord) anyObject())).andReturn("severe log message");
logger.error("severe log message");
expect(configEntry.getLevel()).andReturn(SessionLog.CONFIG);
expect(formatter.format((LogRecord) anyObject())).andReturn("config log message");
logger.info("config log message");
expect(finestEntry.getLevel()).andReturn(SessionLog.FINEST);
expect(formatter.format((LogRecord) anyObject())).andReturn("finest log message");
logger.debug("finest log message");
// replay
replay(logger, severeEntry, configEntry, finestEntry, formatter);
jpaLogger.log(severeEntry);
jpaLogger.log(configEntry);
jpaLogger.log(finestEntry);
// verify
verify(logger, severeEntry, configEntry, finestEntry, formatter);
}
@Test
public void testThrowing() throws Exception {
Logger logger = createNiceMock(Logger.class);
Formatter formatter = createNiceMock(Formatter.class);
Exception exception = new IllegalStateException("Something went wrong!");
JpaLogger jpaLogger = new TestJpaLogger(logger, formatter);
// set expectations
logger.error(null, exception);
// replay
replay(logger, formatter);
jpaLogger.throwing(exception);
// verify
verify(logger, formatter);
}
@Test
public void testShouldLog() throws Exception {
JpaLogger logger = new JpaLogger();
Assert.assertTrue(logger.shouldLog(SessionLog.SEVERE, ""));
Assert.assertTrue(logger.shouldLog(SessionLog.WARNING, ""));
Assert.assertFalse(logger.shouldLog(SessionLog.CONFIG, ""));
Assert.assertFalse(logger.shouldLog(SessionLog.FINER, ""));
Assert.assertFalse(logger.shouldLog(SessionLog.ALL, ""));
logger.setLogLevel(Level.FINER);
Assert.assertTrue(logger.shouldLog(SessionLog.SEVERE, ""));
Assert.assertTrue(logger.shouldLog(SessionLog.WARNING, ""));
Assert.assertTrue(logger.shouldLog(SessionLog.CONFIG, ""));
Assert.assertTrue(logger.shouldLog(SessionLog.FINER, ""));
Assert.assertFalse(logger.shouldLog(SessionLog.ALL, ""));
logger.setLogLevel(Level.SEVERE);
Assert.assertTrue(logger.shouldLog(SessionLog.SEVERE, ""));
Assert.assertFalse(logger.shouldLog(SessionLog.WARNING, ""));
Assert.assertFalse(logger.shouldLog(SessionLog.CONFIG, ""));
Assert.assertFalse(logger.shouldLog(SessionLog.FINER, ""));
Assert.assertFalse(logger.shouldLog(SessionLog.ALL, ""));
}
@Test
public void testGetSetLogLevel() throws Exception {
JpaLogger logger = new JpaLogger();
Assert.assertEquals(Level.WARNING, logger.getLogLevel());
logger.setLogLevel(Level.ALL);
Assert.assertEquals(Level.ALL, logger.getLogLevel());
logger.setLogLevel(Level.FINER);
Assert.assertEquals(Level.FINER, logger.getLogLevel());
logger.setLogLevel(Level.OFF);
Assert.assertEquals(Level.OFF, logger.getLogLevel());
}
private static class TestJpaLogger extends JpaLogger {
private final Logger logger;
private final Formatter formatter;
private TestJpaLogger(Logger logger, Formatter formatter) {
this.logger = logger;
this.formatter = formatter;
}
@Override
protected Logger getLogger() {
return logger;
}
@Override
protected Formatter getFormatter() {
return formatter;
}
@Override
protected String formatMessage(SessionLogEntry entry) {
return "message";
}
}
}