Skip to content

Commit 898170a

Browse files
devhawkCopilot
andauthored
DRY ManualResetEvent in tests (#40)
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent b2791ec commit 898170a

6 files changed

Lines changed: 39 additions & 75 deletions

File tree

src/test/java/dev/dbos/transact/conductor/ConductorTests.java renamed to src/test/java/dev/dbos/transact/conductor/ConductorTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,9 @@
5454
import org.slf4j.Logger;
5555
import org.slf4j.LoggerFactory;
5656

57-
public class ConductorTests {
57+
public class ConductorTest {
5858

59-
static Logger logger = LoggerFactory.getLogger(ConductorTests.class);
59+
static Logger logger = LoggerFactory.getLogger(ConductorTest.class);
6060

6161
SystemDatabase mockDB;
6262
DBOSExecutor mockExec;
@@ -236,7 +236,7 @@ public void onMessage(WebSocket conn, String message) {
236236
}
237237

238238
public void send(BaseMessage message) throws Exception {
239-
String json = ConductorTests.mapper.writeValueAsString(message);
239+
String json = ConductorTest.mapper.writeValueAsString(message);
240240
this.webSocket.send(json);
241241
}
242242
}

src/test/java/dev/dbos/transact/conductor/TestWebSocketServer.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
import org.slf4j.Logger;
1212
import org.slf4j.LoggerFactory;
1313

14+
import dev.dbos.transact.utils.ManualResetEvent;
15+
1416
class TestWebSocketServer extends WebSocketServer {
1517
public interface WebSocketTestListener {
1618
default void onStart() {

src/test/java/dev/dbos/transact/queue/ConcurrencyTestServiceImpl.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package dev.dbos.transact.queue;
22

3+
import dev.dbos.transact.utils.ManualResetEvent;
34
import dev.dbos.transact.workflow.Workflow;
45

56
import java.util.List;

src/test/java/dev/dbos/transact/queue/ManualResetEvent.java

Lines changed: 0 additions & 49 deletions
This file was deleted.

src/test/java/dev/dbos/transact/queue/QueuesTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import dev.dbos.transact.database.SystemDatabase;
1313
import dev.dbos.transact.execution.DBOSExecutor;
1414
import dev.dbos.transact.utils.DBUtils;
15+
import dev.dbos.transact.utils.ManualResetEvent;
1516
import dev.dbos.transact.workflow.WorkflowHandle;
1617
import dev.dbos.transact.workflow.WorkflowState;
1718
import dev.dbos.transact.workflow.WorkflowStatus;

src/test/java/dev/dbos/transact/conductor/ManualResetEvent.java renamed to src/test/java/dev/dbos/transact/utils/ManualResetEvent.java

Lines changed: 32 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package dev.dbos.transact.conductor;
1+
package dev.dbos.transact.utils;
22

33
import java.util.concurrent.locks.Condition;
44
import java.util.concurrent.locks.ReentrantLock;
@@ -12,51 +12,60 @@ public ManualResetEvent(boolean initialState) {
1212
this.signaled = initialState;
1313
}
1414

15-
// Wait until signaled
16-
public void waitOne() throws InterruptedException {
15+
public void set() {
1716
lock.lock();
1817
try {
19-
while (!signaled) {
20-
condition.await();
21-
}
18+
signaled = true;
19+
condition.signalAll();
2220
} finally {
2321
lock.unlock();
2422
}
2523
}
2624

27-
// Wait until signaled or timeout
28-
public boolean waitOne(long millis) throws InterruptedException {
25+
public void reset() {
2926
lock.lock();
3027
try {
31-
long nanos = millis * 1_000_000L;
32-
while (!signaled) {
33-
if (nanos <= 0L) {
34-
return false;
35-
}
36-
nanos = condition.awaitNanos(nanos);
37-
}
38-
return true;
28+
signaled = false;
3929
} finally {
4030
lock.unlock();
4131
}
4232
}
4333

44-
// Set the event (unblocks all waiters)
45-
public void set() {
34+
// Note, it's a little suspect to wrap a checked exception in an unchecked exception in the two waitOne overloads.
35+
// However, this is test code so a thrown exception should just fail the test.
36+
37+
public void waitOne() {
4638
lock.lock();
4739
try {
48-
signaled = true;
49-
condition.signalAll();
40+
while (!signaled) {
41+
try {
42+
condition.await();
43+
} catch (InterruptedException e) {
44+
Thread.currentThread().interrupt();
45+
throw new RuntimeException(e);
46+
}
47+
}
5048
} finally {
5149
lock.unlock();
5250
}
5351
}
5452

55-
// Reset the event (future waits will block)
56-
public void reset() {
53+
public boolean waitOne(long millis) {
5754
lock.lock();
5855
try {
59-
signaled = false;
56+
long nanos = millis * 1_000_000L;
57+
while (!signaled) {
58+
if (nanos <= 0L) {
59+
return false;
60+
}
61+
try {
62+
nanos = condition.awaitNanos(nanos);
63+
} catch (InterruptedException e) {
64+
Thread.currentThread().interrupt();
65+
throw new RuntimeException(e);
66+
}
67+
}
68+
return true;
6069
} finally {
6170
lock.unlock();
6271
}

0 commit comments

Comments
 (0)