|
18 | 18 |
|
19 | 19 | import static java.util.Objects.nonNull; |
20 | 20 | import static org.junit.jupiter.api.Assertions.assertEquals; |
| 21 | +import static org.junit.jupiter.api.Assertions.assertTrue; |
21 | 22 |
|
22 | 23 | import java.nio.ByteBuffer; |
23 | 24 | import java.nio.charset.StandardCharsets; |
24 | 25 | import java.util.ArrayList; |
25 | 26 | import java.util.Collections; |
26 | 27 | import java.util.List; |
| 28 | +import java.util.concurrent.CountDownLatch; |
27 | 29 |
|
28 | 30 | import org.junit.jupiter.api.Assertions; |
29 | 31 | import org.junit.jupiter.api.Test; |
30 | 32 |
|
31 | 33 | class RTCDataChannelTests extends TestBase { |
32 | 34 |
|
| 35 | + @Test |
| 36 | + void bufferedAmountChangeCallback() throws Exception { |
| 37 | + DataPeerConnection caller = new DataPeerConnection(factory); |
| 38 | + DataPeerConnection callee = new DataPeerConnection(factory); |
| 39 | + |
| 40 | + caller.setRemotePeerConnection(callee); |
| 41 | + callee.setRemotePeerConnection(caller); |
| 42 | + |
| 43 | + callee.setRemoteDescription(caller.createOffer()); |
| 44 | + caller.setRemoteDescription(callee.createAnswer()); |
| 45 | + |
| 46 | + caller.waitUntilConnected(); |
| 47 | + callee.waitUntilConnected(); |
| 48 | + |
| 49 | + // Prepare a latch-based observer to detect buffered amount change. |
| 50 | + CountDownLatch latch = new CountDownLatch(1); |
| 51 | + |
| 52 | + caller.getLocalDataChannel().registerObserver(new RTCDataChannelObserver() { |
| 53 | + @Override |
| 54 | + public void onBufferedAmountChange(long previousAmount) { |
| 55 | + latch.countDown(); |
| 56 | + } |
| 57 | + |
| 58 | + @Override |
| 59 | + public void onStateChange() { } |
| 60 | + |
| 61 | + @Override |
| 62 | + public void onMessage(RTCDataChannelBuffer buffer) { } |
| 63 | + }); |
| 64 | + |
| 65 | + // Send a large enough message to cause buffering (increase from 0). |
| 66 | + byte[] big = new byte[64 * 1024]; // 64 KB |
| 67 | + ByteBuffer data = ByteBuffer.wrap(big); |
| 68 | + RTCDataChannelBuffer buffer = new RTCDataChannelBuffer(data, true); |
| 69 | + caller.getLocalDataChannel().send(buffer); |
| 70 | + |
| 71 | + // Wait for the callback to fire to avoid flakiness. |
| 72 | + boolean signaled = latch.await(5, java.util.concurrent.TimeUnit.SECONDS); |
| 73 | + |
| 74 | + assertTrue(signaled, "onBufferedAmountChange should be called when sending data"); |
| 75 | + |
| 76 | + caller.close(); |
| 77 | + callee.close(); |
| 78 | + } |
| 79 | + |
33 | 80 | @Test |
34 | 81 | void textMessage() throws Exception { |
35 | 82 | DataPeerConnection caller = new DataPeerConnection(factory); |
@@ -98,6 +145,10 @@ public void onMessage(RTCDataChannelBuffer buffer) { |
98 | 145 | }); |
99 | 146 | } |
100 | 147 |
|
| 148 | + RTCDataChannel getLocalDataChannel() { |
| 149 | + return localDataChannel; |
| 150 | + } |
| 151 | + |
101 | 152 | List<String> getReceivedTexts() { |
102 | 153 | return receivedTexts; |
103 | 154 | } |
|
0 commit comments