blob: bdb8409f5c3cca34b4560562241fe49601482fff [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!--
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.
-->
<head>
<title>Apache Felix - apache-felix-ipojo-junit4osgi-maven</title>
<link rel="icon" href="/res/favicon.ico">
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="The most powerful component model for OSGi">
<link href="/ipojo/web/bootstrap/css/bootstrap-cerulean.css" rel="stylesheet">
<link href="/ipojo/web/bootstrap/css/bootstrap-responsive.css" rel="stylesheet">
<link href="/ipojo/web/bootstrap/css/font-awesome.min.css" rel="stylesheet">
<link href="/ipojo/web/style.css" rel="stylesheet">
<!-- Overide alert's colors -->
<link href="/ipojo/web/bootstrap/css/alert.css" rel="stylesheet">
<link rel="stylesheet" href="/ipojo/web/github.css" type="text/css" media="all">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script src="/ipojo/web/bootstrap/js/bootstrap.min.js"></script>
</head>
<body data-spy="scroll" data-target=".subnav">
<div class="navbar navbar-fixed-top navbar-inverse">
<div class="navbar-inner">
<div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<a class="brand" href="/documentation/subprojects/apache-felix-ipojo.html">Apache Felix iPOJO</a>
<div class="nav-collapse" id="main-menu">
<ul class="nav" id="main-menu-left">
<li><a href="/documentation/subprojects/apache-felix-ipojo/ipojo-news.html">News</a></li>
<li><a href="http://felix.apache.org/downloads.cgi">Downloads</a></li>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Tutorials <b class="caret"></b></a>
<ul class="dropdown-menu" id="tutorials-menu">
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-why-choose-ipojo.html">Why choose iPOJO</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-successstories.html">Success stories</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-feature-overview.html">Features</a></li>
<li class="divider"></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/ipojo-in-10-minutes.html">iPOJO in 10 minutes</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/how-to-use-ipojo-annotations.html">Using Annotations</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/ipojo-hello-word-maven-based-tutorial.html">Maven tutorial</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/ipojo-advanced-tutorial.html">Advanced tutorial</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/apache-felix-ipojo-dosgi.html">Using Distributed OSGi</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/ipojo-composition-tutorial.html">Application Composition</a></li>
</ul>
</li>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Documentation <b class="caret"></b></a>
<ul class="dropdown-menu" id="user-guide-menu">
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/service-requirement-handler.html">Requiring a service</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/providing-osgi-services.html">Providing a service</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/lifecycle-callback-handler.html">Lifecycle management</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/configuration-handler.html">Configuration</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/architecture-handler.html">Introspection</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/controller-lifecycle-handler.html">Impacting the lifecycle</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/injecting-bundle-context.html">Accessing the Bundle Context</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/apache-felix-ipojo-instances.html">Creating instances</a></li>
<li class="divider"></li>
<li class="dropdown-submenu">
<a tabindex="-1" href="#">External <em>handlers</em></a>
<ul class="dropdown-menu">
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/event-admin-handlers.html">Asynchronous communication</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/ipojo-jmx-handler.html">JMX management</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/extender-pattern-handler.html">Extender pattern</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/white-board-pattern-handler.html">Whiteboard pattern</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/temporal-service-dependency.html">Temporal dependencies</a></li>
</ul>
</li>
<li class="dropdown-submenu">
<a tabindex="-1" href="#">Configuration Admin &amp; Factories</a>
<ul class="dropdown-menu">
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/combining-ipojo-and-configuration-admin.html">iPOJO and config admin</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/ipojo-factory-service.html">Using the iPOJO Factory service</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/how-to-use-ipojo-factories.html">Factories and Instances</a></li>
</ul>
</li>
<li class="divider"></li>
<li class="dropdown-submenu">
<a tabindex="-1" href="#">Advanced topics</a>
<ul class="dropdown-menu">
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/instance-vs-service-controller.html">Instance vs. Service Controllers</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/service-binding-interceptors.html">Service Binding Interceptors</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/using-xml-schemas.html">XML Schemas</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/apache-felix-ipojo-api.html">Using the iPOJO API</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/constructing-pojo-objects-with-factory-methods.html">Constructing service objects with factory methods</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/using-ipojo-introspection-api.html">Using the introspection API</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-testing-components.html">Testing components</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/using-stereotypes.html">Using @Stereotypes</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-eclipse-integration.html">Eclipse Integration</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/ipojo-extender-configuration.html">Configuring iPOJO's Extender</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-faq.html">FAQ</a></li>
<li class="divider"></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-devguide/how-to-write-your-own-handler.html">Handler development</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-devguide/how-to-use-ipojo-manipulation-metadata.html">Manipulation Metadata </a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-devguide/dive-into-the-ipojo-manipulation-depths.html">Dive into the iPOJO Manipulation depths</a></li>
<li><a href="http://felix.apache.org/ipojo/api/1.12.1">Javadoc</a></li>
</ul>
</li>
</ul>
</li>
<li class="dropdown" id="tools-menu">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Tools <b class="caret"></b></a>
<ul class="dropdown-menu" id="swatch-menu">
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-tools/ipojo-ant-task.html">Ant Task</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-tools/ipojo-maven-plug-in.html">Maven Plugin</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-tools/ipojo-arch-command.html">Architecture commands</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-tools/apache-felix-ipojo-online-manipulator.html">Online Manipulator</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-tools/ipojo-webconsole-plugin.html">Webconsole plugin</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-tools/ipojo-karaf-feature.html">Apache Karaf Features</a></li>
</ul>
</li>
<li class="dropdown" id="community-menu">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Community <b class="caret"></b></a>
<ul class="dropdown-menu" id="swatch-menu">
<li><a href="/documentation/subprojects/apache-felix-ipojo/ipojo-support.html">Support</a></li>
<li><a href="http://www.apache.org/">ASF</a></li>
<li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
<li><a href="http://www.apache.org/foundation/thanks.html">Sponsors</a></li>
</ul>
</li>
<li class="dropdown" id="misc-menu">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Misc <b class="caret"></b></a>
<ul class="dropdown-menu" id="swatch-menu">
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-supportedvms.html">Supported JVMs</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-supportedosgi.html">Supported OSGi Implementations</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/articles-and-presentations.html">Article & Presentations</a></li>
<li><a href="/documentation/subprojects/apache-felix-ipojo/developing-camel-mediators-with-ipojo.html">Developping Camel mediators with iPOJO</a></li>
</ul>
</li>
</ul>
<ul class="nav pull-right" id="main-menu-right">
<li><a rel="tooltip" target="_blank" href="http://felix.apache.org">Apache Felix <i class="icon-share-alt"></i></a></li>
</ul>
</div>
</div>
</div>
</div>
<div class="container">
<div class="content">
<style type="text/css">
/* The following code is added by mdx_elementid.py
It was originally lifted from http://subversion.apache.org/style/site.css */
/*
* Hide class="elementid-permalink", except when an enclosing heading
* has the :hover property.
*/
.headerlink, .elementid-permalink {
visibility: hidden;
}
h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style>
<h1 id="the-maven-junit4osgi-plugin">The Maven-junit4OSGi-plugin<a class="headerlink" href="#the-maven-junit4osgi-plugin" title="Permanent link">&para;</a></h1>
<p><em>junit4OSGi tests can also be executed automatically during the <code>integration-test</code> phase of a maven build process. This page describes the maven-junit4osgi-plugin allowing a seamless maven integration.</em> </p>
<p div="div">{div:class=toc}
[TOC]</p>
<h2 id="what-does-the-maven-junit4osgi-plugin-provide">What does the maven-junit4osgi-plugin provide?<a class="headerlink" href="#what-does-the-maven-junit4osgi-plugin-provide" title="Permanent link">&para;</a></h2>
<div class="codehilite"><pre><span class="o">*</span> <span class="n">Allows</span> <span class="n">testing</span> <span class="n">OSGi</span> <span class="n">applications</span>
<span class="o">*</span> <span class="n">Integrated</span> <span class="n">in</span> <span class="n">a</span> <span class="n">Maven</span><span class="o">-</span><span class="n">based</span> <span class="n">build</span> <span class="n">process</span>
<span class="o">*</span> <span class="n">Provides</span> <span class="n">the</span> <span class="n">same</span> <span class="n">output</span> <span class="n">as</span> <span class="n">Surefire</span>
<span class="o">*</span> <span class="n">Supports</span> <span class="n">Maven</span> <span class="n">site</span> <span class="n">generation</span>
</pre></div>
<h2 id="using-the-plug-in">Using the plug-in<a class="headerlink" href="#using-the-plug-in" title="Permanent link">&para;</a></h2>
<h3 id="download-and-building-the-plug-in">Download and building the plug-in<a class="headerlink" href="#download-and-building-the-plug-in" title="Permanent link">&para;</a></h3>
<p>The plug-in sources are available in the iPOJO trunk.
However the junit4osgi and iPOJO runtime are also required. So, download the source of iPOJO:
<code>svn co http://svn.apache.org/repos/asf/felix/trunk/ipojo/</code>
To compile it, run the following commands:</p>
<div class="codehilite"><pre><span class="n">cd</span> <span class="n">ipojo</span>
<span class="n">mvn</span> <span class="n">clean</span> <span class="n">install</span> <span class="o">-</span><span class="n">Pexamples</span>
</pre></div>
<h2 id="simple-configuration">Simple configuration<a class="headerlink" href="#simple-configuration" title="Permanent link">&para;</a></h2>
<p>So, first the project using the plug-in is not the project under test. It's another project containing either only integration-test packaged in a bundle, or is empty (and so depends on other bundles containing integration tests).
Tests contained in the project are developed with junit4osgi, and are packaged in a bundle with the maven-bundle-plugin.
In the pom file, add the following plugin configuration to use the maven-junit4osgi-plugin:</p>
<div class="codehilite"><pre><span class="nt">&lt;plugin&gt;</span>
<span class="nt">&lt;groupid&gt;</span>org.apache.felix<span class="nt">&lt;/groupid&gt;</span>
<span class="nt">&lt;artifactid&gt;</span>maven-junit4osgi-plugin<span class="nt">&lt;/artifactid&gt;</span>
<span class="nt">&lt;executions&gt;</span>
<span class="nt">&lt;execution&gt;</span>
<span class="nt">&lt;goals&gt;</span>
<span class="nt">&lt;goal&gt;</span>test<span class="nt">&lt;/goal&gt;</span>
<span class="nt">&lt;/goals&gt;</span>
<span class="nt">&lt;configuration&gt;</span>
<span class="nt">&lt;deployprojectartifact&gt;</span>true<span class="nt">&lt;/deployprojectartifact&gt;</span>
<span class="nt">&lt;/configuration&gt;</span>
<span class="nt">&lt;/execution&gt;</span>
<span class="nt">&lt;/executions&gt;</span>
<span class="nt">&lt;/plugin&gt;</span>
</pre></div>
<h2 id="plugin-parameter">Plugin parameter<a class="headerlink" href="#plugin-parameter" title="Permanent link">&para;</a></h2>
<p>The plug-in has only one parameter. The <code>deployProjectArtifact</code> parameter enables or disables the current artifact deployment. If the current project contains tests, the plug-in can deploy the built artifact (as illustrated in this pom). Otherwise, the current project artifact is not deployed. This can be useful if the project just depends on other test bundles and sets the test configuration (as this pom).</p>
<h3 id="configuring-the-set-of-bundles-to-deploy">Configuring the set of bundles to deploy<a class="headerlink" href="#configuring-the-set-of-bundles-to-deploy" title="Permanent link">&para;</a></h3>
<p>There is two different ways to configure the plug-in to deploy other bundles. If the bundle to deploy is a maven artifact, just add this artifact as a maven project dependency. Here is an example:</p>
<div class="codehilite"><pre><span class="nt">&lt;dependency&gt;</span>
<span class="nt">&lt;artifactid&gt;</span>tests.manipulation.metadata<span class="nt">&lt;/artifactid&gt;</span>
<span class="nt">&lt;groupid&gt;</span>ipojo.tests<span class="nt">&lt;/groupid&gt;</span>
<span class="nt">&lt;version&gt;</span>1.1.0-SNAPSHOT<span class="nt">&lt;/version&gt;</span>
<span class="nt">&lt;/dependency&gt;</span>
</pre></div>
<p>If your bundle is not a maven artifact, you can configure the plugin with the bundle URL (from where the bundle will be deployed)</p>
<div class="codehilite"><pre><span class="nt">&lt;configuration&gt;</span>
<span class="nt">&lt;deployprojectartifact&gt;</span>true<span class="nt">&lt;/deployprojectartifact&gt;</span>
<span class="nt">&lt;bundles&gt;</span>
<span class="nt">&lt;param&gt;</span>file:/Users/clement/bundles/test-metadata.jar<span class="nt">&lt;/param&gt;</span>
<span class="nt">&lt;/bundles&gt;</span>
<span class="nt">&lt;/configuration&gt;</span>
</pre></div>
<p>Set bundles are installed and started. You can depend on bundle that does not contain test as well as bundle containing tests.</p>
<h3 id="configuring-felix">Configuring Felix<a class="headerlink" href="#configuring-felix" title="Permanent link">&para;</a></h3>
<p>It is also possible to set Felix properties in the configuration:</p>
<div class="codehilite"><pre><span class="nt">&lt;configuration&gt;</span>
<span class="nt">&lt;configuration&gt;</span>
<span class="nt">&lt;org.osgi.http.port&gt;</span>8083<span class="nt">&lt;/org.osgi.http.port&gt;</span>
<span class="nt">&lt;/configuration&gt;</span>
<span class="nt">&lt;/configuration&gt;</span>
</pre></div>
<h3 id="showinghiding-test-trace">Showing/hiding test trace<a class="headerlink" href="#showinghiding-test-trace" title="Permanent link">&para;</a></h3>
<p>The plugin collects System.out, System.err and logged messages to write them in the test report. Moreover, the plugin allows hiding traces when tests are executed. To achieve this just add the <code>hideOutputs</code> parameter.</p>
<div class="codehilite"><pre><span class="nt">&lt;configuration&gt;</span>
<span class="nt">&lt;hideOutputs&gt;</span>true<span class="nt">&lt;/hideOutputs&gt;</span>
<span class="nt">&lt;/configuration&gt;</span>
</pre></div>
<h3 id="disablingenabling-the-log-service">Disabling/Enabling the Log Service<a class="headerlink" href="#disablingenabling-the-log-service" title="Permanent link">&para;</a></h3>
<p>The plugin exposed a LogService in the OSGi framework to collects logged messaged. This service enabled by default. You can diable it by launching the plugin with the <code>logService</code> property set to <code>false</code></p>
<div class="codehilite"><pre><span class="n">mvn</span> <span class="n">clean</span> <span class="n">integration</span><span class="o">-</span><span class="n">test</span> <span class="o">-</span><span class="n">DlogService</span><span class="p">=</span><span class="n">false</span>
</pre></div>
<h3 id="skipping-integration-test">Skipping integration-test<a class="headerlink" href="#skipping-integration-test" title="Permanent link">&para;</a></h3>
<p>Sometimes you want to skip tests :-(. The plugin uses the <code>maven.test.skip</code> property to skip tests such as </p>
<div class="codehilite"><pre><span class="n">mvn</span> <span class="n">clean</span> <span class="n">install</span> <span class="o">-</span><span class="n">Dmaven</span><span class="p">.</span><span class="n">test</span><span class="p">.</span><span class="n">skip</span><span class="p">=</span><span class="n">true</span>
</pre></div>
<h3 id="ignoring-failures">Ignoring failures<a class="headerlink" href="#ignoring-failures" title="Permanent link">&para;</a></h3>
<p>If tests throws errors or have failures, the plugin breaks the Maven build. You can by-pass this behavior by ignoring errors and failures. This is useful during test generation. </p>
<div class="codehilite"><pre><span class="n">mvn</span> <span class="n">clean</span> <span class="n">install</span> <span class="o">-</span><span class="n">Dmaven</span><span class="p">.</span><span class="n">test</span><span class="p">.</span><span class="n">failure</span><span class="p">.</span><span class="n">ignore</span><span class="p">=</span><span class="n">true</span>
</pre></div>
<h2 id="executing-the-plug-in">Executing the plug-in<a class="headerlink" href="#executing-the-plug-in" title="Permanent link">&para;</a></h2>
<p>To execute test, just launch the <code>mvn clean integration-test</code> command.</p>
<div class="codehilite"><pre><span class="p">[</span><span class="n">INFO</span><span class="p">]</span> <span class="n">Scanning</span> <span class="k">for</span> <span class="n">projects</span><span class="p">...</span>
<span class="p">[</span><span class="n">INFO</span><span class="p">]</span> <span class="o">------------------------------------------------------------------------</span>
<span class="p">[</span><span class="n">INFO</span><span class="p">]</span> <span class="n">Building</span> <span class="n">iPOJO</span> <span class="n">Primitive</span> <span class="n">Manipulation</span> <span class="n">Test</span> <span class="n">Suite</span>
<span class="p">[</span><span class="n">INFO</span><span class="p">]</span> <span class="n">task</span><span class="o">-</span><span class="n">segment</span><span class="p">:</span> <span class="p">[</span><span class="n">integration</span><span class="o">-</span><span class="n">test</span><span class="p">]</span>
<span class="p">[</span><span class="n">INFO</span><span class="p">]</span> <span class="o">------------------------------------------------------------------------</span>
<span class="p">[</span><span class="n">INFO</span><span class="p">]</span> <span class="p">[</span><span class="n">resources</span><span class="p">:</span><span class="n">resources</span><span class="p">]</span>
<span class="p">[</span><span class="n">INFO</span><span class="p">]</span> <span class="n">Using</span> <span class="n">default</span> <span class="n">encoding</span> <span class="n">to</span> <span class="n">copy</span> <span class="n">filtered</span> <span class="n">resources</span><span class="p">.</span>
<span class="p">[</span><span class="n">INFO</span><span class="p">]</span> <span class="p">[</span><span class="n">compiler</span><span class="p">:</span><span class="n">compile</span><span class="p">]</span>
<span class="p">[</span><span class="n">INFO</span><span class="p">]</span> <span class="n">Nothing</span> <span class="n">to</span> <span class="n">compile</span> <span class="o">-</span> <span class="n">all</span> <span class="n">classes</span> <span class="n">are</span> <span class="n">up</span> <span class="n">to</span> <span class="n">date</span>
<span class="p">[</span><span class="n">INFO</span><span class="p">]</span> <span class="p">[</span><span class="n">resources</span><span class="p">:</span><span class="n">testResources</span><span class="p">]</span>
<span class="p">[</span><span class="n">INFO</span><span class="p">]</span> <span class="n">Using</span> <span class="n">default</span> <span class="n">encoding</span> <span class="n">to</span> <span class="n">copy</span> <span class="n">filtered</span> <span class="n">resources</span><span class="p">.</span>
<span class="p">[</span><span class="n">INFO</span><span class="p">]</span> <span class="p">[</span><span class="n">compiler</span><span class="p">:</span><span class="n">testCompile</span><span class="p">]</span>
<span class="p">[</span><span class="n">INFO</span><span class="p">]</span> <span class="n">No</span> <span class="n">sources</span> <span class="n">to</span> <span class="n">compile</span>
<span class="p">[</span><span class="n">INFO</span><span class="p">]</span> <span class="p">[</span><span class="n">surefire</span><span class="p">:</span><span class="n">test</span><span class="p">]</span>
<span class="p">[</span><span class="n">INFO</span><span class="p">]</span> <span class="n">No</span> <span class="n">tests</span> <span class="n">to</span> <span class="n">run</span><span class="p">.</span>
<span class="p">[</span><span class="n">INFO</span><span class="p">]</span> <span class="p">[</span><span class="n">bundle</span><span class="p">:</span><span class="n">bundle</span><span class="p">]</span>
<span class="p">[</span><span class="n">INFO</span><span class="p">]</span> <span class="p">[</span><span class="n">ipojo</span><span class="p">:</span><span class="n">ipojo</span><span class="o">-</span><span class="n">bundle</span> <span class="p">{</span><span class="n">execution</span><span class="p">:</span> <span class="n">default</span><span class="p">}]</span>
<span class="p">[</span><span class="n">INFO</span><span class="p">]</span> <span class="n">Start</span> <span class="n">bundle</span> <span class="n">manipulation</span>
<span class="p">[</span><span class="n">INFO</span><span class="p">]</span> <span class="n">Metadata</span> <span class="n">file</span> <span class="p">:</span> <span class="o">/</span><span class="n">Users</span><span class="o">/</span><span class="n">clement</span><span class="o">/</span><span class="n">Documents</span><span class="o">/</span><span class="n">workspaces</span><span class="o">/</span><span class="n">felix</span><span class="o">-</span><span class="n">trunk</span><span class="o">/</span><span class="n">ipojo</span><span class="o">/</span><span class="n">tests</span><span class="o">/</span><span class="n">manipulator</span><span class="o">/</span><span class="n">primitives</span><span class="o">/</span><span class="n">target</span><span class="o">/</span><span class="n">classes</span><span class="o">/</span><span class="n">metadata</span><span class="p">.</span><span class="n">xml</span>
<span class="p">[</span><span class="n">INFO</span><span class="p">]</span> <span class="n">Input</span> <span class="n">Bundle</span> <span class="n">File</span> <span class="p">:</span> <span class="o">/</span><span class="n">Users</span><span class="o">/</span><span class="n">clement</span><span class="o">/</span><span class="n">Documents</span><span class="o">/</span><span class="n">workspaces</span><span class="o">/</span><span class="n">felix</span><span class="o">-</span><span class="n">trunk</span><span class="o">/</span><span class="n">ipojo</span><span class="o">/</span><span class="n">tests</span><span class="o">/</span><span class="n">manipulator</span><span class="o">/</span><span class="n">primitives</span><span class="o">/</span><span class="n">target</span><span class="o">/</span><span class="n">tests</span><span class="p">.</span><span class="n">manipulation</span><span class="p">.</span><span class="n">primitives</span><span class="o">-</span>1<span class="p">.</span>1<span class="p">.</span>0<span class="o">-</span><span class="n">SNAPSHOT</span><span class="p">.</span><span class="n">jar</span>
<span class="p">[</span><span class="n">INFO</span><span class="p">]</span> <span class="n">Bundle</span> <span class="n">manipulation</span> <span class="o">-</span> <span class="n">SUCCESS</span>
<span class="p">[</span><span class="n">INFO</span><span class="p">]</span> <span class="p">[</span><span class="n">junit4osgi</span><span class="p">:</span><span class="n">test</span> <span class="p">{</span><span class="n">execution</span><span class="p">:</span> <span class="n">default</span><span class="p">}]</span>
<span class="n">Analyzing</span> <span class="n">org</span><span class="p">.</span><span class="n">apache</span><span class="p">.</span><span class="n">felix</span><span class="p">.</span><span class="n">ipojo</span> <span class="o">-</span> <span class="n">compile</span>
<span class="n">Analyzing</span> <span class="n">org</span><span class="p">.</span><span class="n">apache</span><span class="p">.</span><span class="n">felix</span><span class="p">.</span><span class="n">ipojo</span><span class="p">.</span><span class="n">metadata</span> <span class="o">-</span> <span class="n">compile</span>
<span class="n">Analyzing</span> <span class="n">org</span><span class="p">.</span><span class="n">osgi</span><span class="p">.</span><span class="n">core</span> <span class="o">-</span> <span class="n">compile</span>
<span class="n">Analyzing</span> <span class="n">junit</span> <span class="o">-</span> <span class="n">compile</span>
<span class="n">Analyzing</span> <span class="n">org</span><span class="p">.</span><span class="n">apache</span><span class="p">.</span><span class="n">felix</span><span class="p">.</span><span class="n">ipojo</span><span class="p">.</span><span class="n">junit4osgi</span> <span class="o">-</span> <span class="n">compile</span>
<span class="n">Analyzing</span> <span class="n">tests</span><span class="p">.</span><span class="n">manipulation</span><span class="p">.</span><span class="n">metadata</span> <span class="o">-</span> <span class="n">test</span>
<span class="o">-------------------------------------------------------</span>
<span class="n">T</span> <span class="n">E</span> <span class="n">S</span> <span class="n">T</span> <span class="n">S</span>
<span class="o">-------------------------------------------------------</span>
<span class="n">Deploy</span> <span class="p">:</span> <span class="o">/</span><span class="n">Users</span><span class="o">/</span><span class="n">clement</span><span class="o">/</span><span class="n">Documents</span><span class="o">/</span><span class="n">workspaces</span><span class="o">/</span><span class="n">felix</span><span class="o">-</span><span class="n">trunk</span><span class="o">/</span><span class="n">ipojo</span><span class="o">/</span><span class="n">tests</span><span class="o">/</span><span class="n">manipulator</span><span class="o">/</span><span class="n">primitives</span><span class="o">/</span><span class="n">target</span><span class="o">/</span><span class="n">tests</span><span class="p">.</span><span class="n">manipulation</span><span class="p">.</span><span class="n">primitives</span><span class="o">-</span>1<span class="p">.</span>1<span class="p">.</span>0<span class="o">-</span><span class="n">SNAPSHOT</span><span class="p">.</span><span class="n">jar</span>
<span class="n">Loading</span> <span class="n">org</span><span class="p">.</span><span class="n">apache</span><span class="p">.</span><span class="n">felix</span><span class="p">.</span><span class="n">ipojo</span><span class="p">.</span><span class="n">test</span><span class="p">.</span><span class="n">scenarios</span><span class="p">.</span><span class="n">manipulation</span><span class="p">.</span><span class="n">ManipulationTestSuite</span>
<span class="n">Loading</span> <span class="n">org</span><span class="p">.</span><span class="n">apache</span><span class="p">.</span><span class="n">felix</span><span class="p">.</span><span class="n">ipojo</span><span class="p">.</span><span class="n">test</span><span class="p">.</span><span class="n">scenarios</span><span class="p">.</span><span class="n">manipulation</span><span class="p">.</span><span class="n">ManipulationTestSuite</span>
<span class="n">Junit</span> <span class="n">Extender</span> <span class="n">starting</span> <span class="p">...</span>
<span class="n">Running</span> <span class="n">Manipulation</span> <span class="n">Metadata</span> <span class="n">Test</span> <span class="n">Suite</span>
<span class="n">Tests</span> <span class="n">run</span><span class="p">:</span> 16<span class="p">,</span> <span class="n">Failures</span><span class="p">:</span> 0<span class="p">,</span> <span class="n">Errors</span><span class="p">:</span> 0<span class="p">,</span> <span class="n">Time</span> <span class="n">elapsed</span><span class="p">:</span> 0 <span class="nb">sec</span>
<span class="n">Running</span> <span class="n">Primitive</span> <span class="n">Manipulation</span> <span class="n">Test</span> <span class="n">Suite</span>
<span class="n">Tests</span> <span class="n">run</span><span class="p">:</span> 17<span class="p">,</span> <span class="n">Failures</span><span class="p">:</span> 0<span class="p">,</span> <span class="n">Errors</span><span class="p">:</span> 0<span class="p">,</span> <span class="n">Time</span> <span class="n">elapsed</span><span class="p">:</span> 0 <span class="nb">sec</span>
<span class="n">Results</span> <span class="p">:</span>
<span class="n">Tests</span> <span class="n">run</span><span class="p">:</span> 33<span class="p">,</span> <span class="n">Failures</span><span class="p">:</span> 0<span class="p">,</span> <span class="n">Errors</span><span class="p">:</span>0
<span class="n">Unload</span> <span class="n">test</span> <span class="n">suites</span> <span class="p">[</span><span class="n">class</span> <span class="n">org</span><span class="p">.</span><span class="n">apache</span><span class="p">.</span><span class="n">felix</span><span class="p">.</span><span class="n">ipojo</span><span class="p">.</span><span class="n">test</span><span class="p">.</span><span class="n">scenarios</span><span class="p">.</span><span class="n">manipulation</span><span class="p">.</span><span class="n">ManipulationTestSuite</span><span class="p">]</span>
<span class="n">Unload</span> <span class="n">test</span> <span class="n">suites</span> <span class="p">[</span><span class="n">class</span> <span class="n">org</span><span class="p">.</span><span class="n">apache</span><span class="p">.</span><span class="n">felix</span><span class="p">.</span><span class="n">ipojo</span><span class="p">.</span><span class="n">test</span><span class="p">.</span><span class="n">scenarios</span><span class="p">.</span><span class="n">manipulation</span><span class="p">.</span><span class="n">ManipulationTestSuite</span><span class="p">]</span>
<span class="n">Cleaning</span> <span class="n">test</span> <span class="n">suites</span> <span class="p">...</span>
<span class="p">[</span><span class="n">INFO</span><span class="p">]</span> <span class="o">------------------------------------------------------------------------</span>
<span class="p">[</span><span class="n">INFO</span><span class="p">]</span> <span class="n">BUILD</span> <span class="n">SUCCESSFUL</span>
<span class="p">[</span><span class="n">INFO</span><span class="p">]</span> <span class="o">------------------------------------------------------------------------</span>
<span class="p">[</span><span class="n">INFO</span><span class="p">]</span> <span class="n">Total</span> <span class="n">time</span><span class="p">:</span> 6 <span class="n">seconds</span>
<span class="p">[</span><span class="n">INFO</span><span class="p">]</span> <span class="n">Finished</span> <span class="n">at</span><span class="p">:</span> <span class="n">Mon</span> <span class="n">Nov</span> 10 21<span class="p">:</span>30<span class="p">:</span>21 <span class="n">CET</span> 2008
<span class="p">[</span><span class="n">INFO</span><span class="p">]</span> <span class="n">Final</span> <span class="n">Memory</span><span class="p">:</span> 9<span class="n">M</span><span class="o">/</span>18<span class="n">M</span>
<span class="p">[</span><span class="n">INFO</span><span class="p">]</span> <span class="o">------------------------------------------------------------------------</span>
</pre></div>
<p>Failures and errors are reported in the plugin output.</p>
<h2 id="generating-the-report-web-page">Generating the report web page<a class="headerlink" href="#generating-the-report-web-page" title="Permanent link">&para;</a></h2>
<p>When test are executed, the plug-in generates XML reports (int the target/junit4osgi-reports directory) using the same convention as Surefire. So, it is possible to configure Surefire to generate the web page with test results.
To do this, add the following report configuration to the project executing tests:</p>
<div class="codehilite"><pre><span class="nt">&lt;reporting&gt;</span>
<span class="nt">&lt;plugins&gt;</span>
<span class="nt">&lt;plugin&gt;</span>
<span class="nt">&lt;groupid&gt;</span>org.apache.maven.plugins<span class="nt">&lt;/groupid&gt;</span>
<span class="nt">&lt;artifactid&gt;</span>maven-surefire-report-plugin<span class="nt">&lt;/artifactid&gt;</span>
<span class="nt">&lt;version&gt;</span>2.4.3<span class="nt">&lt;/version&gt;</span>
<span class="nt">&lt;configuration&gt;</span>
<span class="nt">&lt;showsuccess&gt;</span>true<span class="nt">&lt;/showsuccess&gt;</span>
<span class="nt">&lt;/configuration&gt;</span>
<span class="nt">&lt;/plugin&gt;</span>
<span class="nt">&lt;/plugins&gt;</span>
<span class="nt">&lt;/reporting&gt;</span>
</pre></div>
<p>This snippet configures the maven-surefire-report-plugin to collect results from the 'target/surefire-reports' directory.
Then execute the plugin with the following command:
{code:none}
mvn org.apache.maven.plugins:maven-surefire-report-plugin:2.4.3:report</p>
<div class="codehilite"><pre><span class="n">This</span> <span class="n">command</span> <span class="n">generates</span> <span class="n">the</span> <span class="n">web</span> <span class="n">page</span> <span class="n">with</span> <span class="n">test</span> <span class="n">results</span> <span class="n">in</span> <span class="s">&#39;target/site&#39;</span><span class="p">.</span> <span class="n">This</span> <span class="n">page</span> <span class="n">shows</span> <span class="n">an</span> <span class="n">example</span> <span class="n">of</span> <span class="n">page</span> <span class="n">generated</span> <span class="n">with</span> <span class="n">this</span> <span class="n">command</span><span class="p">.</span>
<span class="n">h2</span><span class="p">.</span> <span class="n">Plug</span><span class="o">-</span><span class="n">in</span> <span class="n">design</span>
<span class="n">The</span> <span class="n">plug</span><span class="o">-</span><span class="n">in</span> <span class="n">is</span> <span class="n">quiet</span> <span class="n">simple</span><span class="p">,</span> <span class="n">it</span> <span class="n">just</span> <span class="n">starts</span> <span class="n">an</span> <span class="n">embedded</span> <span class="n">Felix</span> <span class="n">with</span> <span class="n">a</span> <span class="n">special</span> <span class="n">activator</span> <span class="n">installing</span> <span class="n">and</span> <span class="n">starting</span> <span class="n">the</span> <span class="n">junit4osgi</span> <span class="n">framework</span> <span class="n">and</span> <span class="n">specified</span> <span class="n">bundles</span><span class="p">.</span>
<span class="n">Then</span><span class="p">,</span> <span class="n">before</span> <span class="n">executing</span> <span class="n">test</span><span class="p">,</span> <span class="n">the</span> <span class="n">plug</span><span class="o">-</span><span class="n">in</span> <span class="n">waits</span> <span class="k">for</span> &quot;<span class="n">stability</span>&quot;<span class="p">.</span> <span class="n">Indeed</span><span class="p">,</span> <span class="n">as</span> <span class="n">bundle</span> <span class="n">activation</span> <span class="n">can</span> <span class="n">be</span> <span class="n">asynchronous</span><span class="p">,</span> <span class="n">the</span> <span class="n">plug</span><span class="o">-</span><span class="n">in</span> <span class="n">need</span> <span class="n">to</span> <span class="n">wait</span> <span class="n">that</span> <span class="n">the</span> <span class="n">configuration</span> <span class="n">is</span> <span class="n">stable</span><span class="p">.</span> <span class="n">Stability</span> <span class="n">is</span> <span class="n">obtained</span> <span class="n">when</span> <span class="n">all</span> <span class="n">bundles</span> <span class="n">are</span> <span class="n">activated</span><span class="p">,</span> <span class="n">and</span> <span class="n">no</span> <span class="n">new</span> <span class="n">services</span> <span class="n">appear</span> <span class="n">or</span> <span class="n">disappear</span> <span class="n">on</span> <span class="n">a</span> 500 <span class="n">ms</span> <span class="n">period</span><span class="p">.</span> <span class="n">If</span> <span class="n">after</span> <span class="n">several</span> <span class="n">second</span> <span class="n">the</span> <span class="n">stability</span> <span class="n">cannot</span> <span class="n">be</span> <span class="n">reached</span><span class="p">,</span> <span class="n">the</span> <span class="n">plug</span><span class="o">-</span><span class="n">in</span> <span class="n">stops</span><span class="p">.</span>
<span class="n">Once</span> <span class="n">the</span> <span class="n">stability</span> <span class="n">is</span> <span class="n">reached</span><span class="p">,</span> <span class="n">the</span> <span class="n">junit4ogsi</span> <span class="n">runner</span> <span class="n">service</span> <span class="n">is</span> <span class="n">used</span> <span class="n">to</span> <span class="n">execute</span> <span class="n">tests</span><span class="p">.</span> <span class="n">Then</span> <span class="n">results</span> <span class="n">are</span> <span class="n">collected</span> <span class="n">and</span> <span class="n">reports</span> <span class="n">are</span> <span class="n">generated</span><span class="p">.</span>
<span class="n">h2</span><span class="p">.</span> <span class="n">Conclusion</span>
<span class="n">This</span> <span class="n">page</span> <span class="n">has</span> <span class="n">presented</span> <span class="n">a</span> <span class="n">front</span><span class="o">-</span><span class="k">end</span> <span class="n">automating</span> <span class="n">the</span> <span class="n">execution</span> <span class="n">of</span> <span class="n">junit4osgi</span> <span class="n">tests</span><span class="p">.</span> <span class="n">Now</span> <span class="n">it</span> <span class="n">is</span> <span class="n">possible</span> <span class="n">to</span> <span class="n">integrate</span> <span class="n">OSGi</span> <span class="n">application</span> <span class="n">tests</span> <span class="n">in</span> <span class="n">a</span> <span class="n">build</span> <span class="n">process</span><span class="p">.</span> <span class="n">The</span> <span class="n">presented</span> <span class="n">maven</span> <span class="n">plugin</span> <span class="n">provides</span> <span class="n">following</span> <span class="n">features</span><span class="p">:</span>
<span class="o">*</span> <span class="n">An</span> <span class="n">easy</span> <span class="n">integration</span> <span class="n">in</span> <span class="n">a</span> <span class="n">Maven</span><span class="o">-</span><span class="n">based</span> <span class="n">build</span> <span class="n">process</span>
<span class="o">*</span> <span class="n">A</span> <span class="n">good</span> <span class="n">flexibility</span> <span class="n">allowing</span> <span class="n">reproducing</span> <span class="n">production</span> <span class="n">execution</span> <span class="n">environments</span> <span class="n">to</span> <span class="n">test</span> <span class="n">the</span> <span class="n">application</span>
<span class="o">*</span> <span class="n">Test</span> <span class="n">result</span> <span class="n">output</span> <span class="n">is</span> <span class="n">the</span> <span class="n">same</span> <span class="n">as</span> <span class="n">surefire</span>
<span class="o">*</span> <span class="n">Is</span> <span class="n">able</span> <span class="n">to</span> <span class="n">generate</span> <span class="n">Surefire</span><span class="o">-</span><span class="n">like</span> <span class="n">reports</span>
<span class="o">\\</span>
<span class="o">\\</span>
</pre></div>
</div>
</div>
<hr/>
<div class="container">
<footer id="footer">
<div class="row">
<div class="trademarkFooter span7">
Apache Felix, Felix, Apache, the Apache feather logo, and the Apache Felix project
logo are trademarks of The Apache Software Foundation. All other marks mentioned
may be trademarks or registered trademarks of their respective owners.
</div>
<div class="timestamp span3 offset2">
Rev. 1700393 by cziegeler on Tue, 1 Sep 2015 06:04:06 +0000
</div>
</div>
</footer>
</div>
</body>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try{
var pageTracker = _gat._getTracker("UA-1518442-4");
pageTracker._trackPageview();
} catch(err) {}
</script>
</html>