...
Include Page | |||
---|---|---|---|
|
|
...
Wiki Markup |
---|
{html}
<div class="content">
{html} |
...
The
...
Maven-junit4OSGi-plugin
...
junit4OSGi
...
tests
...
can
...
also
...
be
...
executed
...
automatically
...
during
...
the
...
integration-test
...
phase
...
of
...
a
...
maven
...
build
...
process.
...
This
...
page
...
describes
...
the
...
maven-junit4osgi-plugin
...
allowing
...
a
...
seamless
...
maven
...
integration.
Wiki Markup |
---|
_ {div:class=toc} {toc:maxLevel=4|minLevel=2} {div} h2. |
What
...
does
...
the
...
maven-junit4osgi-plugin
...
provide?
...
- Allows testing OSGi applications
- Integrated in a Maven-based
...
- build
...
- process
- Provides the same output as Surefire
- Supports Maven site generation
Using the plug-in
Download and building the plug-in
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:svn co http://svn.apache.org/repos/asf/felix/trunk/ipojo/
...
To
...
compile
...
it,
...
run
...
the
...
following
...
commands:
Code Block | ||||
---|---|---|---|---|
| ||||
{code:xml} cd ipojo mvn clean install -Pexamples {code} h2. Simple configuration |
Simple configuration
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:
Code Block | ||||
---|---|---|---|---|
| ||||
{code:xml} <plugin> <groupid>org.apache.felix</groupid> <artifactid>maven-junit4osgi-plugin</artifactid> <executions> <execution> <goals> <goal>test</goal> </goals> <configuration> <deployprojectartifact>true</deployprojectartifact> </configuration> </execution> </executions> </plugin> {code} h2. Plugin parameter The |
Plugin parameter
The plug-in
...
has
...
only
...
one
...
parameter.
...
The
...
deployProjectArtifact
...
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).
...
Configuring
...
the
...
set
...
of
...
bundles
...
to
...
deploy
...
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:
Code Block | ||||
---|---|---|---|---|
| ||||
{code:xml} <dependency> <artifactid>tests.manipulation.metadata</artifactid> <groupid>ipojo.tests</groupid> <version>1.1.0-SNAPSHOT</version> </dependency> {code} |
If
...
your
...
bundle
...
is
...
not
...
a
...
maven
...
artifact,
...
you
...
can
...
configure
...
the
...
plugin
...
with
...
the
...
bundle
...
URL
...
(from
...
where
...
the
...
bundle
...
will
...
be
...
deployed)
Code Block | ||||
---|---|---|---|---|
| ||||
{code:xml} <configuration> <deployprojectartifact>true</deployprojectartifact> <bundles> <param>file:/Users/clement/bundles/test-metadata.jar</param> </bundles> </configuration> {code} |
Set
...
bundles
...
are
...
installed
...
and
...
started.
...
You
...
can
...
depend
...
on
...
bundle
...
that
...
does
...
not
...
contain
...
test
...
as
...
well
...
as
...
bundle
...
containing
...
tests.
...
Configuring
...
Felix
...
It
...
is
...
also
...
possible
...
to
...
set
...
Felix
...
properties
...
in
...
the
...
configuration:
Code Block | ||||
---|---|---|---|---|
| ||||
{code:xml} <configuration> <configuration> <org.osgi.http.port>8083</org.osgi.http.port> </configuration> </configuration> {code} h3. |
Showing/hiding
...
test
...
trace
...
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
...
hideOutputs
...
parameter.
Code Block | ||||
---|---|---|---|---|
| ||||
{code:xml} <configuration> <hideOutputs>true</hideOutputs> </configuration> {code} h3. |
Disabling/Enabling
...
the
...
Log
...
Service
...
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
...
logService
...
property
...
set
...
to false
Code Block | ||||
---|---|---|---|---|
| ||||
{{false}} {code:xml} mvn clean integration-test -DlogService=false {code} h3. Skipping |
Skipping integration-test
...
Sometimes
...
you
...
want
...
to
...
skip
...
tests
...
.
...
The
...
plugin
...
uses
...
the
...
maven.test.skip
...
property to
...
skip
...
tests
...
such
...
as
Code Block | ||||
---|---|---|---|---|
| ||||
{code:xml} mvn clean install -Dmaven.test.skip=true {code} h3. Ignoring failures 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 |
Ignoring failures
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.
Code Block | ||||
---|---|---|---|---|
| ||||
during test generation. {code:xml} mvn clean install -Dmaven.test.failure.ignore=true {code} h2. Executing the |
Executing the plug-in
...
To
...
execute
...
test,
...
just
...
launch
...
the
...
mvn
...
clean
...
integration-test
...
command.
Code Block | ||||
---|---|---|---|---|
| ||||
{code:xml} [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Building iPOJO Primitive Manipulation Test Suite [INFO] task-segment: [integration-test] [INFO] ------------------------------------------------------------------------ [INFO] [resources:resources] [INFO] Using default encoding to copy filtered resources. [INFO] [compiler:compile] [INFO] Nothing to compile - all classes are up to date [INFO] [resources:testResources] [INFO] Using default encoding to copy filtered resources. [INFO] [compiler:testCompile] [INFO] No sources to compile [INFO] [surefire:test] [INFO] No tests to run. [INFO] [bundle:bundle] [INFO] [ipojo:ipojo-bundle {execution: default}] [INFO] Start bundle manipulation [INFO] Metadata file : /Users/clement/Documents/workspaces/felix-trunk/ipojo/tests/manipulator/primitives/target/classes/metadata.xml [INFO] Input Bundle File : /Users/clement/Documents/workspaces/felix-trunk/ipojo/tests/manipulator/primitives/target/tests.manipulation.primitives-1.1.0-SNAPSHOT.jar [INFO] Bundle manipulation - SUCCESS [INFO] [junit4osgi:test {execution: default}] Analyzing org.apache.felix.ipojo - compile Analyzing org.apache.felix.ipojo.metadata - compile Analyzing org.osgi.core - compile Analyzing junit - compile Analyzing org.apache.felix.ipojo.junit4osgi - compile Analyzing tests.manipulation.metadata - test ------------------------------------------------------- T E S T S ------------------------------------------------------- Deploy : /Users/clement/Documents/workspaces/felix-trunk/ipojo/tests/manipulator/primitives/target/tests.manipulation.primitives-1.1.0-SNAPSHOT.jar Loading org.apache.felix.ipojo.test.scenarios.manipulation.ManipulationTestSuite Loading org.apache.felix.ipojo.test.scenarios.manipulation.ManipulationTestSuite Junit Extender starting ... Running Manipulation Metadata Test Suite Tests run: 16, Failures: 0, Errors: 0, Time elapsed: 0 sec Running Primitive Manipulation Test Suite Tests run: 17, Failures: 0, Errors: 0, Time elapsed: 0 sec Results : Tests run: 33, Failures: 0, Errors:0 Unload test suites [class org.apache.felix.ipojo.test.scenarios.manipulation.ManipulationTestSuite] Unload test suites [class org.apache.felix.ipojo.test.scenarios.manipulation.ManipulationTestSuite] Cleaning test suites ... [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: 6 seconds [INFO] Finished at: Mon Nov 10 21:30:21 CET 2008 [INFO] Final Memory: 9M/18M [INFO] ------------------------------------------------------------------------ {code} |
Failures
...
and
...
errors
...
are
...
reported
...
in
...
the
...
plugin
...
output.
...
Generating
...
the
...
report
...
web
...
page
...
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:
Code Block | ||||
---|---|---|---|---|
| ||||
{code:xml} <reporting> <plugins> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-surefire-report-plugin</artifactid> <version>2.4.3</version> <configuration> <showsuccess>true</showsuccess> </configuration> </plugin> </plugins> </reporting> {code} |
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 Block | ||||
---|---|---|---|---|
| ||||
{code:none} mvn org.apache.maven.plugins:maven-surefire-report-plugin:2.4.3:report {code} |
This
...
command
...
generates
...
the
...
web
...
page
...
with
...
test
...
results
...
in
...
'target/site'.
...
This
...
page
...
shows
...
an
...
example
...
of
...
page
...
generated
...
with
...
this
...
command.
...
Plug-in
...
design
...
The
...
plug-in
...
is
...
quiet
...
simple,
...
it
...
just
...
starts
...
an
...
embedded
...
Felix
...
with
...
a
...
special
...
activator
...
installing
...
and
...
starting
...
the
...
junit4osgi
...
framework
...
and
...
specified
...
bundles.
...
Then,
...
before
...
executing
...
test,
...
the
...
plug-in
...
waits
...
for
...
"stability".
...
Indeed,
...
as
...
bundle
...
activation
...
can
...
be
...
asynchronous,
...
the
...
plug-in
...
need
...
to
...
wait
...
that
...
the
...
configuration
...
is
...
stable.
...
Stability
...
is
...
obtained
...
when
...
all
...
bundles
...
are
...
activated,
...
and
...
no
...
new
...
services
...
appear
...
or
...
disappear
...
on
...
a
...
500
...
ms
...
period.
...
If
...
after
...
several
...
second
...
the
...
stability
...
cannot
...
be
...
reached,
...
the
...
plug-in
...
stops.
...
Once
...
the
...
stability
...
is
...
reached,
...
the
...
junit4ogsi
...
runner
...
service
...
is
...
used
...
to
...
execute
...
tests.
...
Then
...
results
...
are
...
collected
...
and
...
reports
...
are
...
generated.
...
Conclusion
This page has presented a front-end
...
automating
...
the
...
execution
...
of
...
junit4osgi
...
tests.
...
Now
...
it
...
is
...
possible
...
to
...
integrate
...
OSGi
...
application
...
tests
...
in
...
a
...
build
...
process.
...
The
...
presented
...
maven
...
plugin
...
provides
...
following
...
features:
...
- An easy integration in a Maven-based
...
- build
...
- process
- A good flexibility allowing reproducing production execution environments to test the application
- Test result output is the same as surefire
- Is able to generate Surefire-like reports
Include Page apache-felix-ipojo-footer apache-felix-ipojo-footer
...