blob: f2d4b4f158f3e22677bd1f6924040a23c665da21 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2019 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.equinox.common.tests;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
import org.eclipse.core.internal.runtime.RuntimeLog;
import org.eclipse.core.runtime.ILogListener;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.tests.harness.CoreTest;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;
import org.osgi.service.log.LogService;
import org.osgi.service.log.Logger;
public class PlatformLogWriterTest extends CoreTest {
public static class TestILogListener implements ILogListener {
final AtomicReference<CountDownLatch> expected = new AtomicReference<>();
final List<IStatus> statuses = new CopyOnWriteArrayList<>();
@Override
public void logging(IStatus status, String plugin) {
CountDownLatch current = expected.get();
if (current != null) {
current.countDown();
}
statuses.add(status);
}
List<IStatus> getAllExpectedStatus() throws InterruptedException {
CountDownLatch current = expected.get();
if (current != null) {
current.await(10, TimeUnit.SECONDS);
}
return new ArrayList<>(statuses);
}
void setExpected(int expected) {
statuses.clear();
this.expected.set(new CountDownLatch(expected));
}
}
public PlatformLogWriterTest() {
super(null);
}
public PlatformLogWriterTest(String name) {
super(name);
}
LogService logService;
final TestILogListener listener = new TestILogListener();
@Override
protected void setUp() {
Bundle thisBundle = FrameworkUtil.getBundle(getClass());
BundleContext context = thisBundle.getBundleContext();
logService = context.getService(context.getServiceReference(LogService.class));
RuntimeLog.addLogListener(listener);
}
@Override
protected void tearDown() throws Exception {
RuntimeLog.removeLogListener(listener);
}
public void testLogServiceLevels() throws InterruptedException {
listener.setExpected(6);
Logger logger = logService.getLogger("org.eclipse.equinox.logger");
logger.audit("audit");
logger.error("error");
logger.warn("warn");
logger.info("info");
logger.debug("debug");
logger.trace("trace");
List<IStatus> allStatus = listener.getAllExpectedStatus();
assertEquals("Wrong number of status.", 6, allStatus.size());
assertStatus(allStatus.get(0), "audit", IStatus.OK);
assertStatus(allStatus.get(1), "error", IStatus.ERROR);
assertStatus(allStatus.get(2), "warn", IStatus.WARNING);
assertStatus(allStatus.get(3), "info", IStatus.INFO);
assertStatus(allStatus.get(4), "debug", IStatus.OK);
assertStatus(allStatus.get(5), "trace", IStatus.OK);
}
private void assertStatus(IStatus status, String message, int severity) {
assertEquals("Wrong message.", message, status.getMessage());
assertEquals("Wrong severity.", severity, status.getSeverity());
}
}