blob: 04d90910e8c0610f860ef65c00ad4c7066022d8b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2014 IBM Corporation and others All rights reserved. This
* program and the accompanying materials are made available under the terms of
* the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors: IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.equinox.log.test;
import java.io.File;
import java.util.*;
import org.eclipse.osgi.internal.framework.EquinoxConfiguration;
import org.eclipse.osgi.launch.Equinox;
import org.eclipse.osgi.tests.OSGiTestsActivator;
import org.eclipse.osgi.tests.bundles.AbstractBundleTests;
import org.osgi.framework.*;
import org.osgi.service.log.*;
public class LogReaderServiceTest extends AbstractBundleTests {
private LogService log;
private ServiceReference logReference;
private LogReaderService reader;
private ServiceReference readerReference;
public LogReaderServiceTest(String name) {
setName(name);
}
protected void setUp() throws Exception {
super.setUp();
logReference = OSGiTestsActivator.getContext().getServiceReference(LogService.class.getName());
readerReference = OSGiTestsActivator.getContext().getServiceReference(LogReaderService.class.getName());
log = (LogService) OSGiTestsActivator.getContext().getService(logReference);
reader = (LogReaderService) OSGiTestsActivator.getContext().getService(readerReference);
}
protected void tearDown() throws Exception {
OSGiTestsActivator.getContext().ungetService(logReference);
OSGiTestsActivator.getContext().ungetService(readerReference);
super.tearDown();
}
public void testaddListener() throws Exception {
TestListener listener = new TestListener();
reader.addLogListener(listener);
synchronized (listener) {
log.log(LogService.LOG_INFO, "info"); //$NON-NLS-1$
listener.waitForLogEntry();
}
assertTrue(listener.getEntryX().getLevel() == LogService.LOG_INFO);
}
public void testaddListenerTwice() throws Exception {
TestListener listener = new TestListener();
reader.addLogListener(listener);
reader.addLogListener(listener);
synchronized (listener) {
log.log(LogService.LOG_INFO, "info"); //$NON-NLS-1$
listener.waitForLogEntry();
}
assertTrue(listener.getEntryX().getLevel() == LogService.LOG_INFO);
}
public void testaddNullListener() throws Exception {
try {
reader.addLogListener(null);
} catch (IllegalArgumentException t) {
return;
}
fail();
}
public void testBadListener() throws Exception {
LogListener listener = new LogListener() {
public synchronized void logged(LogEntry entry) {
notifyAll();
throw new RuntimeException("Expected error for testBadListener."); //$NON-NLS-1$
}
};
reader.addLogListener(listener);
synchronized (listener) {
log.log(LogService.LOG_INFO, "info"); //$NON-NLS-1$
listener.wait();
}
}
public void testLogEntry() throws Exception {
TestListener listener = new TestListener();
reader.addLogListener(listener);
long timeBeforeLog = System.currentTimeMillis();
synchronized (listener) {
log.log(logReference, LogService.LOG_INFO, "info", new Throwable("test")); //$NON-NLS-1$ //$NON-NLS-2$
listener.waitForLogEntry();
}
LogEntry entry = listener.getEntryX();
assertTrue(entry.getBundle() == OSGiTestsActivator.getContext().getBundle());
assertTrue(entry.getMessage().equals("info")); //$NON-NLS-1$
assertTrue(entry.getException().getMessage().equals("test")); //$NON-NLS-1$
assertTrue(entry.getServiceReference() == logReference);
assertTrue(entry.getTime() >= timeBeforeLog);
assertTrue(entry.getLevel() == LogService.LOG_INFO);
}
public void testLogBundleEventInfo() throws Exception {
// this is just a bundle that is harmless to start/stop
Bundle testBundle = installer.installBundle("test.logging.a"); //$NON-NLS-1$
TestListener listener = new TestListener(testBundle);
reader.addLogListener(listener);
synchronized (listener) {
testBundle.start();
listener.waitForLogEntry();
}
assertTrue(listener.getEntryX().getLevel() == LogService.LOG_INFO);
}
public void testLogServiceEventInfo() throws Exception {
TestListener listener = new TestListener();
reader.addLogListener(listener);
synchronized (listener) {
OSGiTestsActivator.getContext().registerService(Object.class.getName(), new Object(), null);
listener.waitForLogEntry();
}
assertTrue(listener.getEntryX().getLevel() == LogService.LOG_INFO);
}
public void testLogServiceEventDebug() throws Exception {
ServiceRegistration registration = OSGiTestsActivator.getContext().registerService(Object.class.getName(), new Object(), null);
TestListener listener = new TestListener();
reader.addLogListener(listener);
synchronized (listener) {
registration.setProperties(new Hashtable());
listener.waitForLogEntry();
}
assertTrue(listener.getEntryX().getLevel() == LogService.LOG_DEBUG);
}
public void testLogFrameworkEvent() throws Exception {
Bundle testBundle = installer.installBundle("test.logging.a"); //$NON-NLS-1$
TestListener listener = new TestListener(testBundle);
reader.addLogListener(listener);
synchronized (listener) {
installer.refreshPackages(new Bundle[] {testBundle});
listener.waitForLogEntry();
}
assertTrue(listener.getEntryX().getLevel() == LogService.LOG_INFO);
}
public void testLogHistory1() throws BundleException {
File config = OSGiTestsActivator.getContext().getDataFile(getName());
Map<String, Object> configuration = new HashMap<String, Object>();
configuration.put(Constants.FRAMEWORK_STORAGE, config.getAbsolutePath());
configuration.put(EquinoxConfiguration.PROP_LOG_HISTORY_MAX, "10");
Equinox equinox = new Equinox(configuration);
equinox.start();
try {
LogService testLog = equinox.getBundleContext().getService(equinox.getBundleContext().getServiceReference(LogService.class));
LogReaderService testReader = equinox.getBundleContext().getService(equinox.getBundleContext().getServiceReference(LogReaderService.class));
assertEquals("Expecting no logs.", 0, countLogEntries(testReader.getLog(), 0));
// log 9 things
for (int i = 0; i < 9; i++) {
testLog.log(LogService.LOG_WARNING, String.valueOf(i));
}
assertEquals("Wrong number of logs.", 9, countLogEntries(testReader.getLog(), 8));
// log 9 more things
for (int i = 9; i < 18; i++) {
testLog.log(LogService.LOG_WARNING, String.valueOf(i));
}
// should only be the last 10 logs (17-8)
assertEquals("Wrong number of logs.", 10, countLogEntries(testReader.getLog(), 17));
} finally {
try {
equinox.stop();
} catch (BundleException e) {
// ignore
}
}
}
public void testLogHistory2() throws BundleException {
File config = OSGiTestsActivator.getContext().getDataFile(getName());
Map<String, Object> configuration = new HashMap<String, Object>();
configuration.put(Constants.FRAMEWORK_STORAGE, config.getAbsolutePath());
Equinox equinox = new Equinox(configuration);
equinox.start();
try {
LogService testLog = equinox.getBundleContext().getService(equinox.getBundleContext().getServiceReference(LogService.class));
LogReaderService testReader = equinox.getBundleContext().getService(equinox.getBundleContext().getServiceReference(LogReaderService.class));
assertEquals("Expecting no logs.", 0, countLogEntries(testReader.getLog(), 0));
// log 9 things
for (int i = 0; i < 9; i++) {
testLog.log(LogService.LOG_WARNING, String.valueOf(i));
}
assertEquals("Wrong number of logs.", 0, countLogEntries(testReader.getLog(), 0));
} finally {
try {
equinox.stop();
} catch (BundleException e) {
// ignore
}
}
}
private int countLogEntries(Enumeration logEntries, int startingMessage) {
int count = 0;
while (logEntries.hasMoreElements()) {
LogEntry entry = (LogEntry) logEntries.nextElement();
assertEquals("Wrong log message.", String.valueOf(startingMessage), entry.getMessage());
startingMessage--;
count++;
}
return count;
}
}