CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-apache-pulsar--testmocks

Mock implementations and test utilities for Apache Pulsar components including ZooKeeper and BookKeeper mocking functionality

Pending
Overview
Eval results
Files

bookkeeper-server-testing.mddocs/

BookKeeper Server Testing

Server-side testing infrastructure for BookKeeper including server setup, auto-recovery management, and comprehensive testing utilities for integration testing scenarios.

Capabilities

ServerTester

Main server testing infrastructure that encapsulates BookKeeper server components with testing controls and auto-recovery management.

class ServerTester {
    // Constructors
    ServerTester(ServerConfiguration conf) throws Exception;
    ServerTester(ServerConfiguration conf, Bookie b) throws Exception;
    
    // Auto Recovery Management
    void startAutoRecovery() throws Exception;
    void stopAutoRecovery();
    Auditor getAuditor();
    ReplicationWorker getReplicationWorker();
    
    // Access Methods
    ServerConfiguration getConfiguration();
    BookieServer getServer();
    TestStatsProvider getStatsProvider();
    BookieSocketAddress getAddress();
    
    // Resource Management
    void shutdown() throws Exception;
}

MockUncleanShutdownDetection

Mock implementation of unclean shutdown detection for testing server lifecycle and failure scenarios.

static class MockUncleanShutdownDetection implements UncleanShutdownDetection {
    // Lifecycle Registration
    void registerStartUp();
    void registerCleanShutdown();
    
    // State Queries
    boolean lastShutdownWasUnclean();
    boolean getStartRegistered();
    boolean getShutdownRegistered();
}

Types

BookKeeper Server Configuration

class ServerConfiguration extends AbstractConfiguration {
    // Common configuration methods for BookKeeper server
    // (This is part of the BookKeeper API, not defined in testmocks)
}

interface UncleanShutdownDetection {
    void registerStartUp();
    void registerCleanShutdown();
    boolean lastShutdownWasUnclean();
}

BookKeeper Server Components

class BookieServer {
    // BookKeeper server instance
    // (Part of BookKeeper server API)
}

class Auditor {
    // Auto-recovery auditor component
    // (Part of BookKeeper auto-recovery)
}

class ReplicationWorker {
    // Auto-recovery replication worker
    // (Part of BookKeeper auto-recovery)
}

class BookieSocketAddress {
    // Bookie network address
    // (Part of BookKeeper API)
}

Usage Examples

Basic Server Testing

import org.apache.bookkeeper.test.ServerTester;
import org.apache.bookkeeper.conf.ServerConfiguration;

// Create server configuration
ServerConfiguration conf = new ServerConfiguration();
conf.setBookiePort(0); // Use ephemeral port
conf.setJournalDirName("/tmp/bk-journal");
conf.setLedgerDirNames(new String[]{"/tmp/bk-ledgers"});
conf.setMetadataServiceUri("zk+null://localhost/ledgers");

// Create and start server tester
ServerTester serverTester = new ServerTester(conf);

// Access server components
BookieServer server = serverTester.getServer();
BookieSocketAddress address = serverTester.getAddress();
TestStatsProvider statsProvider = serverTester.getStatsProvider();

System.out.println("Server running on: " + address);

// Shutdown when done
serverTester.shutdown();

Auto-Recovery Testing

ServerConfiguration conf = new ServerConfiguration();
// Configure as above...

ServerTester serverTester = new ServerTester(conf);

// Start auto-recovery components
serverTester.startAutoRecovery();

// Access auto-recovery components
Auditor auditor = serverTester.getAuditor();
ReplicationWorker replicationWorker = serverTester.getReplicationWorker();

// Test auto-recovery functionality
// (perform operations that trigger recovery)

// Stop auto-recovery
serverTester.stopAutoRecovery();

// Shutdown server
serverTester.shutdown();

Custom Bookie Testing

import org.apache.bookkeeper.bookie.Bookie;

ServerConfiguration conf = new ServerConfiguration();
// Configure as above...

// Create custom bookie instance
Bookie customBookie = new Bookie(conf);

// Create server tester with custom bookie
ServerTester serverTester = new ServerTester(conf, customBookie);

// Test with custom bookie behavior
// ...

serverTester.shutdown();

Unclean Shutdown Testing

import org.apache.bookkeeper.test.ServerTester.MockUncleanShutdownDetection;

// Create mock shutdown detection
MockUncleanShutdownDetection shutdownDetection = new MockUncleanShutdownDetection();

// Simulate server startup
shutdownDetection.registerStartUp();
assert shutdownDetection.getStartRegistered();

// Simulate clean shutdown
shutdownDetection.registerCleanShutdown();
assert shutdownDetection.getShutdownRegistered();
assert !shutdownDetection.lastShutdownWasUnclean();

// Test unclean shutdown scenario
MockUncleanShutdownDetection uncleanDetection = new MockUncleanShutdownDetection();
uncleanDetection.registerStartUp();
// Don't register clean shutdown
assert uncleanDetection.lastShutdownWasUnclean();

Statistics Provider Testing

ServerTester serverTester = new ServerTester(conf);
TestStatsProvider statsProvider = serverTester.getStatsProvider();

// Access statistics during testing
TestStatsProvider.TestOpStatsLogger opStats = statsProvider.getOpStatsLogger("test.operation");
TestStatsProvider.TestCounter counter = statsProvider.getCounter("test.counter");

// Perform operations and verify statistics
// ...

// Check collected statistics
long successCount = opStats.getSuccessCount();
double avgLatency = opStats.getSuccessAverage();
long counterValue = counter.get();

System.out.println("Operations: " + successCount + ", Avg latency: " + avgLatency);

serverTester.shutdown();

Integration Testing Pattern

public class BookKeeperIntegrationTest {
    private ServerTester serverTester;
    private PulsarMockBookKeeper mockBk;
    
    @Before
    public void setUp() throws Exception {
        // Set up server
        ServerConfiguration conf = new ServerConfiguration();
        conf.setBookiePort(0);
        conf.setJournalDirName(createTempDir());
        conf.setLedgerDirNames(new String[]{createTempDir()});
        
        serverTester = new ServerTester(conf);
        
        // Set up client
        OrderedExecutor executor = OrderedExecutor.newBuilder()
            .numThreads(1)
            .name("test")
            .build();
        mockBk = new PulsarMockBookKeeper(executor);
    }
    
    @Test
    public void testServerClientInteraction() throws Exception {
        // Test server and client together
        LedgerHandle ledger = mockBk.createLedger(DigestType.CRC32, "password".getBytes());
        ledger.addEntry("test".getBytes());
        
        // Verify server statistics
        TestStatsProvider stats = serverTester.getStatsProvider();
        // Check relevant metrics...
        
        ledger.close();
    }
    
    @After
    public void tearDown() throws Exception {
        if (mockBk != null) {
            mockBk.close();
        }
        if (serverTester != null) {
            serverTester.shutdown();
        }
    }
}

Install with Tessl CLI

npx tessl i tessl/maven-org-apache-pulsar--testmocks

docs

bookkeeper-client-mocking.md

bookkeeper-server-testing.md

bookkeeper-testing-utilities.md

index.md

zookeeper-mocking.md

tile.json