Skip to content

Commit d391b49

Browse files
committed
Fix flaky AppRecovery test
1 parent f1cead3 commit d391b49

File tree

4 files changed

+50
-29
lines changed

4 files changed

+50
-29
lines changed

src/test/java/eu/openanalytics/containerproxy/test/e2e/app_recovery/TestAppRecovery.java

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import eu.openanalytics.containerproxy.test.helpers.ShinyProxyClient;
2525
import eu.openanalytics.containerproxy.test.helpers.ShinyProxyInstance;
2626
import io.fabric8.kubernetes.api.model.Pod;
27+
import org.junit.jupiter.api.AfterEach;
2728
import org.junit.jupiter.api.Assertions;
2829
import org.junit.jupiter.api.Test;
2930
import org.junit.jupiter.params.ParameterizedTest;
@@ -51,6 +52,11 @@ private static Stream<Arguments> provideStringsForIsBlank() {
5152
);
5253
}
5354

55+
@AfterEach
56+
public void waitForCleanup() throws InterruptedException {
57+
Thread.sleep(20_000);
58+
}
59+
5460
@ParameterizedTest
5561
@MethodSource("provideStringsForIsBlank")
5662
public void simple_recover_single_app_after_shutdown(String backend, String extraArgs) throws IOException, InterruptedException {
@@ -89,8 +95,6 @@ public void simple_recover_single_app_after_shutdown(String backend, String extr
8995
// 8. stop the proxy
9096
Assertions.assertTrue(shinyProxyClient.stopProxy(id));
9197

92-
Thread.sleep(500); // Give ShinyProxy time to cleanup
93-
9498
// 9. stop the instance
9599
instance2.stop();
96100
} finally {
@@ -105,7 +109,7 @@ public void new_app_should_work_after_recovery(String backend, String extraArgs)
105109
List<ShinyProxyInstance> instances = new ArrayList<>();
106110
try {
107111
// 1. create the instance
108-
ShinyProxyInstance instance1 = new ShinyProxyInstance("1", String.format("application-app-recovery_%s.yml", backend), extraArgs);
112+
ShinyProxyInstance instance1 = new ShinyProxyInstance("3", String.format("application-app-recovery_%s.yml", backend), extraArgs);
109113
instances.add(instance1);
110114
Assertions.assertTrue(instance1.start());
111115

@@ -121,7 +125,7 @@ public void new_app_should_work_after_recovery(String backend, String extraArgs)
121125
instance1.stop();
122126

123127
// 5. start the instance again
124-
ShinyProxyInstance instance2 = new ShinyProxyInstance("2", String.format("application-app-recovery_%s.yml", backend), extraArgs);
128+
ShinyProxyInstance instance2 = new ShinyProxyInstance("4", String.format("application-app-recovery_%s.yml", backend), extraArgs);
125129
instances.add(instance2);
126130
Assertions.assertTrue(instance2.start());
127131

@@ -144,8 +148,6 @@ public void new_app_should_work_after_recovery(String backend, String extraArgs)
144148
Assertions.assertTrue(shinyProxyClient.stopProxy(id1));
145149
Assertions.assertTrue(shinyProxyClient.stopProxy(id2));
146150

147-
Thread.sleep(1000); // Give ShinyProxy time to cleanup
148-
149151
// 9. stop the instance
150152
instance2.stop();
151153
} finally {
@@ -163,7 +165,7 @@ public void complex_recover_multiple_apps_after_shutdown(String backend, String
163165
List<ShinyProxyInstance> instances = new ArrayList<>();
164166
try {
165167
// 1. create the instance
166-
ShinyProxyInstance instance1 = new ShinyProxyInstance("1", String.format("application-app-recovery_%s.yml", backend), extraArgs);
168+
ShinyProxyInstance instance1 = new ShinyProxyInstance("5", String.format("application-app-recovery_%s.yml", backend), extraArgs);
167169
instances.add(instance1);
168170
Assertions.assertTrue(instance1.start());
169171

@@ -209,7 +211,7 @@ public void complex_recover_multiple_apps_after_shutdown(String backend, String
209211
instance1.stop();
210212

211213
// 9. start the instance again
212-
ShinyProxyInstance instance2 = new ShinyProxyInstance("2", String.format("application-app-recovery_%s.yml", backend), extraArgs);
214+
ShinyProxyInstance instance2 = new ShinyProxyInstance("6", String.format("application-app-recovery_%s.yml", backend), extraArgs);
213215
instances.add(instance2);
214216
Assertions.assertTrue(instance2.start());
215217

@@ -245,8 +247,6 @@ public void complex_recover_multiple_apps_after_shutdown(String backend, String
245247
Assertions.assertTrue(shinyProxyClient3.stopProxy(id5));
246248
Assertions.assertTrue(shinyProxyClient3.stopProxy(id6));
247249

248-
Thread.sleep(2500); // Give ShinyProxy time to cleanup
249-
250250
// 17. stop the instance
251251
instance2.stop();
252252
} finally {
@@ -262,12 +262,12 @@ public void simple_recover_multiple_instances(String backend, String extraArgs)
262262
List<ShinyProxyInstance> instances = new ArrayList<>();
263263
try {
264264
// 1. create the first instance
265-
ShinyProxyInstance instance1 = new ShinyProxyInstance("1", String.format("application-app-recovery_%s.yml", backend), 7583, extraArgs);
265+
ShinyProxyInstance instance1 = new ShinyProxyInstance("7", String.format("application-app-recovery_%s.yml", backend), 7583, extraArgs);
266266
instances.add(instance1);
267267
Assertions.assertTrue(instance1.start());
268268

269269
// 1. create the second instance
270-
ShinyProxyInstance instance2 = new ShinyProxyInstance("2", String.format("application-app-recovery_%s_2.yml", backend), 7584, extraArgs);
270+
ShinyProxyInstance instance2 = new ShinyProxyInstance("8", String.format("application-app-recovery_%s_2.yml", backend), 7584, extraArgs);
271271
instances.add(instance2);
272272
Assertions.assertTrue(instance2.start());
273273

@@ -292,11 +292,11 @@ public void simple_recover_multiple_instances(String backend, String extraArgs)
292292
instance2.stop();
293293

294294
// 5. start both instances again
295-
ShinyProxyInstance instance3 = new ShinyProxyInstance("3", String.format("application-app-recovery_%s.yml", backend), 7583, extraArgs);
295+
ShinyProxyInstance instance3 = new ShinyProxyInstance("9", String.format("application-app-recovery_%s.yml", backend), 7583, extraArgs);
296296
instances.add(instance3);
297297
Assertions.assertTrue(instance3.start());
298298

299-
ShinyProxyInstance instance4 = new ShinyProxyInstance("4", String.format("application-app-recovery_%s_2.yml", backend), 7584, extraArgs);
299+
ShinyProxyInstance instance4 = new ShinyProxyInstance("10", String.format("application-app-recovery_%s_2.yml", backend), 7584, extraArgs);
300300
instances.add(instance4);
301301
Assertions.assertTrue(instance4.start());
302302

@@ -315,8 +315,6 @@ public void simple_recover_multiple_instances(String backend, String extraArgs)
315315
Assertions.assertTrue(shinyProxyClient1.stopProxy(id1));
316316
Assertions.assertTrue(shinyProxyClient2.stopProxy(id2));
317317

318-
Thread.sleep(1000); // Give ShinyProxy time to cleanup
319-
320318
// 9. stop the instance
321319
instance3.stop();
322320
instance4.stop();
@@ -332,7 +330,7 @@ public void kubernetes_multiple_namespaces() {
332330
List<ShinyProxyInstance> instances = new ArrayList<>();
333331
try {
334332
// 1. create the instance
335-
ShinyProxyInstance instance1 = new ShinyProxyInstance("1", "application-app-recovery_kubernetes_multi_ns.yml");
333+
ShinyProxyInstance instance1 = new ShinyProxyInstance("11", "application-app-recovery_kubernetes_multi_ns.yml");
336334
instances.add(instance1);
337335
Assertions.assertTrue(instance1.start());
338336

@@ -351,7 +349,7 @@ public void kubernetes_multiple_namespaces() {
351349
instance1.stop();
352350

353351
// 5. start the instance again
354-
ShinyProxyInstance instance2 = new ShinyProxyInstance("2", "application-app-recovery_kubernetes_multi_ns.yml");
352+
ShinyProxyInstance instance2 = new ShinyProxyInstance("12", "application-app-recovery_kubernetes_multi_ns.yml");
355353
instances.add(instance2);
356354
Assertions.assertTrue(instance2.start());
357355

@@ -366,8 +364,6 @@ public void kubernetes_multiple_namespaces() {
366364
Assertions.assertTrue(shinyProxyClient.stopProxy(id1));
367365
Assertions.assertTrue(shinyProxyClient.stopProxy(id2));
368366

369-
Thread.sleep(1000); // Give ShinyProxy time to cleanup
370-
371367
// 9. stop the instance
372368
instance2.stop();
373369
} finally {
@@ -384,7 +380,7 @@ public void shutdown_should_cleanup_by_default() {
384380
List<ShinyProxyInstance> instances = new ArrayList<>();
385381
try {
386382
// 1. create the instance
387-
ShinyProxyInstance instance1 = new ShinyProxyInstance("1", "application-app-recovery_kubernetes_normal_shutdown.yml");
383+
ShinyProxyInstance instance1 = new ShinyProxyInstance("13", "application-app-recovery_kubernetes_normal_shutdown.yml");
388384
instances.add(instance1);
389385
Assertions.assertTrue(instance1.start());
390386

src/test/java/eu/openanalytics/containerproxy/test/helpers/ShinyProxyClient.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ public boolean stopProxy(String proxyId) {
7272
.build();
7373

7474
try (Response response = client.newCall(request).execute()) {
75+
Thread.sleep(2_000);
7576
return response.code() == 200;
7677
} catch (Exception e) {
7778
e.printStackTrace();

src/test/java/eu/openanalytics/containerproxy/test/helpers/ShinyProxyInstance.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ public ShinyProxyInstance(String id, String configFileName, int port, String ext
4444
"--server.port=" + port,
4545
"--management.server.port=" + mgmtPort,
4646
extraArgs)
47-
.redirectOutput(new File(String.format("shinyproxy_recovery_%s_stdout.log", id)))
48-
.redirectError(new File(String.format("shinyproxy_recovery_%s_stderr.log", id)));
47+
.redirectOutput(new File(String.format("shinyproxy_recovery_%s_%s_stdout.log", id, configFileName)))
48+
.redirectError(new File(String.format("shinyproxy_recovery_%s_%s_stderr.log", id, configFileName)));
4949
}
5050

5151
public ShinyProxyInstance(String id, String configFileName, String extraArgs) {
@@ -62,17 +62,23 @@ public ShinyProxyInstance(String id, String configFileName) {
6262

6363
public boolean start() throws IOException, InterruptedException {
6464
process = processBuilder.start();
65-
Thread.sleep(20000);
6665

67-
return checkAlive();
66+
for (int i = 0; i < 20; i++) {
67+
Thread.sleep(2_000);
68+
if (checkAlive()) {
69+
return true;
70+
}
71+
}
72+
73+
return false;
6874
}
6975

7076
public boolean checkAlive() {
7177
OkHttpClient client = new OkHttpClient();
7278

7379
Request request = new Request.Builder()
7480
.get()
75-
.url("http://localhost:7583/")
81+
.url("http://localhost:" + this.port)
7682
.build();
7783

7884
try (Response response = client.newCall(request).execute()) {

src/test/java/eu/openanalytics/containerproxy/test/helpers/TestExecutionListener.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,15 @@
2020
*/
2121
package eu.openanalytics.containerproxy.test.helpers;
2222

23+
import com.google.common.collect.Iterables;
24+
import org.junit.platform.engine.support.descriptor.MethodSource;
2325
import org.junit.platform.engine.TestExecutionResult;
2426
import org.junit.platform.launcher.TestIdentifier;
2527
import org.junit.platform.launcher.listeners.SummaryGeneratingListener;
2628

29+
import java.util.Arrays;
30+
import java.util.Objects;
31+
2732
public class TestExecutionListener extends SummaryGeneratingListener {
2833

2934
public TestExecutionListener() {
@@ -36,7 +41,7 @@ public void executionSkipped(TestIdentifier testIdentifier, String reason) {
3641
if (testIdentifier == null || reason == null || !testIdentifier.isTest()) return;
3742

3843
System.out.println();
39-
System.out.printf("\t\t--> Skipping test \"%s\"%n", testIdentifier.getDisplayName());
44+
System.out.printf("\t\t--> Skipping test \"%s\"%n", identifier(testIdentifier));
4045
System.out.println();
4146
}
4247

@@ -46,7 +51,7 @@ public void executionStarted(TestIdentifier testIdentifier) {
4651
if (testIdentifier == null || !testIdentifier.isTest()) return;
4752

4853
System.out.println();
49-
System.out.printf("\t\t--> Started test \"%s\"%n", testIdentifier.getDisplayName());
54+
System.out.printf("\t\t--> Started test \"%s\"%n", identifier(testIdentifier));
5055
System.out.println();
5156
}
5257

@@ -56,7 +61,20 @@ public void executionFinished(TestIdentifier testIdentifier, TestExecutionResult
5661
if (testIdentifier == null || testExecutionResult == null || !testIdentifier.isTest()) return;
5762

5863
System.out.println();
59-
System.out.printf("\t\t--> Finished test \"%s\": %s%n", testIdentifier.getDisplayName(), testExecutionResult);
64+
System.out.printf("\t\t--> Finished test \"%s\": %s%n", identifier(testIdentifier), testExecutionResult);
6065
System.out.println();
6166
}
67+
68+
private String identifier(TestIdentifier testIdentifier) {
69+
if (!testIdentifier.getSource().isPresent()) {
70+
return testIdentifier.getDisplayName();
71+
}
72+
MethodSource methodSource = (MethodSource) testIdentifier.getSource().get();
73+
String className = Iterables.getLast(Arrays.asList(methodSource.getClassName().split("\\.")));
74+
75+
if (!Objects.equals(methodSource.getMethodParameterTypes(), "")) {
76+
return String.format("%s %s %s", className, methodSource.getMethodName(), testIdentifier.getDisplayName());
77+
}
78+
return String.format("%s %s", className, methodSource.getMethodName());
79+
}
6280
}

0 commit comments

Comments
 (0)