CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-ops4j-pax-exam--pax-exam-container-karaf

Integration testing framework for OSGi applications running in Apache Karaf containers

Pending
Overview
Eval results
Files

runtime-configuration.mddocs/

Runtime Configuration

Control over Karaf container runtime behavior including logging, debugging, console access, directory management, and system-level configuration. This capability provides essential options for test execution control and debugging support.

Capabilities

Runtime Folder Management

Control whether test runtime directories are preserved after test completion for debugging purposes.

/**
 * Keep test runtime directories after test completion
 * By default, Pax Exam deletes test directories after tests finish
 * @return Option to preserve runtime directories
 */
public static Option keepRuntimeFolder();

Usage Examples:

import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.*;

@Configuration
public Option[] config() {
    return new Option[] {
        karafDistributionConfiguration(),
        
        // Keep directories for debugging
        keepRuntimeFolder(),
        
        // Other configuration...
    };
}

Logging Configuration

Configure logging levels and behavior for the test container.

/**
 * Set a specific log level for the container
 * @param logLevel Log level to set
 * @return Logging configuration option
 */
public static Option logLevel(LogLevel logLevel);

/**
 * Get a log level option builder for advanced configuration
 * @return LogLevelOption for fluent configuration
 */
public static LogLevelOption logLevel();

/**
 * Prevent automatic modification of log configuration files
 * By default, Pax Exam modifies logging configuration to add console output
 * @return Option to preserve original log configuration
 */
public static Option doNotModifyLogConfiguration();

Usage Examples:

import org.ops4j.pax.exam.karaf.options.LogLevelOption.LogLevel;

// Set specific log level
Option infoLogging = logLevel(LogLevel.INFO);
Option debugLogging = logLevel(LogLevel.DEBUG);
Option errorLogging = logLevel(LogLevel.ERROR);

// Use fluent configuration
Option fluentLogging = logLevel().logLevel(LogLevel.WARN);

// Prevent automatic log configuration changes
Option preserveLogging = doNotModifyLogConfiguration();

// Complete configuration
@Configuration
public Option[] config() {
    return new Option[] {
        karafDistributionConfiguration(),
        logLevel(LogLevel.DEBUG),
        doNotModifyLogConfiguration(), // Keep original log config
        keepRuntimeFolder()
    };
}

Debug Configuration

Enable remote debugging support for the Karaf container to allow IDE attachment and debugging.

/**
 * Enable debugging with default port 5005 and suspend VM until debugger attaches
 * @return Debug configuration option
 */
public static Option debugConfiguration();

/**
 * Enable debugging with custom port and suspend behavior
 * @param port Debug port number
 * @param hold Whether to suspend VM until debugger attaches
 * @return Debug configuration option
 */
public static Option debugConfiguration(String port, boolean hold);

Usage Examples:

// Default debug configuration (port 5005, suspend=true)
Option defaultDebug = debugConfiguration();

// Custom debug port without suspending 
Option customDebug = debugConfiguration("8000", false);

// Debug with suspend for IDE attachment
Option suspendDebug = debugConfiguration("5005", true);

// Debug configuration in test
@Configuration
public Option[] config() {
    return new Option[] {
        karafDistributionConfiguration(),
        debugConfiguration("8000", false), // Debug on port 8000, don't suspend
        keepRuntimeFolder() // Keep for debugging
    };
}

System Configuration

Configure internal Pax Exam system behavior and bundle start levels.

/**
 * Configure the internal invoker for Karaf integration tests
 * @param invoker Probe invoker name for integration test communication
 * @return System configuration option
 */
public static Option useOwnKarafExamSystemConfiguration(String invoker);

/**
 * Configure start level for Pax Exam bundles
 * @param startLevel Bundle start level for exam bundles
 * @return Start level configuration option
 */
public static Option useOwnExamBundlesStartLevel(int startLevel);

Usage Examples:

// Configure custom invoker
Option customInvoker = useOwnKarafExamSystemConfiguration("custom-invoker");

// Set exam bundles start level
Option examStartLevel = useOwnExamBundlesStartLevel(80);

// System configuration in test
@Configuration
public Option[] config() {
    return new Option[] {
        karafDistributionConfiguration(),
        useOwnExamBundlesStartLevel(90), // High start level for exam bundles
        useOwnKarafExamSystemConfiguration("test-invoker")
    };
}

Runtime Option Types

Keep Runtime Folder Option

Simple flag option to preserve test directories.

/**
 * Option to keep runtime directories after test completion
 */
class KeepRuntimeFolderOption implements Option {
    
    public KeepRuntimeFolderOption();
}

Log Level Option

Configurable logging level option with fluent interface.

/**
 * Logging level configuration option
 */
class LogLevelOption implements Option {
    
    // Log level enumeration
    enum LogLevel {
        TRACE, DEBUG, INFO, WARN, ERROR
    }
    
    public LogLevelOption();
    public LogLevelOption(LogLevel logLevel);
    
    public LogLevelOption logLevel(LogLevel logLevel);
    public LogLevel getLogLevel();
}

Do Not Modify Log Option

Flag option to prevent automatic log configuration changes.

/**
 * Option to prevent automatic log configuration modifications
 */
class DoNotModifyLogOption implements Option {
    
    public DoNotModifyLogOption();
}

Exam System Configuration Option

Internal system configuration for Pax Exam integration.

/**
 * Configuration option for internal Pax Exam system behavior
 */
class KarafExamSystemConfigurationOption implements Option {
    
    public KarafExamSystemConfigurationOption(String invoker);
    public String getInvoker();
}

Exam Bundles Start Level Option

Configuration for Pax Exam bundle start levels.

/**
 * Start level configuration for Pax Exam bundles
 */
class ExamBundlesStartLevel implements Option {
    
    public ExamBundlesStartLevel(int startLevel);
    public int getStartLevel();
}

Runtime Configuration Patterns

Development Configuration

Configuration optimized for development and debugging:

@Configuration
public Option[] developmentConfig() {
    return new Option[] {
        karafDistributionConfiguration()
            .unpackDirectory(new File("target/exam"))
            .useDeployFolder(true),
        
        // Development settings
        keepRuntimeFolder(),                    // Keep for inspection
        logLevel(LogLevel.DEBUG),              // Verbose logging
        debugConfiguration("5005", true),     // Enable debugging
        doNotModifyLogConfiguration(),         // Use custom log config
        
        // Install development features
        features("mvn:org.apache.karaf.features/standard/4.2.0/xml/features",
                "ssh", "management", "webconsole")
    };
}

Production-like Configuration

Configuration that mimics production environment:

@Configuration  
public Option[] productionConfig() {
    return new Option[] {
        karafDistributionConfiguration()
            .runEmbedded(false)
            .useDeployFolder(false),
        
        // Production-like settings
        logLevel(LogLevel.WARN),               // Minimal logging
        useOwnExamBundlesStartLevel(100),      // High start level
        
        // Production features only
        features("mvn:org.apache.karaf.features/standard/4.2.0/xml/features",
                "scr", "log")
    };
}

Test-specific Configuration

Configuration tailored for specific test requirements:

@Configuration
public Option[] integrationTestConfig() {
    return new Option[] {
        karafDistributionConfiguration()
            .directoryNameFormat("test-%s")
            .unpackDirectory(new File("target/integration-tests")),
        
        // Test-specific settings
        keepRuntimeFolder(),                   // For test artifact inspection
        logLevel(LogLevel.INFO),              // Moderate logging
        useOwnKarafExamSystemConfiguration("integration-invoker"),
        
        // Test features
        features("mvn:org.apache.karaf.features/standard/4.2.0/xml/features",
                "scr", "http", "management")
    };
}

Performance Test Configuration

Configuration optimized for performance testing:

@Configuration
public Option[] performanceConfig() {
    return new Option[] {
        karafDistributionConfiguration()
            .runEmbedded(true)                 // Faster startup
            .useDeployFolder(false),           // No hot deploy overhead
        
        // Performance settings  
        logLevel(LogLevel.ERROR),              // Minimal logging overhead
        useOwnExamBundlesStartLevel(50),       // Lower start level for speed
        
        // Minimal features
        features("mvn:org.apache.karaf.features/standard/4.2.0/xml/features",
                "scr")
    };
}

Debugging Support

Remote Debugging Setup

Enable remote debugging for IDE attachment:

@Configuration
public Option[] debugConfig() {
    return new Option[] {
        karafDistributionConfiguration(),
        
        // Debug configuration
        debugConfiguration("8000", true),     // Port 8000, wait for debugger
        keepRuntimeFolder(),                  // Keep for debugging
        logLevel(LogLevel.DEBUG),             // Debug logging
        
        // SSH access for debugging
        features("mvn:org.apache.karaf.features/standard/4.2.0/xml/features",
                "ssh", "management")
    };
}

// IDE Debug Configuration:
// - Host: localhost
// - Port: 8000  
// - Transport: Socket
// - Debugger Mode: Attach

Log Analysis Support

Configure logging for comprehensive test analysis:

@Configuration
public Option[] logAnalysisConfig() {
    return new Option[] {
        karafDistributionConfiguration(),
        
        // Preserve all test artifacts
        keepRuntimeFolder(),
        
        // Detailed logging without auto-modification
        doNotModifyLogConfiguration(),
        
        // Custom log configuration file with detailed patterns
        replaceConfigurationFile(
            "etc/org.ops4j.pax.logging.cfg",
            new File("src/test/resources/detailed-logging.cfg")
        )
    };
}

Error Handling

Runtime configuration operations handle errors for:

  • Invalid debug port numbers (non-numeric or out of range)
  • Inaccessible unpack directories
  • Invalid start level values (negative numbers)
  • Invalid invoker names
  • System property conflicts
  • JVM debugging configuration conflicts

Most runtime configuration errors are detected at test startup and will cause immediate test failure with descriptive error messages.

Install with Tessl CLI

npx tessl i tessl/maven-org-ops4j-pax-exam--pax-exam-container-karaf

docs

configuration-management.md

distribution-configuration.md

feature-management.md

index.md

runtime-configuration.md

security-console.md

tile.json