Skip to content
Permalink
Browse files
enhancing KarafTest - just misses eventbus now
  • Loading branch information
rmannibucau committed Nov 2, 2018
1 parent 94e01f1 commit ac2bb1118636ccd9a203d3dfd37ef32c99fdfbd3
Showing 7 changed files with 213 additions and 21 deletions.
@@ -35,4 +35,32 @@
<properties>
<geronimo-opentracing.Automatic-Module-Name>org.apache.geronimo.opentracing.common</geronimo-opentracing.Automatic-Module-Name>
</properties>

<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<configuration>
<instructions>
<Export-Package>org.apache.geronimo.microprofile.opentracing.common.*</Export-Package>
<Import-Package>
io.opentracing,io.opentracing.propagation,
io.opentracing.tag,
javax.annotation;version="[1.0,3)",
javax.json.bind;version="[1.0,3)";resolution:=optional,
javax.servlet,
javax.servlet.http,
javax.ws.rs;version="[2,3)",
javax.ws.rs.client;version="[2,3)",
javax.ws.rs.container;version="[2,3)",
javax.ws.rs.core;version="[2,3)",
javax.ws.rs.ext;version="[2,3)",
*
</Import-Package>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
</project>
@@ -36,6 +36,8 @@

<pax.exam.version>4.12.0</pax.exam.version>
<slf4j.version>1.7.25</slf4j.version>
<karaf.version>4.2.1</karaf.version>
<johnzon.version>1.1.10</johnzon.version>
</properties>

<dependencies>
@@ -87,5 +89,107 @@
<version>${slf4j.version}</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.apache.karaf</groupId>
<artifactId>apache-karaf</artifactId>
<version>${karaf.version}</version>
<scope>test</scope>
<type>tar.gz</type>
<exclusions>
<exclusion>
<groupId>org.apache.karaf</groupId>
<artifactId>org.apache.karaf.client</artifactId>
</exclusion>
<exclusion>
<groupId>org.ops4j.pax.logging</groupId>
<artifactId>pax-logging-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.tomee</groupId>
<artifactId>ziplock</artifactId>
<version>7.1.0</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>

<build>
<testResources>
<testResource>
<directory>src/test/resources</directory>
<filtering>true</filtering>
<includes>
<include>*.xml</include>
</includes>
</testResource>
<testResource>
<directory>src/test/resources</directory>
<excludes>
<exclude>*.xml</exclude>
</excludes>
</testResource>
</testResources>

<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
<executions>
<execution>
<id>default-test</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<excludes>
<exclude>**/Karaf*</exclude>
</excludes>
</configuration>
</execution>
<execution>
<id>karaf</id>
<phase>verify</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<includes>
<include>**/Karaf*</include>
</includes>
<systemPropertyVariables>
<karaf.version>${karaf.version}</karaf.version>
<project.version>${project.version}</project.version>
</systemPropertyVariables>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<configuration>
<instructions>
<Bundle-Activator>org.apache.geronimo.microprofile.opentracing.osgi.OpenTracingActivator</Bundle-Activator>
<Export-Package>org.apache.geronimo.microprofile.opentracing.osgi.*</Export-Package>
<Import-Package>
io.opentracing,
javax.ws.rs.client;version="[2,3)",
javax.ws.rs.container;version="[2,3)",
*
</Import-Package>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
</project>
@@ -29,6 +29,7 @@ public class ConfigAdminOpenTracingConfig implements GeronimoOpenTracingConfig {

public ConfigAdminOpenTracingConfig() {
ofNullable(OpenTracingActivator.INSTANCES.get(ConfigurationAdmin.class))
.map(OpenTracingActivator.Tracked::getInstance)
.map(ConfigurationAdmin.class::cast)
.ifPresent(admin -> {
try {
@@ -17,6 +17,7 @@
package org.apache.geronimo.microprofile.opentracing.osgi;

import static java.util.Collections.singletonMap;
import static java.util.Optional.ofNullable;

import java.util.ArrayList;
import java.util.Collection;
@@ -58,7 +59,7 @@
import io.opentracing.Tracer;

public class OpenTracingActivator implements BundleActivator {
// not sure we can avoid that :(
// not sure we can avoid that cause of client side :(
static final Map<Class<?>, Tracked<?>> INSTANCES = new HashMap<>();

private final Collection<ServiceRegistration<?>> registrations = new ArrayList<>();
@@ -88,17 +89,15 @@ public void start(final BundleContext context) {
tracer.setConfig(config);
tracer.setIdGenerator(idGenerator);
tracer.setScopeManager(scopeManager);
tracer.setFinishedSpanEvent(span -> container
.lookup(EventAdmin.class)
.postEvent(new Event("geronimo/microprofile/opentracing/finishedSpan", singletonMap("span", span))));
tracer.setFinishedSpanEvent(span -> ofNullable(container.lookup(EventAdmin.class)).ifPresent(ea ->
ea.sendEvent(new Event("geronimo/microprofile/opentracing/finishedSpan", singletonMap("span", span)))));
tracer.init();

final ZipkinConverter zipkinConverter = new ZipkinConverter();
zipkinConverter.setConfig(config);
zipkinConverter.setIdGenerator(idGenerator);
zipkinConverter.setZipkinSpanEvent(span -> container
.lookup(EventAdmin.class)
.postEvent(new Event("geronimo/microprofile/opentracing/zipkinSpan", singletonMap("span", span))));
zipkinConverter.setZipkinSpanEvent(span -> ofNullable(container.lookup(EventAdmin.class)).ifPresent(ea ->
ea.sendEvent(new Event("geronimo/microprofile/opentracing/zipkinSpan", singletonMap("span", span)))));
zipkinConverter.init();

logger = new ZipkinLogger();
@@ -16,16 +16,26 @@
*/
package org.apache.geronimo.microprofile.opentracing.osgi;

import static java.util.Objects.requireNonNull;
import static org.apache.ziplock.JarLocation.jarLocation;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.ops4j.pax.exam.CoreOptions.bundle;
import static org.ops4j.pax.exam.CoreOptions.maven;
import static org.ops4j.pax.exam.CoreOptions.options;
import static org.ops4j.pax.exam.CoreOptions.systemPackage;
import static org.ops4j.pax.exam.CoreOptions.url;
import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.features;
import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.karafDistributionConfiguration;
import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.keepRuntimeFolder;
import static org.testng.Assert.assertNotNull;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Dictionary;
import java.util.Hashtable;

import javax.inject.Inject;

@@ -37,36 +47,68 @@
import org.ops4j.pax.exam.junit.PaxExam;
import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
import org.ops4j.pax.exam.spi.reactors.PerClass;
import org.ops4j.pax.exam.util.Filter;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
import org.osgi.service.event.Event;
import org.osgi.service.event.EventAdmin;
import org.osgi.service.event.EventConstants;
import org.osgi.service.event.EventHandler;

import io.opentracing.Tracer;

@Ignore("likely need more love to work")
@Ignore("event admin setup is not yet right so the test can't pass")
@RunWith(PaxExam.class)
@ExamReactorStrategy(PerClass.class)
public class KarafTest {
@Inject
private BundleContext bc;

@Inject
@Filter("(objectClass=org.osgi.service.event.EventAdmin)")
private EventAdmin eventAdmin;

@Inject
@Filter("(objectClass=io.opentracing.Tracer)")
private Tracer tracer;

@Configuration
public Option[] config() throws MalformedURLException {
final String karafVersion = "4.2.1";
final File testClasses = jarLocation(KarafTest.class);
final String projectVersion = System.getProperty("project.version", "1.0.1-SNAPSHOT");
final URL testFeature = requireNonNull(new File(testClasses, "features.xml").toURI().toURL());
return options(
karafDistributionConfiguration()
.frameworkUrl(maven()
.groupId("org.apache.karaf")
.artifactId("apache-karaf")
.version(karafVersion)
.version(System.getProperty("karaf.version", "4.2.1"))
.type("tar.gz"))
.unpackDirectory(new File("target/karaf"))
.useDeployFolder(false)
.runEmbedded(true),
keepRuntimeFolder(),
features(url(new File("src/test/resources/features.xml").toURI().toURL().toExternalForm()), "test")
features(url(testFeature.toExternalForm()), "test"),
bundle(new File(testClasses, "../../../geronimo-opentracing-common/target/geronimo-opentracing-common-" + projectVersion + ".jar").toURI().toURL().toExternalForm()),
bundle(new File(testClasses, "../geronimo-opentracing-osgi-" + projectVersion + ".jar").toURI().toURL().toExternalForm())
);
}

@Test
public void ensureServicesAreRegistered() {
public void checkBusGetSpans() {
assertNotNull(tracer);

final Dictionary<String, Object> props = new Hashtable<>();
props.put(EventConstants.EVENT_TOPIC, "geronimo/microprofile/opentracing/zipkinSpan");
final Collection<Event> events = new ArrayList<>();
final ServiceRegistration<EventHandler> registration = bc.registerService(EventHandler.class, event -> {
synchronized (events) {
events.add(event);
}
}, props);
tracer.buildSpan("test").start().finish();
registration.unregister();

assertEquals(1, events.size());
}
}
@@ -25,12 +25,25 @@
<repository>mvn:org.ops4j.pax.cdi/pax-cdi-features/1.0.0/xml/features</repository>

<feature name="test" version="1.0.0" description="Test setup">
<!-- base -->
<feature prerequisite="true">wrap</feature>
<feature prerequisite="true">http-whiteboard</feature>
<!-- todo placeholders -->
<bundle>mvn:org.apache.servicemix.specs:org.apache.servicemix.specs.jaxrs-api-2.1:2.9.1</bundle>
<bundle>wrap:mvn:io.opentracing/opentracing-api/0.31.0</bundle>
<bundle>mvn:http://repo.apache.maven.org/maven2/!org.eclipse.microprofile.opentracing:microprofile-opentracing-api:1.1</bundle>
<bundle start="true">mvn:org.apache.aries.jax.rs/org.apache.aries.jax.rs.whiteboard/1.0.1</bundle>
<bundle>mvn:org.apache.felix/org.apache.felix.eventadmin/1.5.0</bundle>

<!-- cause MP spec OSGi constraints are not strict enough it leaks that -->
<bundle>mvn:javax.interceptor/javax.interceptor-api/1.2</bundle>
<bundle>mvn:javax.enterprise/cdi-api/1.2</bundle>

<!-- spec API -->
<bundle>mvn:org.apache.servicemix.specs/org.apache.servicemix.specs.jaxrs-api-2.1/2.9.1</bundle>
<bundle>wrap:mvn:io.opentracing/opentracing-api/${opentracing-api.version}</bundle>
<bundle>mvn:org.eclipse.microprofile.opentracing/microprofile-opentracing-api/${microprofile-opentracing-api.version}</bundle>

<!-- implementations + needed specs -->
<bundle>mvn:org.apache.geronimo.specs/geronimo-json_1.1_spec/1.1</bundle>
<bundle>mvn:org.apache.geronimo.specs/geronimo-jsonb_1.0_spec/1.1</bundle>
<bundle>mvn:org.apache.johnzon/johnzon-core/${johnzon.version}</bundle>
<bundle>mvn:org.apache.johnzon/johnzon-mapper/${johnzon.version}</bundle>
<bundle>mvn:org.apache.johnzon/johnzon-jsonb/${johnzon.version}</bundle>
</feature>
</features>
11 pom.xml
@@ -41,23 +41,28 @@
<tag>HEAD</tag>
</scm>

<properties>
<opentracing-api.version>0.31.0</opentracing-api.version>
<microprofile-opentracing-api.version>1.2</microprofile-opentracing-api.version>
</properties>

<dependencies>
<dependency>
<groupId>org.eclipse.microprofile.opentracing</groupId>
<artifactId>microprofile-opentracing-api</artifactId>
<version>1.2</version>
<version>${microprofile-opentracing-api.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.opentracing</groupId>
<artifactId>opentracing-api</artifactId>
<version>0.31.0</version>
<version>${opentracing-api.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-servlet-api</artifactId>
<version>9.0.8</version>
<version>9.0.12</version>
<scope>provided</scope>
</dependency>
<dependency>

0 comments on commit ac2bb11

Please sign in to comment.