Return-Path: X-Original-To: apmail-felix-commits-archive@www.apache.org Delivered-To: apmail-felix-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 35F4C10FBA for ; Sat, 1 Mar 2014 09:49:09 +0000 (UTC) Received: (qmail 81377 invoked by uid 500); 1 Mar 2014 09:49:08 -0000 Delivered-To: apmail-felix-commits-archive@felix.apache.org Received: (qmail 81347 invoked by uid 500); 1 Mar 2014 09:49:07 -0000 Mailing-List: contact commits-help@felix.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@felix.apache.org Delivered-To: mailing list commits@felix.apache.org Received: (qmail 81340 invoked by uid 99); 1 Mar 2014 09:49:07 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 01 Mar 2014 09:49:07 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 01 Mar 2014 09:49:03 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 65F46238897A; Sat, 1 Mar 2014 09:48:42 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1573142 - in /felix/sandbox/pderop/dependencymanager-prototype/dm.it/src/dm/it: ComponentTest.java TestBase.java Date: Sat, 01 Mar 2014 09:48:42 -0000 To: commits@felix.apache.org From: pderop@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20140301094842.65F46238897A@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: pderop Date: Sat Mar 1 09:48:41 2014 New Revision: 1573142 URL: http://svn.apache.org/r1573142 Log: Added TestBase class in integratio test. Added: felix/sandbox/pderop/dependencymanager-prototype/dm.it/src/dm/it/TestBase.java Modified: felix/sandbox/pderop/dependencymanager-prototype/dm.it/src/dm/it/ComponentTest.java Modified: felix/sandbox/pderop/dependencymanager-prototype/dm.it/src/dm/it/ComponentTest.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/dm.it/src/dm/it/ComponentTest.java?rev=1573142&r1=1573141&r2=1573142&view=diff ============================================================================== --- felix/sandbox/pderop/dependencymanager-prototype/dm.it/src/dm/it/ComponentTest.java (original) +++ felix/sandbox/pderop/dependencymanager-prototype/dm.it/src/dm/it/ComponentTest.java Sat Mar 1 09:48:41 2014 @@ -5,7 +5,6 @@ import java.util.Hashtable; import java.util.Map; import junit.framework.Assert; -import junit.framework.TestCase; import org.osgi.framework.BundleContext; import org.osgi.framework.FrameworkUtil; @@ -13,7 +12,7 @@ import org.osgi.framework.FrameworkUtil; import dm.Component; import dm.DependencyManager; -public class ComponentTest extends TestCase { +public class ComponentTest extends TestBase { private final Ensure m_ensure = new Ensure(); private final BundleContext m_context = FrameworkUtil.getBundle(this.getClass()).getBundleContext(); Added: felix/sandbox/pderop/dependencymanager-prototype/dm.it/src/dm/it/TestBase.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/dm.it/src/dm/it/TestBase.java?rev=1573142&view=auto ============================================================================== --- felix/sandbox/pderop/dependencymanager-prototype/dm.it/src/dm/it/TestBase.java (added) +++ felix/sandbox/pderop/dependencymanager-prototype/dm.it/src/dm/it/TestBase.java Sat Mar 1 09:48:41 2014 @@ -0,0 +1,247 @@ +package dm.it; + +import java.io.File; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.util.Hashtable; + +import junit.framework.TestCase; + +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.BundleException; +import org.osgi.framework.Constants; +import org.osgi.framework.FrameworkEvent; +import org.osgi.framework.FrameworkListener; +import org.osgi.framework.FrameworkUtil; +import org.osgi.framework.ServiceReference; +import org.osgi.framework.ServiceRegistration; +import org.osgi.service.log.LogService; + +/** + * Base class for all integration tests. + */ +public abstract class TestBase extends TestCase implements LogService, FrameworkListener { + // Default OSGI log service level. + private final static int LOG_LEVEL = LogService.LOG_WARNING; + + // Flag used to check if some errors have been logged during the execution of a given test. + private volatile boolean m_errorsLogged; + + // Bundle context injected by pax-exam for each integration test. + protected final BundleContext context = FrameworkUtil.getBundle(this.getClass()).getBundleContext(); + + // We implement OSGI log service. + protected ServiceRegistration logService; + + @Override + public void setUp() throws Exception { + logService = context.registerService(LogService.class.getName(), this, null); + context.addFrameworkListener(this); + } + + @Override + public void tearDown() throws Exception { + logService.unregister(); + context.removeFrameworkListener(this); + } + + /** + * Creates and provides an Ensure object with a name service property into the OSGi service registry. + */ + protected ServiceRegistration register(Ensure e, String name) { + Hashtable props = new Hashtable(); + props.put("name", name); + return context.registerService(Ensure.class.getName(), e, props); + } + + /** + * Helper method used to stop a given bundle. + * + * @param symbolicName + * the symbolic name of the bundle to be stopped. + */ + protected void stopBundle(String symbolicName) { + // Stop the test.annotation bundle + boolean found = false; + for (Bundle b : context.getBundles()) { + if (b.getSymbolicName().equals(symbolicName)) { + try { + found = true; + b.stop(); + } catch (BundleException e) { + e.printStackTrace(); + } + } + } + if (!found) { + throw new IllegalStateException("bundle " + symbolicName + " not found"); + } + } + + /** + * Helper method used to get a given bundle. + * + * @param symbolicName + * the symbolic name of the bundle to get. + */ + protected Bundle getBundle(String symbolicName) { + for (Bundle b : context.getBundles()) { + if (b.getSymbolicName().equals(symbolicName)) { + return b; + } + } + throw new IllegalStateException("bundle " + symbolicName + " not found"); + } + + /** + * Suspend the current thread for a while. + * + * @param n + * the number of milliseconds to wait for. + */ + protected void sleep(int ms) { + try { + Thread.sleep(ms); + } catch (InterruptedException e) { + } + } + + public void log(int level, String message) { + checkError(level, null); + if (LOG_LEVEL >= level) { + System.out.println(getLevel(level) + " - " + Thread.currentThread().getName() + " : " + message); + } + } + + public void log(int level, String message, Throwable exception) { + checkError(level, exception); + if (LOG_LEVEL >= level) { + StringBuilder sb = new StringBuilder(); + sb.append(getLevel(level) + " - " + Thread.currentThread().getName() + " : "); + sb.append(message); + parse(sb, exception); + System.out.println(sb.toString()); + } + } + + public void log(ServiceReference sr, int level, String message) { + checkError(level, null); + if (LOG_LEVEL >= level) { + StringBuilder sb = new StringBuilder(); + sb.append(getLevel(level) + " - " + Thread.currentThread().getName() + " : "); + sb.append(message); + System.out.println(sb.toString()); + } + } + + public void log(ServiceReference sr, int level, String message, Throwable exception) { + checkError(level, exception); + if (LOG_LEVEL >= level) { + StringBuilder sb = new StringBuilder(); + sb.append(getLevel(level) + " - " + Thread.currentThread().getName() + " : "); + sb.append(message); + parse(sb, exception); + System.out.println(sb.toString()); + } + } + + protected boolean errorsLogged() { + return m_errorsLogged; + } + + private void parse(StringBuilder sb, Throwable t) { + if (t != null) { + sb.append(" - "); + StringWriter buffer = new StringWriter(); + PrintWriter pw = new PrintWriter(buffer); + t.printStackTrace(pw); + sb.append(buffer.toString()); + m_errorsLogged = true; + } + } + + private String getLevel(int level) { + switch (level) { + case LogService.LOG_DEBUG : + return "DEBUG"; + case LogService.LOG_ERROR : + return "ERROR"; + case LogService.LOG_INFO : + return "INFO"; + case LogService.LOG_WARNING : + return "WARN"; + default : + return ""; + } + } + + private void checkError(int level, Throwable exception) { + if (level <= LOG_ERROR) { + m_errorsLogged = true; + } + if (exception != null) { + m_errorsLogged = true; + } + } + + public void frameworkEvent(FrameworkEvent event) { + int eventType = event.getType(); + String msg = getFrameworkEventMessage(eventType); + int level = (eventType == FrameworkEvent.ERROR) ? LOG_ERROR : LOG_WARNING; + if (msg != null) { + log(level, msg, event.getThrowable()); + } else { + log(level, "Unknown fwk event: " + event); + } + } + + private String getFrameworkEventMessage(int event) { + switch (event) { + case FrameworkEvent.ERROR : + return "FrameworkEvent: ERROR"; + case FrameworkEvent.INFO : + return "FrameworkEvent INFO"; + case FrameworkEvent.PACKAGES_REFRESHED : + return "FrameworkEvent: PACKAGE REFRESHED"; + case FrameworkEvent.STARTED : + return "FrameworkEvent: STARTED"; + case FrameworkEvent.STARTLEVEL_CHANGED : + return "FrameworkEvent: STARTLEVEL CHANGED"; + case FrameworkEvent.WARNING : + return "FrameworkEvent: WARNING"; + default : + return null; + } + } + + protected void warn(String msg, Object ... params) { + if (LOG_LEVEL >= LogService.LOG_WARNING) { + log(LogService.LOG_WARNING, params.length > 0 ? String.format(msg, params) : msg); + } + } + + protected void info(String msg, Object ... params) { + if (LOG_LEVEL >= LogService.LOG_INFO) { + log(LogService.LOG_INFO, params.length > 0 ? String.format(msg, params) : msg); + } + } + + protected void debug(String msg, Object ... params) { + if (LOG_LEVEL >= LogService.LOG_DEBUG) { + log(LogService.LOG_DEBUG, params.length > 0 ? String.format(msg, params) : msg); + } + } + + protected void error(String msg, Object ... params) { + log(LogService.LOG_ERROR, params.length > 0 ? String.format(msg, params) : msg); + } + + protected void error(String msg, Throwable err, Object ... params) { + log(LogService.LOG_ERROR, params.length > 0 ? String.format(msg, params) : msg, err); + } + + protected void error(Throwable err) { + log(LogService.LOG_ERROR, "error", err); + } +}