package org.ops4j.pax.logging.logback.internal;
import org.easymock.EasyMock;
import org.junit.Assert;
import org.junit.Test;
import org.ops4j.pax.logging.EventAdminPoster;
import org.ops4j.pax.logging.PaxLogger;
import org.ops4j.pax.logging.PaxLoggingService;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.service.log.LogService;
import static org.easymock.EasyMock.eq;
import static org.easymock.EasyMock.isA;
/**
* @author Chris Dolan
* @since 6/10/11 11:13 AM
*/
public class PaxLoggingServiceImplTest {
/**
* Tests the main functionality of the logging service.
*/
@Test
public void test() {
BundleContext bundleContext = EasyMock.createNiceMock(BundleContext.class);
EventAdminPoster eventPoster = EasyMock.createNiceMock(EventAdminPoster.class);
final Bundle mockBundle = makeBundle();
ServiceReference serviceReference = EasyMock.createStrictMock(ServiceReference.class);
EasyMock.expect(serviceReference.getBundle()).andReturn(mockBundle).anyTimes();
final PaxLogger logger1 = EasyMock.createStrictMock(PaxLogger.class);
logger1.debug("d", null); EasyMock.expectLastCall().once();
logger1.inform("i", null); EasyMock.expectLastCall().once();
logger1.warn("w", null); EasyMock.expectLastCall().once();
logger1.error("e", null); EasyMock.expectLastCall().once();
logger1.error(eq("e"), isA(Throwable.class)); EasyMock.expectLastCall().once();
final PaxLogger logger2 = EasyMock.createStrictMock(PaxLogger.class);
logger2.inform("ib", null); EasyMock.expectLastCall().once();
logger2.inform("isr", null); EasyMock.expectLastCall().once();
logger2.inform("isr2", null); EasyMock.expectLastCall().once();
EasyMock.replay(bundleContext, eventPoster, mockBundle, serviceReference, logger1, logger2);
PaxLoggingServiceImpl service = new PaxLoggingServiceImpl(bundleContext, new LogReaderServiceImpl(0).getAccessDelegate(), eventPoster) {
public PaxLogger getLogger(Bundle bundle, String category, String fqcn) {
Assert.assertEquals(getClass().getName(), fqcn);
if (bundle == null && "[undefined]".equals(category))
return logger1;
if (bundle == mockBundle && "bundle1".equals(category))
return logger2;
throw new AssertionError("bundle: " + bundle + ", category: " + category);
}
};
try {
Assert.assertEquals(LogService.LOG_DEBUG, service.getLogLevel());
service.log(LogService.LOG_DEBUG, "d");
service.log(LogService.LOG_INFO, "i");
service.log(LogService.LOG_WARNING, "w");
service.log(LogService.LOG_ERROR, "e");
service.log(LogService.LOG_ERROR, "e", new Throwable());
service.log(mockBundle, LogService.LOG_INFO, "ib", null);
service.log(serviceReference, LogService.LOG_INFO, "isr", null);
service.log(serviceReference, LogService.LOG_INFO, "isr2");
} finally {
service.stop();
}
EasyMock.verify(bundleContext, eventPoster, mockBundle, serviceReference, logger1, logger2);
}
/**
* Tests the ManagedService inner class.
*/
@Test
public void testInner() {
BundleContext bundleContext = EasyMock.createNiceMock(BundleContext.class);
EventAdminPoster eventPoster = EasyMock.createNiceMock(EventAdminPoster.class);
final Bundle mockBundle = makeBundle();
final PaxLogger logger = EasyMock.createStrictMock(PaxLogger.class);
logger.debug("d", null); EasyMock.expectLastCall().once();
logger.inform("i", null); EasyMock.expectLastCall().once();
logger.warn("w", null); EasyMock.expectLastCall().once();
logger.error("e", null); EasyMock.expectLastCall().once();
logger.error(eq("e"), isA(Throwable.class)); EasyMock.expectLastCall().once();
EasyMock.replay(bundleContext, eventPoster, mockBundle, logger);
PaxLoggingServiceImpl service = new PaxLoggingServiceImpl(bundleContext, new LogReaderServiceImpl(0).getAccessDelegate(), eventPoster) {
public PaxLogger getLogger(Bundle bundle, String category, String fqcn) {
Assert.assertEquals(PaxLoggingServiceImpl.class.getName() + "$1ManagedPaxLoggingService", fqcn);
if (bundle == mockBundle && "bundle1".equals(category))
return logger;
throw new AssertionError("bundle: " + bundle + ", category: " + category);
}
};
PaxLoggingService innerService = (PaxLoggingService) service.getService(mockBundle, null);
try {
Assert.assertEquals(LogService.LOG_DEBUG, innerService.getLogLevel());
innerService.log(LogService.LOG_DEBUG, "d");
innerService.log(LogService.LOG_INFO, "i");
innerService.log(LogService.LOG_WARNING, "w");
innerService.log(LogService.LOG_ERROR, "e");
innerService.log(LogService.LOG_ERROR, "e", new Throwable());
} finally {
service.stop();
}
EasyMock.verify(mockBundle, logger);
}
private Bundle makeBundle() {
Bundle bundle = EasyMock.createMock(Bundle.class);
EasyMock.expect(bundle.getBundleId()).andReturn(1L).anyTimes();
EasyMock.expect(bundle.getSymbolicName()).andReturn("bundle1").anyTimes();
return bundle;
}
@Test(expected=IllegalArgumentException.class)
public void testNullBundleContext() {
new PaxLoggingServiceImpl((BundleContext)null, EasyMock.createMock(LogReaderServiceAccess.class), EasyMock.createMock(EventAdminPoster.class));
}
@Test(expected=IllegalArgumentException.class)
public void testNullLogReader() {
new PaxLoggingServiceImpl(EasyMock.createMock(BundleContext.class), (LogReaderServiceAccess)null, EasyMock.createMock(EventAdminPoster.class));
}
@Test(expected=IllegalArgumentException.class)
public void testNullEventPoster() {
new PaxLoggingServiceImpl(EasyMock.createMock(BundleContext.class), EasyMock.createMock(LogReaderServiceAccess.class), (EventAdminPoster)null);
}
}