Skip to content

Commit a5cdb18

Browse files
authored
fix: RTCDtmfSenderTests timeouts
1 parent 814c877 commit a5cdb18

File tree

1 file changed

+37
-10
lines changed

1 file changed

+37
-10
lines changed

webrtc/src/test/java/dev/onvoid/webrtc/RTCDtmfSenderTests.java

Lines changed: 37 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.Arrays;
2323
import java.util.List;
2424
import java.util.concurrent.CountDownLatch;
25+
import java.util.concurrent.TimeUnit;
2526

2627
import dev.onvoid.webrtc.media.audio.AudioOptions;
2728
import dev.onvoid.webrtc.media.audio.AudioTrack;
@@ -67,6 +68,10 @@ List<String> getToneBuffers() {
6768
void waitUntilCompleted() throws InterruptedException {
6869
completedLatch.await();
6970
}
71+
72+
boolean awaitCompletion() throws InterruptedException {
73+
return completedLatch.await(1, TimeUnit.SECONDS);
74+
}
7075
}
7176

7277
TestPeerConnection caller;
@@ -124,28 +129,29 @@ void insertDtmf() {
124129
}
125130

126131
@Test
127-
void getTones() {
128-
dtmfSender.insertDtmf("123", 100, 70);
129-
assertEquals("123", dtmfSender.tones());
132+
void getTones() throws InterruptedException {
133+
insertTones(Arrays.asList("1", "2", "3"), 100, 70);
130134
}
131135

132136
@Test
133-
void getDuration() {
137+
void getDuration() throws InterruptedException {
134138
assertEquals(100, dtmfSender.duration()); // Default value
135139

136-
assertTrue(dtmfSender.insertDtmf("123", 120, 70));
140+
insertTones(Arrays.asList("1", "2", "3"), 120, 70);
137141
assertEquals(120, dtmfSender.duration());
138-
assertTrue(dtmfSender.insertDtmf("456", 170, 70));
142+
143+
insertTones(Arrays.asList("4", "5", "6"), 170, 70);
139144
assertEquals(170, dtmfSender.duration());
140145
}
141146

142147
@Test
143-
void getInterToneGap() {
148+
void getInterToneGap() throws InterruptedException {
144149
assertEquals(50, dtmfSender.interToneGap()); // Default value
145150

146-
assertTrue(dtmfSender.insertDtmf("123", 100, 70));
151+
insertTones(Arrays.asList("1", "2", "3"), 100, 70);
147152
assertEquals(70, dtmfSender.interToneGap());
148-
assertTrue(dtmfSender.insertDtmf("456", 100, 60));
153+
154+
insertTones(Arrays.asList("4", "5", "6"), 100, 60);
149155
assertEquals(60, dtmfSender.interToneGap());
150156
}
151157

@@ -167,4 +173,25 @@ void registerAndUnregisterObserver() throws InterruptedException {
167173

168174
assertEquals(Arrays.asList("1", "2", "3", null), observer.getTones()); // No new events
169175
}
170-
}
176+
177+
private void insertTones(List<String> tones, int duration, int interToneGap) throws InterruptedException {
178+
TestDtmfSenderObserver observer = new TestDtmfSenderObserver();
179+
180+
dtmfSender.registerObserver(observer);
181+
assertTrue(dtmfSender.insertDtmf(String.join("", tones), duration, interToneGap));
182+
183+
// Wait until the DTMF sequence completes (observer receives null/empty tone).
184+
assertTrue(observer.awaitCompletion(),
185+
"Timed out waiting for DTMF sequence to complete");
186+
187+
// All tones should have been delivered to the observer in order, followed by null.
188+
List<String> expectedTones = new ArrayList<>(tones);
189+
expectedTones.add(null);
190+
assertEquals(expectedTones, observer.getTones());
191+
192+
// After completion, the internal tone buffer should be empty.
193+
assertNull(dtmfSender.tones());
194+
195+
dtmfSender.unregisterObserver();
196+
}
197+
}

0 commit comments

Comments
 (0)