0
# MiniCluster Management
1
2
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.
3
4
## Capabilities
5
6
### JUnit 5 MiniCluster Extension
7
8
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.
9
10
```java { .api }
11
@Experimental
12
public class MiniClusterExtension implements BeforeAllCallback, AfterAllCallback, ParameterResolver {
13
public MiniClusterExtension();
14
public MiniClusterExtension(MiniClusterResourceConfiguration configuration);
15
public MiniClusterExtension(Supplier<MiniClusterResourceConfiguration> configurationSupplier);
16
17
public TestStreamEnvironment getTestStreamEnvironment();
18
public Configuration getClientConfiguration();
19
public Integer getNumberSlots();
20
public boolean isRunning();
21
}
22
```
23
24
#### Usage Example
25
26
```java
27
import org.apache.flink.test.junit5.MiniClusterExtension;
28
import org.apache.flink.test.junit5.InjectClusterClient;
29
import org.apache.flink.client.ClusterClient;
30
import org.junit.jupiter.api.Test;
31
import org.junit.jupiter.api.extension.RegisterExtension;
32
33
public class MyStreamingTest {
34
35
@RegisterExtension
36
static final MiniClusterExtension MINI_CLUSTER_EXTENSION =
37
new MiniClusterExtension();
38
39
@Test
40
void testWithDefaultCluster() throws Exception {
41
StreamExecutionEnvironment env =
42
MINI_CLUSTER_EXTENSION.getTestStreamEnvironment();
43
// Test implementation
44
}
45
46
@Test
47
void testWithInjectedClient(@InjectClusterClient ClusterClient<?> client) {
48
// Use injected cluster client
49
}
50
}
51
```
52
53
### Parameter Injection Annotation
54
55
Annotation for injecting cluster client instances into test method parameters, supporting both ClusterClient and RestClusterClient types.
56
57
```java { .api }
58
@Target(ElementType.PARAMETER)
59
@Retention(RetentionPolicy.RUNTIME)
60
@Experimental
61
public @interface InjectClusterClient {
62
}
63
```
64
65
### JUnit 4 MiniCluster Resource
66
67
JUnit 4 resource that manages MiniCluster lifecycle with client access, providing compatibility for legacy test suites.
68
69
```java { .api }
70
public class MiniClusterWithClientResource extends ExternalResource {
71
public ClusterClient<?> getClusterClient();
72
public RestClusterClient<?> getRestClusterClient();
73
public TestStreamEnvironment getTestStreamEnvironment();
74
}
75
```
76
77
#### Usage Example
78
79
```java
80
import org.apache.flink.test.util.MiniClusterWithClientResource;
81
import org.junit.ClassRule;
82
import org.junit.Test;
83
84
public class MyJUnit4Test {
85
86
@ClassRule
87
public static MiniClusterWithClientResource miniClusterResource =
88
new MiniClusterWithClientResource();
89
90
@Test
91
public void testStreamingJob() throws Exception {
92
StreamExecutionEnvironment env =
93
miniClusterResource.getTestStreamEnvironment();
94
// Test implementation
95
}
96
}
97
```
98
99
### Abstract Test Base Classes
100
101
Base classes providing MiniCluster integration and temporary file management for common testing patterns.
102
103
```java { .api }
104
public abstract class AbstractTestBase {
105
protected String getTempDirPath(String dirName);
106
protected String getTempFilePath(String fileName);
107
protected String createTempFile(String fileName, String contents) throws IOException;
108
protected File createAndRegisterTempFile(String fileName) throws IOException;
109
}
110
111
public abstract class AbstractTestBaseJUnit4 {
112
// Same API as AbstractTestBase but for JUnit 4
113
}
114
```
115
116
### Parameterized Test Bases
117
118
Base classes for running multiple test programs with parameter variations and execution mode configurations.
119
120
```java { .api }
121
public abstract class MultipleProgramsTestBase extends AbstractTestBase {
122
public enum TestExecutionMode {
123
CLUSTER,
124
CLUSTER_OBJECT_REUSE
125
}
126
}
127
128
public abstract class MultipleProgramsTestBaseJUnit4 extends AbstractTestBaseJUnit4 {
129
// JUnit 4 version of MultipleProgramsTestBase
130
}
131
```
132
133
### Single Program Test Bases
134
135
Base classes for single test programs with object reuse variations and execution result tracking.
136
137
```java { .api }
138
public abstract class JavaProgramTestBase extends AbstractTestBase {
139
public abstract JobExecutionResult testProgram() throws Exception;
140
141
public void setNumberOfTestRepetitions(int numberOfRepetitions);
142
public int getParallelism();
143
public JobExecutionResult getLatestExecutionResult();
144
public boolean isCollectionExecution();
145
}
146
147
public abstract class JavaProgramTestBaseJUnit4 extends AbstractTestBaseJUnit4 {
148
// JUnit 4 version of JavaProgramTestBase
149
}
150
```
151
152
## Configuration Types
153
154
### MiniCluster Resource Configuration
155
156
Configuration for MiniCluster setup including parallelism, task manager resources, and cluster settings.
157
158
```java { .api }
159
public class MiniClusterResourceConfiguration {
160
public int getNumberTaskManagers();
161
public int getNumberSlotsPerTaskManager();
162
public Configuration getConfiguration();
163
// Additional configuration methods
164
}
165
```