Writing unit tests for your discovery and component classes is a good practice. You can do even better and write integration tests which will start a standalone plugin container.
The standalone plugin container needs to find:
The setup-test-plugin-container mojo will prepare what the standalone plugin container needs. By defaut, it creates a ${project.build.directory}/itest directory and copies the required plugins under ${project.build.directory}/itest/plugins and the native libraries under ${project.build.directory}/itest/lib.
You must configure the Maven Failsafe plugin to tell SIGAR where to find the libraries (org.hyperic.sigar.path system property, see example below).
...
public static final String PLUGIN_NAME = "TestPlugin";
private static PluginContainer pluginContainer;
private static PluginEnvironment pluginEnvironment;
@BeforeSuite
public void start() {
File pluginDir = new File("target/itest/plugins");
PluginContainerConfiguration pcConfig = new PluginContainerConfiguration();
pcConfig.setPluginFinder(new FileSystemPluginFinder(pluginDir));
pcConfig.setPluginDirectory(pluginDir);
pcConfig.setInsideAgent(false);
pluginContainer = PluginContainer.getInstance();
pluginContainer.setConfiguration(pcConfig);
pluginContainer.initialize();
pluginEnvironment = pluginContainer.getPluginManager().getPlugin(PLUGIN_NAME);
}
@AfterSuite
public void stop() {
pluginContainer.shutdown();
}
@Test
public void testNativeSystemAvailable() {
SystemInfo systemInfo = SystemInfoFactory.createSystemInfo();
assertTrue(systemInfo.isNative(), "Native system should be available");
}
@Test
public void testPluginLoaded() {
assertNotNull(pluginEnvironment, "Plugin not loaded");
assertEquals(pluginEnvironment.getPluginName(), PLUGIN_NAME);
}
... ...
<plugin>
<groupId>org.rhq.maven.plugins</groupId>
<artifactId>rhq-agent-plugin-plugin</artifactId>
<version>${rhq-agent-plugin-plugin.version}</version>
<!-- Tell Maven that this plugin will extend the standard lifecycle and packaging -->
<!-- Without this the build fails to recognize the custom packaging -->
<extensions>true</extensions>
<configuration>
<!-- Here comes the project manifest customization -->
<archive>
<manifest>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
<manifestEntries>
<Maven-Version>${maven.version}</Maven-Version>
<Java-Version>${java.version}</Java-Version>
<Java-Vendor>${java.vendor}</Java-Vendor>
<Os-Name>${os.name}</Os-Name>
<Os-Arch>${os.arch}</Os-Arch>
<Os-Version>${os.version}</Os-Version>
</manifestEntries>
</archive>
</configuration>
<executions>
<execution>
<id>setup-test-plugin-container</id>
<phase>pre-integration-test</phase>
<goals>
<goal>setup-test-plugin-container</goal>
</goals>
<configuration>
<rhqVersion>${rhq.version}</rhqVersion>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludes>
<exclude>itest/**</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<configuration>
<includes>
<include>itest/**</include>
</includes>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
<configuration>
<argLine>-Dorg.hyperic.sigar.path=${project.build.directory}/itest/lib</argLine>
</configuration>
</execution>
</executions>
</plugin>
...