CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-apache-flink--flink-test-utils

Comprehensive testing utilities for Apache Flink stream and batch processing applications

Pending
Overview
Eval results
Files

minicluster-management.mddocs/

MiniCluster Management

JUnit integration components for managing Flink MiniCluster lifecycle, providing embedded cluster environments for testing Flink applications with support for both JUnit 4 and JUnit 5 frameworks.

Capabilities

JUnit 5 MiniCluster Extension

Manages MiniCluster lifecycle as a JUnit 5 extension with automatic startup, shutdown, and configuration management. Supports parameter injection and provides access to test environments and cluster clients.

@Experimental
public class MiniClusterExtension implements BeforeAllCallback, AfterAllCallback, ParameterResolver {
    public MiniClusterExtension();
    public MiniClusterExtension(MiniClusterResourceConfiguration configuration);
    public MiniClusterExtension(Supplier<MiniClusterResourceConfiguration> configurationSupplier);
    
    public TestStreamEnvironment getTestStreamEnvironment();
    public Configuration getClientConfiguration();
    public Integer getNumberSlots();
    public boolean isRunning();
}

Usage Example

import org.apache.flink.test.junit5.MiniClusterExtension;
import org.apache.flink.test.junit5.InjectClusterClient;
import org.apache.flink.client.ClusterClient;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

public class MyStreamingTest {
    
    @RegisterExtension
    static final MiniClusterExtension MINI_CLUSTER_EXTENSION = 
        new MiniClusterExtension();
    
    @Test
    void testWithDefaultCluster() throws Exception {
        StreamExecutionEnvironment env = 
            MINI_CLUSTER_EXTENSION.getTestStreamEnvironment();
        // Test implementation
    }
    
    @Test
    void testWithInjectedClient(@InjectClusterClient ClusterClient<?> client) {
        // Use injected cluster client
    }
}

Parameter Injection Annotation

Annotation for injecting cluster client instances into test method parameters, supporting both ClusterClient and RestClusterClient types.

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Experimental
public @interface InjectClusterClient {
}

JUnit 4 MiniCluster Resource

JUnit 4 resource that manages MiniCluster lifecycle with client access, providing compatibility for legacy test suites.

public class MiniClusterWithClientResource extends ExternalResource {
    public ClusterClient<?> getClusterClient();
    public RestClusterClient<?> getRestClusterClient();
    public TestStreamEnvironment getTestStreamEnvironment();
}

Usage Example

import org.apache.flink.test.util.MiniClusterWithClientResource;
import org.junit.ClassRule;
import org.junit.Test;

public class MyJUnit4Test {
    
    @ClassRule
    public static MiniClusterWithClientResource miniClusterResource = 
        new MiniClusterWithClientResource();
    
    @Test
    public void testStreamingJob() throws Exception {
        StreamExecutionEnvironment env = 
            miniClusterResource.getTestStreamEnvironment();
        // Test implementation
    }
}

Abstract Test Base Classes

Base classes providing MiniCluster integration and temporary file management for common testing patterns.

public abstract class AbstractTestBase {
    protected String getTempDirPath(String dirName);
    protected String getTempFilePath(String fileName);
    protected String createTempFile(String fileName, String contents) throws IOException;
    protected File createAndRegisterTempFile(String fileName) throws IOException;
}

public abstract class AbstractTestBaseJUnit4 {
    // Same API as AbstractTestBase but for JUnit 4
}

Parameterized Test Bases

Base classes for running multiple test programs with parameter variations and execution mode configurations.

public abstract class MultipleProgramsTestBase extends AbstractTestBase {
    public enum TestExecutionMode {
        CLUSTER,
        CLUSTER_OBJECT_REUSE
    }
}

public abstract class MultipleProgramsTestBaseJUnit4 extends AbstractTestBaseJUnit4 {
    // JUnit 4 version of MultipleProgramsTestBase
}

Single Program Test Bases

Base classes for single test programs with object reuse variations and execution result tracking.

public abstract class JavaProgramTestBase extends AbstractTestBase {
    public abstract JobExecutionResult testProgram() throws Exception;
    
    public void setNumberOfTestRepetitions(int numberOfRepetitions);
    public int getParallelism();
    public JobExecutionResult getLatestExecutionResult();
    public boolean isCollectionExecution();
}

public abstract class JavaProgramTestBaseJUnit4 extends AbstractTestBaseJUnit4 {
    // JUnit 4 version of JavaProgramTestBase
}

Configuration Types

MiniCluster Resource Configuration

Configuration for MiniCluster setup including parallelism, task manager resources, and cluster settings.

public class MiniClusterResourceConfiguration {
    public int getNumberTaskManagers();
    public int getNumberSlotsPerTaskManager();
    public Configuration getConfiguration();
    // Additional configuration methods
}

Install with Tessl CLI

npx tessl i tessl/maven-org-apache-flink--flink-test-utils

docs

index.md

metrics-testing.md

minicluster-management.md

result-verification.md

specialized-connectors.md

test-data-sources.md

test-environments.md

validation-utilities.md

tile.json