Comprehensive testing utilities for Apache Flink stream and batch processing applications
—
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.
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();
}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
}
}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 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();
}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
}
}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
}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
}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 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