From 8738829f309f9f8e9984edd525c25406fcaacba2 Mon Sep 17 00:00:00 2001 From: mekya Date: Thu, 2 Aug 2018 03:06:00 +0300 Subject: [PATCH] Increase test code coverage --- .../antmedia/webrtc/adaptor/RTMPAdaptor.java | 57 +++++---- .../test/webrtc/adaptor/RTMPAdaptorTest.java | 112 +++++++++++++++--- .../webrtc/adaptor/WebRTCClientStatsTest.java | 29 +++++ .../WebSocketClientConnectionTest.java | 39 ++++++ .../WebSocketCommunityHandlerTest.java | 1 + 5 files changed, 197 insertions(+), 41 deletions(-) create mode 100644 src/test/java/io/antmedia/test/webrtc/adaptor/WebRTCClientStatsTest.java create mode 100644 src/test/java/io/antmedia/test/webrtc/adaptor/WebSocketClientConnectionTest.java diff --git a/src/main/java/io/antmedia/webrtc/adaptor/RTMPAdaptor.java b/src/main/java/io/antmedia/webrtc/adaptor/RTMPAdaptor.java index a332988e6..0fb94f544 100644 --- a/src/main/java/io/antmedia/webrtc/adaptor/RTMPAdaptor.java +++ b/src/main/java/io/antmedia/webrtc/adaptor/RTMPAdaptor.java @@ -48,6 +48,7 @@ public class RTMPAdaptor extends Adaptor { private boolean enableAudio = false; private int audioFrameCount = 0; + private boolean started = false; public static final String DTLS_SRTP_KEY_AGREEMENT_CONSTRAINT = "DtlsSrtpKeyAgreement"; @@ -62,7 +63,7 @@ public RTMPAdaptor(FFmpegFrameRecorder recorder, WebSocketCommunityHandler webSo new MediaConstraints.KeyValuePair("OfferToReceiveVideo", "true")); } - public static PeerConnectionFactory createPeerConnectionFactory(){ + public PeerConnectionFactory createPeerConnectionFactory(){ PeerConnectionFactory.Options options = new PeerConnectionFactory.Options(); options.networkIgnoreMask = 0; return new PeerConnectionFactory(options); @@ -90,6 +91,8 @@ public void start() { webSocketCommunityHandler.sendStartMessage(getStreamId(), getSession()); + started = true; + }); @@ -102,38 +105,39 @@ public void stop() { } isStopped = true; - signallingExecutor.execute(new Runnable() { - - @Override - public void run() { + signallingExecutor.execute(() -> { - webSocketCommunityHandler.sendPublishFinishedMessage(getStreamId(), getSession()); + webSocketCommunityHandler.sendPublishFinishedMessage(getStreamId(), getSession()); - audioEncoderExecutor.shutdownNow(); - videoEncoderExecutor.shutdownNow(); + audioEncoderExecutor.shutdownNow(); + videoEncoderExecutor.shutdownNow(); - try { - videoEncoderExecutor.awaitTermination(10, TimeUnit.SECONDS); - } catch (InterruptedException e1) { - logger.error(ExceptionUtils.getStackTrace(e1)); - Thread.currentThread().interrupt(); - } - try { - if (peerConnection != null) { - peerConnection.close(); - recorder.stop(); - peerConnection.dispose(); - peerConnectionFactory.dispose(); - peerConnection = null; - } - } catch (FrameRecorder.Exception e) { - logger.error(ExceptionUtils.getStackTrace(e)); + try { + videoEncoderExecutor.awaitTermination(10, TimeUnit.SECONDS); + } catch (InterruptedException e1) { + logger.error(ExceptionUtils.getStackTrace(e1)); + Thread.currentThread().interrupt(); + } + try { + if (peerConnection != null) { + peerConnection.close(); + recorder.stop(); + peerConnection.dispose(); + peerConnectionFactory.dispose(); + peerConnection = null; } + } catch (FrameRecorder.Exception e) { + logger.error(ExceptionUtils.getStackTrace(e)); } + }); signallingExecutor.shutdown(); } + + public ExecutorService getSignallingExecutor() { + return signallingExecutor; + } @@ -290,5 +294,10 @@ public void run() { }); } + public boolean isStarted() { + return started; + } + + } diff --git a/src/test/java/io/antmedia/test/webrtc/adaptor/RTMPAdaptorTest.java b/src/test/java/io/antmedia/test/webrtc/adaptor/RTMPAdaptorTest.java index ebcf64179..e272d7144 100644 --- a/src/test/java/io/antmedia/test/webrtc/adaptor/RTMPAdaptorTest.java +++ b/src/test/java/io/antmedia/test/webrtc/adaptor/RTMPAdaptorTest.java @@ -1,10 +1,12 @@ package io.antmedia.test.webrtc.adaptor; +import org.awaitility.Awaitility; import org.junit.Before; import org.junit.Test; import org.red5.net.websocket.WebSocketConnection; import org.springframework.context.ApplicationContext; import org.webrtc.MediaStream; +import org.webrtc.PeerConnectionFactory; import io.antmedia.recorder.FFmpegFrameRecorder; import io.antmedia.webrtc.adaptor.RTMPAdaptor; @@ -14,50 +16,126 @@ import static org.junit.Assert.fail; import static org.mockito.Mockito.*; +import java.util.concurrent.TimeUnit; + import javax.websocket.Session; public class RTMPAdaptorTest { - + @Before public void setup() { - + } - + @Test - public void testGetFileFormat() { + public void testOnAddStream() { + + FFmpegFrameRecorder recorder = mock(FFmpegFrameRecorder.class); + + WebSocketCommunityHandler webSocketHandlerReal = new WebSocketCommunityHandler() { + + @Override + public ApplicationContext getAppContext() { + return null; + } + }; + WebSocketCommunityHandler webSocketHandler = spy(webSocketHandlerReal); + + RTMPAdaptor adaptorReal = new RTMPAdaptor(recorder, webSocketHandler); + RTMPAdaptor rtmpAdaptor = spy(adaptorReal); + + String streamId = "stramId" + (int)(Math.random()*10000); + rtmpAdaptor.setStreamId(streamId); + Session session = mock(Session.class); + rtmpAdaptor.setSession(session); - FFmpegFrameRecorder recorder = WebSocketCommunityHandler.initRecorder("rtmp://test"); + MediaStream stream = mock(MediaStream.class); + rtmpAdaptor.onAddStream(stream); + + verify(webSocketHandler).sendPublishStartedMessage(streamId, session); + } + + @Test + public void testStartandStop() { + + FFmpegFrameRecorder recorder = mock(FFmpegFrameRecorder.class); + + WebSocketCommunityHandler webSocketHandlerReal = new WebSocketCommunityHandler() { + + @Override + public ApplicationContext getAppContext() { + return null; + } + }; + + WebSocketCommunityHandler webSocketHandler = spy(webSocketHandlerReal); + + RTMPAdaptor adaptorReal = new RTMPAdaptor(recorder, webSocketHandler); + RTMPAdaptor rtmpAdaptor = spy(adaptorReal); + + String streamId = "stramId" + (int)(Math.random()*10000); + rtmpAdaptor.setStreamId(streamId); + Session session = mock(Session.class); + rtmpAdaptor.setSession(session); + + doReturn(mock(PeerConnectionFactory.class)).when(rtmpAdaptor).createPeerConnectionFactory(); + + rtmpAdaptor.start(); + + Awaitility.await().atMost(5, TimeUnit.SECONDS).until(() -> + rtmpAdaptor.isStarted() + ); + + verify(webSocketHandler).sendStartMessage(streamId, session); + + + rtmpAdaptor.stop(); + + Awaitility.await().atMost(5, TimeUnit.SECONDS).until(() -> + rtmpAdaptor.getSignallingExecutor().isShutdown() + ); + verify(webSocketHandler).sendPublishFinishedMessage(streamId, session); + + } + + + @Test + public void testGetFileFormat() { + + + FFmpegFrameRecorder recorder = WebSocketCommunityHandler.initRecorder("rtmp://test"); + assertEquals("flv", recorder.getFormat()); } - + @Test public void testNoAudioNoVideoInStream() { - + try { - + WebSocketCommunityHandler handler = mock(WebSocketCommunityHandler.class); - + RTMPAdaptor rtmpAdaptor = new RTMPAdaptor(null, handler); - + MediaStream stream = mock(MediaStream.class); - + Session session = mock(Session.class); - + rtmpAdaptor.setSession(session); - + rtmpAdaptor.onAddStream(stream); - - + + } catch (Exception e) { e.printStackTrace(); fail(e.getMessage()); - + } - + } } diff --git a/src/test/java/io/antmedia/test/webrtc/adaptor/WebRTCClientStatsTest.java b/src/test/java/io/antmedia/test/webrtc/adaptor/WebRTCClientStatsTest.java new file mode 100644 index 000000000..af4f3d7d1 --- /dev/null +++ b/src/test/java/io/antmedia/test/webrtc/adaptor/WebRTCClientStatsTest.java @@ -0,0 +1,29 @@ +package io.antmedia.test.webrtc.adaptor; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +import io.antmedia.rest.WebRTCClientStats; + +public class WebRTCClientStatsTest { + + @Test + public void testStatsClass() { + int measuredBitrate = (int)(Math.random() * 999999); + int sendBitrate = (int)(Math.random() * 999999); + double videoFrameSendPeriod = (Math.random() * 9999); + double audioFrameSendPeriod = (Math.random() * 999999); + double videoThreadCheckInterval = (Math.random() * 9999); + double audioThreadCheckInterval = (Math.random() * 9999); + WebRTCClientStats clientStats = new WebRTCClientStats(measuredBitrate, sendBitrate, videoFrameSendPeriod, audioFrameSendPeriod, videoThreadCheckInterval, audioThreadCheckInterval); + + assertEquals(measuredBitrate, clientStats.getMeasuredBitrate()); + assertEquals(sendBitrate, clientStats.getSendBitrate()); + assertEquals(videoFrameSendPeriod, clientStats.getVideoFrameSendPeriod(), 0.02); + assertEquals(audioFrameSendPeriod, clientStats.getAudioFrameSendPeriod(), 0.02); + assertEquals(videoThreadCheckInterval, clientStats.getVideoThreadCheckInterval(), 0.02); + assertEquals(audioThreadCheckInterval, clientStats.getAudioThreadCheckInterval(), 0.02); + + } +} diff --git a/src/test/java/io/antmedia/test/webrtc/adaptor/WebSocketClientConnectionTest.java b/src/test/java/io/antmedia/test/webrtc/adaptor/WebSocketClientConnectionTest.java new file mode 100644 index 000000000..9edef8df9 --- /dev/null +++ b/src/test/java/io/antmedia/test/webrtc/adaptor/WebSocketClientConnectionTest.java @@ -0,0 +1,39 @@ +package io.antmedia.test.webrtc.adaptor; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +import java.io.UnsupportedEncodingException; + +import org.junit.Test; +import org.mockito.Mockito; +import org.red5.net.websocket.WebSocketConnection; + +import io.antmedia.webrtc.WebSocketClientConnection; + +public class WebSocketClientConnectionTest { + + + @Test + public void testWebSocketClientConnection() { + WebSocketConnection wsConnection = Mockito.mock(WebSocketConnection.class); + + long value = (int)(Math.random() * 1000); + + Mockito.when(wsConnection.getId()).thenReturn(value); + + WebSocketClientConnection connection = new WebSocketClientConnection(wsConnection); + + String data = "any data"; + connection.send(data); + + try { + Mockito.verify(wsConnection).send(data); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + + assertEquals(String.valueOf(value), connection.getId()); + } +} diff --git a/src/test/java/io/antmedia/test/webrtc/adaptor/WebSocketCommunityHandlerTest.java b/src/test/java/io/antmedia/test/webrtc/adaptor/WebSocketCommunityHandlerTest.java index a164d60b6..ceb13a2bd 100644 --- a/src/test/java/io/antmedia/test/webrtc/adaptor/WebSocketCommunityHandlerTest.java +++ b/src/test/java/io/antmedia/test/webrtc/adaptor/WebSocketCommunityHandlerTest.java @@ -191,4 +191,5 @@ public void testPublishAndStopCommand() { verify(rtmpAdaptor).stop(); } + }