Skip to content

Commit aea9317

Browse files
committed
Replace "jsr305" with "jakarta.annotation-api", auto-closeable CommonUtils.ExecutorService for easier resource management
1 parent d1e222a commit aea9317

File tree

7 files changed

+129
-24
lines changed

7 files changed

+129
-24
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
# Changelog
22

33
## [Unreleased]
4+
### Added
5+
- Auto-closeable `CommonUtils.ExecutorService` for easier resource management, by @HardNorth
6+
### Changed
7+
- Replace "jsr305" with "jakarta.annotation-api", by @HardNorth
8+
### Removed
9+
- Java 8-10 support, by @HardNorth
410

511
## [0.0.13]
612
### Changed

build.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,16 @@ repositories {
2323
}
2424

2525
java {
26-
sourceCompatibility = JavaVersion.VERSION_1_8
27-
targetCompatibility = JavaVersion.VERSION_1_8
26+
sourceCompatibility = JavaVersion.VERSION_11
27+
targetCompatibility = JavaVersion.VERSION_11
2828
}
2929

3030
compileTestJava.options.encoding = "UTF-8"
3131

3232
dependencies {
3333
compileOnly 'io.reactivex.rxjava2:rxjava:2.2.21'
34-
compileOnly 'com.google.code.findbugs:jsr305:3.0.2'
35-
compileOnly 'org.apache.commons:commons-lang3:3.17.0'
34+
compileOnly 'jakarta.annotation:jakarta.annotation-api:3.0.0'
35+
compileOnly 'org.apache.commons:commons-lang3:3.18.0'
3636
compileOnly 'commons-io:commons-io:2.18.0'
3737
compileOnly('org.slf4j:slf4j-api:2.0.16')
3838

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
version=0.0.14-SNAPSHOT
1+
version=0.1.0-SNAPSHOT
22
group=com.epam.reportportal
33
description=Common agent test utilites
44
junit_version=5.6.3
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-6.9.2-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.5-bin.zip
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists

src/main/java/com/epam/reportportal/util/test/CommonUtils.java

Lines changed: 106 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,30 +16,128 @@
1616
package com.epam.reportportal.util.test;
1717

1818
import io.reactivex.Maybe;
19+
import jakarta.annotation.Nonnull;
1920

21+
import java.util.Collection;
22+
import java.util.List;
2023
import java.util.UUID;
21-
import java.util.concurrent.ExecutorService;
22-
import java.util.concurrent.Executors;
23-
import java.util.concurrent.ThreadLocalRandom;
24-
import java.util.concurrent.TimeUnit;
24+
import java.util.concurrent.*;
2525

26+
@SuppressWarnings("unused")
2627
public class CommonUtils {
2728

2829
// 20 milliseconds is enough to separate one test from another
2930
public static final long MINIMAL_TEST_PAUSE = 20L;
3031

32+
public static class ExecutorService implements java.util.concurrent.ExecutorService, AutoCloseable {
33+
private final java.util.concurrent.ExecutorService delegate;
34+
35+
public ExecutorService(java.util.concurrent.ExecutorService delegate) {
36+
this.delegate = delegate;
37+
}
38+
39+
@Override
40+
public void shutdown() {
41+
delegate.shutdown();
42+
}
43+
44+
@Override
45+
@Nonnull
46+
public List<Runnable> shutdownNow() {
47+
return delegate.shutdownNow();
48+
}
49+
50+
@Override
51+
public boolean isShutdown() {
52+
return delegate.isShutdown();
53+
}
54+
55+
@Override
56+
public boolean isTerminated() {
57+
return delegate.isTerminated();
58+
}
59+
60+
@Override
61+
public boolean awaitTermination(long timeout, @Nonnull TimeUnit unit) throws InterruptedException {
62+
return delegate.awaitTermination(timeout, unit);
63+
}
64+
65+
@Override
66+
@Nonnull
67+
public <T> Future<T> submit(@Nonnull Callable<T> task) {
68+
return delegate.submit(task);
69+
}
70+
71+
@Override
72+
@Nonnull
73+
public <T> Future<T> submit(@Nonnull Runnable task, T result) {
74+
return delegate.submit(task, result);
75+
}
76+
77+
@Override
78+
@Nonnull
79+
public Future<?> submit(@Nonnull Runnable task) {
80+
return delegate.submit(task);
81+
}
82+
83+
@Override
84+
@Nonnull
85+
public <T> List<Future<T>> invokeAll(@Nonnull Collection<? extends Callable<T>> tasks) throws InterruptedException {
86+
return delegate.invokeAll(tasks);
87+
}
88+
89+
@Override
90+
@Nonnull
91+
public <T> List<Future<T>> invokeAll(@Nonnull Collection<? extends Callable<T>> tasks, long timeout, @Nonnull TimeUnit unit)
92+
throws InterruptedException {
93+
return delegate.invokeAll(tasks, timeout, unit);
94+
}
95+
96+
@Override
97+
@Nonnull
98+
public <T> T invokeAny(@Nonnull Collection<? extends Callable<T>> tasks) throws InterruptedException, ExecutionException {
99+
return delegate.invokeAny(tasks);
100+
}
101+
102+
@Override
103+
public <T> T invokeAny(@Nonnull Collection<? extends Callable<T>> tasks, long timeout, @Nonnull TimeUnit unit)
104+
throws InterruptedException, ExecutionException, TimeoutException {
105+
return delegate.invokeAny(tasks, timeout, unit);
106+
}
107+
108+
@Override
109+
public void execute(@Nonnull Runnable command) {
110+
delegate.execute(command);
111+
}
112+
113+
@Override
114+
public void close() {
115+
CommonUtils.shutdownExecutorService(delegate);
116+
}
117+
}
118+
31119
private CommonUtils() {
32120
}
33121

34122
public static ExecutorService testExecutor() {
35-
return Executors.newSingleThreadExecutor(r -> {
36-
Thread t = new Thread(r);
123+
return new ExecutorService(Executors.newSingleThreadExecutor(r -> {
124+
Thread t = Executors.defaultThreadFactory().newThread(r);
37125
t.setDaemon(true);
38126
return t;
39-
});
127+
}));
128+
}
129+
130+
public static ExecutorService testExecutor(final int threadNum) {
131+
return new ExecutorService(Executors.newFixedThreadPool(
132+
threadNum, r -> {
133+
Thread t = Executors.defaultThreadFactory().newThread(r);
134+
t.setDaemon(true);
135+
return t;
136+
}
137+
));
40138
}
41139

42-
public static void shutdownExecutorService(ExecutorService executor) {
140+
public static <T extends java.util.concurrent.ExecutorService> void shutdownExecutorService(T executor) {
43141
if (executor == null || executor.isShutdown()) {
44142
return;
45143
}

src/main/java/com/epam/reportportal/util/test/ProcessUtils.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@
1616

1717
package com.epam.reportportal.util.test;
1818

19+
import jakarta.annotation.Nonnull;
20+
import jakarta.annotation.Nullable;
1921
import org.apache.commons.io.IOUtils;
2022
import org.apache.commons.lang3.tuple.ImmutableTriple;
2123
import org.apache.commons.lang3.tuple.Triple;
2224
import org.awaitility.Awaitility;
2325
import org.awaitility.core.ConditionTimeoutException;
2426

25-
import javax.annotation.Nonnull;
26-
import javax.annotation.Nullable;
2727
import java.io.*;
2828
import java.nio.charset.StandardCharsets;
2929
import java.nio.file.FileSystems;
@@ -36,6 +36,7 @@
3636
import static org.apache.commons.lang3.StringUtils.joinWith;
3737
import static org.hamcrest.Matchers.notNullValue;
3838

39+
@SuppressWarnings("unused")
3940
public class ProcessUtils {
4041
private ProcessUtils() {
4142
}
@@ -51,8 +52,8 @@ private static String getPathToClass(@Nonnull Class<?> mainClass) {
5152
}
5253

5354
public static Process buildProcess(boolean inheritOutput, @Nonnull Class<?> mainClass,
54-
@Nullable Map<String, String> additionalEnvironmentVariables,
55-
@Nullable Map<String, String> additionSystemVariables, String... params) throws IOException {
55+
@Nullable Map<String, String> additionalEnvironmentVariables, @Nullable Map<String, String> additionSystemVariables,
56+
String... params) throws IOException {
5657
String fileSeparator = FileSystems.getDefault().getSeparator();
5758
String javaHome = System.getProperty("java.home");
5859
String executablePath = joinWith(fileSeparator, javaHome, "bin", "java");
@@ -117,10 +118,8 @@ public static void closeIos(Triple<OutputStreamWriter, BufferedReader, BufferedR
117118
public static String waitForLine(final BufferedReader reader, final BufferedReader errorReader, final Predicate<String> linePredicate)
118119
throws IOException {
119120
try {
120-
return Awaitility.await("Waiting for a line")
121-
.timeout(8, TimeUnit.SECONDS)
122-
.pollInterval(100, TimeUnit.MILLISECONDS)
123-
.until(() -> {
121+
return Awaitility.await("Waiting for a line").timeout(8, TimeUnit.SECONDS).pollInterval(100, TimeUnit.MILLISECONDS).until(
122+
() -> {
124123
if (!reader.ready()) {
125124
return null;
126125
}
@@ -131,7 +130,8 @@ public static String waitForLine(final BufferedReader reader, final BufferedRead
131130
}
132131
}
133132
return null;
134-
}, notNullValue());
133+
}, notNullValue()
134+
);
135135
} catch (ConditionTimeoutException e) {
136136
List<String> errorLines = Collections.EMPTY_LIST;
137137
if (errorReader.ready()) {

src/main/java/com/epam/reportportal/util/test/SocketUtils.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@
1616

1717
package com.epam.reportportal.util.test;
1818

19+
import jakarta.annotation.Nonnull;
1920
import org.apache.commons.io.IOUtils;
2021
import org.apache.commons.lang3.tuple.Pair;
2122
import org.slf4j.Logger;
2223
import org.slf4j.LoggerFactory;
2324

24-
import javax.annotation.Nonnull;
2525
import java.io.*;
2626
import java.net.ServerSocket;
2727
import java.net.Socket;
@@ -34,6 +34,7 @@
3434

3535
import static java.util.Optional.*;
3636

37+
@SuppressWarnings("unused")
3738
public class SocketUtils {
3839
public static final String CONTENT_LENGTH_HEADER = "Content-Length: ";
3940
public static final String WEB_DATE_FORMAT = "EEE, dd MMM yyyy HH:mm:ss z";

0 commit comments

Comments
 (0)