Skip to content

Commit 48600d1

Browse files
authored
Merge pull request #312 from ant-media/release-1.4.0
Increase test code coverage
2 parents be41f6d + bfa6463 commit 48600d1

File tree

5 files changed

+197
-41
lines changed

5 files changed

+197
-41
lines changed

src/main/java/io/antmedia/webrtc/adaptor/RTMPAdaptor.java

Lines changed: 33 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ public class RTMPAdaptor extends Adaptor {
4848
private boolean enableAudio = false;
4949

5050
private int audioFrameCount = 0;
51+
private boolean started = false;
5152

5253
public static final String DTLS_SRTP_KEY_AGREEMENT_CONSTRAINT = "DtlsSrtpKeyAgreement";
5354

@@ -62,7 +63,7 @@ public RTMPAdaptor(FFmpegFrameRecorder recorder, WebSocketCommunityHandler webSo
6263
new MediaConstraints.KeyValuePair("OfferToReceiveVideo", "true"));
6364
}
6465

65-
public static PeerConnectionFactory createPeerConnectionFactory(){
66+
public PeerConnectionFactory createPeerConnectionFactory(){
6667
PeerConnectionFactory.Options options = new PeerConnectionFactory.Options();
6768
options.networkIgnoreMask = 0;
6869
return new PeerConnectionFactory(options);
@@ -90,6 +91,8 @@ public void start() {
9091

9192
webSocketCommunityHandler.sendStartMessage(getStreamId(), getSession());
9293

94+
started = true;
95+
9396

9497
});
9598

@@ -102,38 +105,39 @@ public void stop() {
102105
}
103106
isStopped = true;
104107

105-
signallingExecutor.execute(new Runnable() {
106-
107-
@Override
108-
public void run() {
108+
signallingExecutor.execute(() -> {
109109

110-
webSocketCommunityHandler.sendPublishFinishedMessage(getStreamId(), getSession());
110+
webSocketCommunityHandler.sendPublishFinishedMessage(getStreamId(), getSession());
111111

112112

113-
audioEncoderExecutor.shutdownNow();
114-
videoEncoderExecutor.shutdownNow();
113+
audioEncoderExecutor.shutdownNow();
114+
videoEncoderExecutor.shutdownNow();
115115

116-
try {
117-
videoEncoderExecutor.awaitTermination(10, TimeUnit.SECONDS);
118-
} catch (InterruptedException e1) {
119-
logger.error(ExceptionUtils.getStackTrace(e1));
120-
Thread.currentThread().interrupt();
121-
}
122-
try {
123-
if (peerConnection != null) {
124-
peerConnection.close();
125-
recorder.stop();
126-
peerConnection.dispose();
127-
peerConnectionFactory.dispose();
128-
peerConnection = null;
129-
}
130-
} catch (FrameRecorder.Exception e) {
131-
logger.error(ExceptionUtils.getStackTrace(e));
116+
try {
117+
videoEncoderExecutor.awaitTermination(10, TimeUnit.SECONDS);
118+
} catch (InterruptedException e1) {
119+
logger.error(ExceptionUtils.getStackTrace(e1));
120+
Thread.currentThread().interrupt();
121+
}
122+
try {
123+
if (peerConnection != null) {
124+
peerConnection.close();
125+
recorder.stop();
126+
peerConnection.dispose();
127+
peerConnectionFactory.dispose();
128+
peerConnection = null;
132129
}
130+
} catch (FrameRecorder.Exception e) {
131+
logger.error(ExceptionUtils.getStackTrace(e));
133132
}
133+
134134
});
135135
signallingExecutor.shutdown();
136136
}
137+
138+
public ExecutorService getSignallingExecutor() {
139+
return signallingExecutor;
140+
}
137141

138142

139143

@@ -290,5 +294,10 @@ public void run() {
290294
});
291295
}
292296

297+
public boolean isStarted() {
298+
return started;
299+
}
300+
301+
293302

294303
}
Lines changed: 95 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package io.antmedia.test.webrtc.adaptor;
22

3+
import org.awaitility.Awaitility;
34
import org.junit.Before;
45
import org.junit.Test;
56
import org.red5.net.websocket.WebSocketConnection;
67
import org.springframework.context.ApplicationContext;
78
import org.webrtc.MediaStream;
9+
import org.webrtc.PeerConnectionFactory;
810

911
import io.antmedia.recorder.FFmpegFrameRecorder;
1012
import io.antmedia.webrtc.adaptor.RTMPAdaptor;
@@ -14,50 +16,126 @@
1416
import static org.junit.Assert.fail;
1517
import static org.mockito.Mockito.*;
1618

19+
import java.util.concurrent.TimeUnit;
20+
1721
import javax.websocket.Session;
1822

1923
public class RTMPAdaptorTest {
20-
24+
2125
@Before
2226
public void setup() {
23-
27+
2428
}
25-
29+
2630

2731
@Test
28-
public void testGetFileFormat() {
32+
public void testOnAddStream() {
33+
34+
FFmpegFrameRecorder recorder = mock(FFmpegFrameRecorder.class);
35+
36+
WebSocketCommunityHandler webSocketHandlerReal = new WebSocketCommunityHandler() {
37+
38+
@Override
39+
public ApplicationContext getAppContext() {
40+
return null;
41+
}
42+
};
2943

44+
WebSocketCommunityHandler webSocketHandler = spy(webSocketHandlerReal);
45+
46+
RTMPAdaptor adaptorReal = new RTMPAdaptor(recorder, webSocketHandler);
47+
RTMPAdaptor rtmpAdaptor = spy(adaptorReal);
48+
49+
String streamId = "stramId" + (int)(Math.random()*10000);
50+
rtmpAdaptor.setStreamId(streamId);
51+
Session session = mock(Session.class);
52+
rtmpAdaptor.setSession(session);
3053

31-
FFmpegFrameRecorder recorder = WebSocketCommunityHandler.initRecorder("rtmp://test");
54+
MediaStream stream = mock(MediaStream.class);
55+
rtmpAdaptor.onAddStream(stream);
56+
57+
verify(webSocketHandler).sendPublishStartedMessage(streamId, session);
58+
}
59+
60+
@Test
61+
public void testStartandStop() {
62+
63+
FFmpegFrameRecorder recorder = mock(FFmpegFrameRecorder.class);
64+
65+
WebSocketCommunityHandler webSocketHandlerReal = new WebSocketCommunityHandler() {
66+
67+
@Override
68+
public ApplicationContext getAppContext() {
69+
return null;
70+
}
71+
};
72+
73+
WebSocketCommunityHandler webSocketHandler = spy(webSocketHandlerReal);
74+
75+
RTMPAdaptor adaptorReal = new RTMPAdaptor(recorder, webSocketHandler);
76+
RTMPAdaptor rtmpAdaptor = spy(adaptorReal);
77+
78+
String streamId = "stramId" + (int)(Math.random()*10000);
79+
rtmpAdaptor.setStreamId(streamId);
80+
Session session = mock(Session.class);
81+
rtmpAdaptor.setSession(session);
82+
83+
doReturn(mock(PeerConnectionFactory.class)).when(rtmpAdaptor).createPeerConnectionFactory();
84+
85+
rtmpAdaptor.start();
86+
87+
Awaitility.await().atMost(5, TimeUnit.SECONDS).until(() ->
88+
rtmpAdaptor.isStarted()
89+
);
90+
91+
verify(webSocketHandler).sendStartMessage(streamId, session);
92+
93+
94+
rtmpAdaptor.stop();
95+
96+
Awaitility.await().atMost(5, TimeUnit.SECONDS).until(() ->
97+
rtmpAdaptor.getSignallingExecutor().isShutdown()
98+
);
3299

100+
verify(webSocketHandler).sendPublishFinishedMessage(streamId, session);
101+
102+
}
103+
104+
105+
@Test
106+
public void testGetFileFormat() {
107+
108+
109+
FFmpegFrameRecorder recorder = WebSocketCommunityHandler.initRecorder("rtmp://test");
110+
33111
assertEquals("flv", recorder.getFormat());
34112
}
35-
113+
36114
@Test
37115
public void testNoAudioNoVideoInStream() {
38-
116+
39117
try {
40-
118+
41119
WebSocketCommunityHandler handler = mock(WebSocketCommunityHandler.class);
42-
120+
43121
RTMPAdaptor rtmpAdaptor = new RTMPAdaptor(null, handler);
44-
122+
45123
MediaStream stream = mock(MediaStream.class);
46-
124+
47125
Session session = mock(Session.class);
48-
126+
49127
rtmpAdaptor.setSession(session);
50-
128+
51129
rtmpAdaptor.onAddStream(stream);
52-
53-
130+
131+
54132
}
55133
catch (Exception e) {
56134
e.printStackTrace();
57135
fail(e.getMessage());
58-
136+
59137
}
60-
138+
61139
}
62140

63141
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package io.antmedia.test.webrtc.adaptor;
2+
3+
import static org.junit.Assert.assertEquals;
4+
5+
import org.junit.Test;
6+
7+
import io.antmedia.rest.WebRTCClientStats;
8+
9+
public class WebRTCClientStatsTest {
10+
11+
@Test
12+
public void testStatsClass() {
13+
int measuredBitrate = (int)(Math.random() * 999999);
14+
int sendBitrate = (int)(Math.random() * 999999);
15+
double videoFrameSendPeriod = (Math.random() * 9999);
16+
double audioFrameSendPeriod = (Math.random() * 999999);
17+
double videoThreadCheckInterval = (Math.random() * 9999);
18+
double audioThreadCheckInterval = (Math.random() * 9999);
19+
WebRTCClientStats clientStats = new WebRTCClientStats(measuredBitrate, sendBitrate, videoFrameSendPeriod, audioFrameSendPeriod, videoThreadCheckInterval, audioThreadCheckInterval);
20+
21+
assertEquals(measuredBitrate, clientStats.getMeasuredBitrate());
22+
assertEquals(sendBitrate, clientStats.getSendBitrate());
23+
assertEquals(videoFrameSendPeriod, clientStats.getVideoFrameSendPeriod(), 0.02);
24+
assertEquals(audioFrameSendPeriod, clientStats.getAudioFrameSendPeriod(), 0.02);
25+
assertEquals(videoThreadCheckInterval, clientStats.getVideoThreadCheckInterval(), 0.02);
26+
assertEquals(audioThreadCheckInterval, clientStats.getAudioThreadCheckInterval(), 0.02);
27+
28+
}
29+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package io.antmedia.test.webrtc.adaptor;
2+
3+
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.fail;
5+
6+
import java.io.UnsupportedEncodingException;
7+
8+
import org.junit.Test;
9+
import org.mockito.Mockito;
10+
import org.red5.net.websocket.WebSocketConnection;
11+
12+
import io.antmedia.webrtc.WebSocketClientConnection;
13+
14+
public class WebSocketClientConnectionTest {
15+
16+
17+
@Test
18+
public void testWebSocketClientConnection() {
19+
WebSocketConnection wsConnection = Mockito.mock(WebSocketConnection.class);
20+
21+
long value = (int)(Math.random() * 1000);
22+
23+
Mockito.when(wsConnection.getId()).thenReturn(value);
24+
25+
WebSocketClientConnection connection = new WebSocketClientConnection(wsConnection);
26+
27+
String data = "any data";
28+
connection.send(data);
29+
30+
try {
31+
Mockito.verify(wsConnection).send(data);
32+
} catch (UnsupportedEncodingException e) {
33+
e.printStackTrace();
34+
fail(e.getMessage());
35+
}
36+
37+
assertEquals(String.valueOf(value), connection.getId());
38+
}
39+
}

src/test/java/io/antmedia/test/webrtc/adaptor/WebSocketCommunityHandlerTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,4 +191,5 @@ public void testPublishAndStopCommand() {
191191

192192
verify(rtmpAdaptor).stop();
193193
}
194+
194195
}

0 commit comments

Comments
 (0)