/**
* Copyright 2014 Comcast Cable Communications Management, LLC
*
* This file is part of CATS.
*
* CATS is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* CATS is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with CATS. If not, see <http://www.gnu.org/licenses/>.
*/
package com.comcast.cats.provider;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.powermock.api.easymock.PowerMock.mockStatic;
import static org.powermock.api.easymock.PowerMock.replay;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.easymock.EasyMock;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import com.comcast.cats.info.VideoRecorderResponse;
import com.comcast.cats.info.VideoRecorderServiceConstants;
import com.comcast.cats.info.VideoRecorderState;
import com.comcast.cats.provider.exceptions.VideoRecorderException;
import com.comcast.cats.recorder.domain.MediaMetaData;
import com.comcast.cats.recorder.domain.Recording;
import com.comcast.cats.recorder.domain.RecordingStatus;
import com.comcast.cats.service.WebServiceReturnEnum;
import com.comcast.cats.service.util.HttpClientUtil;
/**
* Unit tests for {@link VideoRecorderRESTProviderImpl}.
*
* @author sajayjk
*
*/
@PrepareForTest( HttpClientUtil.class )
@RunWith( PowerMockRunner.class )
public class VideoRecorderRESTProviderImplTest
{
VideoRecorderRESTProviderImpl recorderProvider;
String macID = "XX:XX:XX:XX:XX:XX";
String videoHostIp = "xxx";
Integer videoPort = 1;
String serverHost = "xxx";
String aliasName = "unitTest";
Integer duration = 1;
VideoRecorderResponse failureResponse;
VideoRecorderResponse successResponseFailedRecordingResponse;
VideoRecorderResponse successResponse;
Recording recording;
Recording failedRecording;
String recordingURL = "http://localhost/video-storage/xxx";
String expectedRecordingURL = "http://" + serverHost + "/video-storage/xxx";
@Before
public void setUp()
{
recorderProvider = new VideoRecorderRESTProviderImpl( videoHostIp, videoPort, serverHost, macID );
recording = new Recording();
RecordingStatus successStatus = new RecordingStatus();
successStatus.setMessage( "Sucess" );
successStatus.setState( VideoRecorderState.RECORDING.name() );
recording.setRecordingStatus( successStatus );
MediaMetaData media = new MediaMetaData();
media.setHttpPath( recordingURL );
List< MediaMetaData > medias = new ArrayList< MediaMetaData >();
medias.add( media );
recording.setMediaInfoEntityList( medias );
failedRecording = new Recording();
RecordingStatus failedStatus = new RecordingStatus();
failedStatus.setState( VideoRecorderState.ERROR.name() );
failedRecording.setRecordingStatus( failedStatus );
failureResponse = new VideoRecorderResponse();
failureResponse.setResult( WebServiceReturnEnum.FAILURE );
failureResponse.setMessage( "Failed from server" );
failureResponse.setRecording( null );
failureResponse.setRecordingList( null );
successResponseFailedRecordingResponse = new VideoRecorderResponse();
successResponseFailedRecordingResponse.setResult( WebServiceReturnEnum.SUCCESS );
successResponseFailedRecordingResponse.setMessage( "Recording Started" );
successResponseFailedRecordingResponse.setRecording( failedRecording );
successResponseFailedRecordingResponse.setRecordingList( null );
successResponse = new VideoRecorderResponse();
successResponse.setResult( WebServiceReturnEnum.SUCCESS );
successResponse.setMessage( "Recording Started" );
successResponse.setRecording( recording );
}
@After
public void tearDown()
{
recorderProvider = null;
}
@Test
public void startVideoRecordingNullTest() throws VideoRecorderException
{
mockStatic( HttpClientUtil.class );
try
{
EasyMock.expect(
HttpClientUtil.postForObject( getRequestUri( VideoRecorderServiceConstants.REST_REQUEST_SUBMIT ),
getParamMap( macID, videoHostIp, videoPort ) ) ).andReturn( successResponse );
replay( HttpClientUtil.class );
assertTrue( recorderProvider.startVideoRecording( null ) );
}
catch ( Exception e )
{
fail();
}
}
@Test
public void startVideoRecordingEmptyStringTest() throws VideoRecorderException
{
mockStatic( HttpClientUtil.class );
try
{
EasyMock.expect(
HttpClientUtil.postForObject( getRequestUri( VideoRecorderServiceConstants.REST_REQUEST_SUBMIT ),
getParamMap( macID, videoHostIp, videoPort, "" ) ) ).andReturn( successResponse );
replay( HttpClientUtil.class );
assertTrue( recorderProvider.startVideoRecording( "" ) );
}
catch ( Exception e )
{
fail();
}
}
@Test( expected = VideoRecorderException.class )
public void startVideoRecordingUnconfiguredTest() throws VideoRecorderException
{
recorderProvider = new VideoRecorderRESTProviderImpl( null, 0, null, null );
recorderProvider.startVideoRecording( aliasName );
}
@Test( expected = VideoRecorderException.class )
public void startVideoRecordingUnconfigured1Test() throws VideoRecorderException
{
recorderProvider = new VideoRecorderRESTProviderImpl( "", videoPort, serverHost, macID );
recorderProvider.startVideoRecording( aliasName );
}
@Test( expected = VideoRecorderException.class )
public void startVideoRecordingUnconfigured2Test() throws VideoRecorderException
{
recorderProvider = new VideoRecorderRESTProviderImpl( videoHostIp, videoPort, "", macID );
recorderProvider.startVideoRecording( aliasName );
}
@Test( expected = VideoRecorderException.class )
public void startVideoRecordingUnconfigured3Test() throws VideoRecorderException
{
recorderProvider = new VideoRecorderRESTProviderImpl( videoHostIp, -1, serverHost, macID );
recorderProvider.startVideoRecording( aliasName );
}
@Test( expected = VideoRecorderException.class )
public void startVideoRecordingUnconfigured4Test() throws VideoRecorderException
{
recorderProvider = new VideoRecorderRESTProviderImpl( videoHostIp, videoPort, serverHost, "" );
recorderProvider.startVideoRecording( aliasName );
}
@Test
public void startVideoRecordingServerReturnNullTest() throws VideoRecorderException
{
mockStatic( HttpClientUtil.class );
try
{
EasyMock.expect(
HttpClientUtil.postForObject( getRequestUri( VideoRecorderServiceConstants.REST_REQUEST_SUBMIT ),
getParamMap( macID, videoHostIp, videoPort, aliasName ) ) ).andReturn( null );
replay( HttpClientUtil.class );
assertFalse( recorderProvider.startVideoRecording( aliasName ) );
}
catch ( Exception e )
{
fail();
}
}
@Test
public void startVideoRecordingServerReturnFailureTest() throws VideoRecorderException
{
mockStatic( HttpClientUtil.class );
try
{
EasyMock.expect(
HttpClientUtil.postForObject( getRequestUri( VideoRecorderServiceConstants.REST_REQUEST_SUBMIT ),
getParamMap( macID, videoHostIp, videoPort, aliasName ) ) ).andReturn( failureResponse );
replay( HttpClientUtil.class );
assertFalse( recorderProvider.startVideoRecording( aliasName ) );
}
catch ( Exception e )
{
fail();
}
}
@Test
public void startVideoRecordingNoRecordingTest() throws VideoRecorderException
{
mockStatic( HttpClientUtil.class );
try
{
EasyMock.expect(
HttpClientUtil.postForObject( getRequestUri( VideoRecorderServiceConstants.REST_REQUEST_SUBMIT ),
getParamMap( macID, videoHostIp, videoPort, aliasName ) ) ).andReturn(
successResponseFailedRecordingResponse );
replay( HttpClientUtil.class );
assertFalse( recorderProvider.startVideoRecording( aliasName ) );
}
catch ( Exception e )
{
fail();
}
}
@Test
public void startVideoRecordingSuccessTest() throws VideoRecorderException
{
mockStatic( HttpClientUtil.class );
try
{
EasyMock.expect(
HttpClientUtil.postForObject( getRequestUri( VideoRecorderServiceConstants.REST_REQUEST_SUBMIT ),
getParamMap( macID, videoHostIp, videoPort, aliasName ) ) ).andReturn( successResponse );
replay( HttpClientUtil.class );
assertTrue( recorderProvider.startVideoRecording( aliasName ) );
}
catch ( Exception e )
{
fail();
}
}
@Test
public void startVideoRecordingNoInputServerReturnNullTest() throws VideoRecorderException
{
mockStatic( HttpClientUtil.class );
try
{
EasyMock.expect(
HttpClientUtil.postForObject( getRequestUri( VideoRecorderServiceConstants.REST_REQUEST_SUBMIT ),
getParamMap( macID, videoHostIp, videoPort ) ) ).andReturn( null );
replay( HttpClientUtil.class );
assertFalse( recorderProvider.startVideoRecording() );
}
catch ( Exception e )
{
fail();
}
}
@Test
public void startVideoRecordingNoInputServerReturnFailureTest() throws VideoRecorderException
{
mockStatic( HttpClientUtil.class );
try
{
EasyMock.expect(
HttpClientUtil.postForObject( getRequestUri( VideoRecorderServiceConstants.REST_REQUEST_SUBMIT ),
getParamMap( macID, videoHostIp, videoPort ) ) ).andReturn( failureResponse );
replay( HttpClientUtil.class );
assertFalse( recorderProvider.startVideoRecording() );
}
catch ( Exception e )
{
fail();
}
}
@Test
public void startVideoRecordingNoInputNoRecordingTest() throws VideoRecorderException
{
mockStatic( HttpClientUtil.class );
try
{
EasyMock.expect(
HttpClientUtil.postForObject( getRequestUri( VideoRecorderServiceConstants.REST_REQUEST_SUBMIT ),
getParamMap( macID, videoHostIp, videoPort ) ) ).andReturn(
successResponseFailedRecordingResponse );
replay( HttpClientUtil.class );
assertFalse( recorderProvider.startVideoRecording() );
}
catch ( Exception e )
{
fail();
}
}
@Test
public void startVideoRecordingNoInputSuccessTest() throws VideoRecorderException
{
mockStatic( HttpClientUtil.class );
try
{
EasyMock.expect(
HttpClientUtil.postForObject( getRequestUri( VideoRecorderServiceConstants.REST_REQUEST_SUBMIT ),
getParamMap( macID, videoHostIp, videoPort ) ) ).andReturn( successResponse );
replay( HttpClientUtil.class );
assertTrue( recorderProvider.startVideoRecording() );
}
catch ( Exception e )
{
fail();
}
}
@Test( expected = VideoRecorderException.class )
public void stopVideoRecordingUnconfiguredTest() throws VideoRecorderException
{
recorderProvider = new VideoRecorderRESTProviderImpl( null, 0, null, null );
recorderProvider.stopVideoRecording();
}
@Test( expected = VideoRecorderException.class )
public void stopVideoRecordingUnconfigured1Test() throws VideoRecorderException
{
recorderProvider = new VideoRecorderRESTProviderImpl( "", videoPort, serverHost, macID );
recorderProvider.stopVideoRecording();
}
@Test( expected = VideoRecorderException.class )
public void stopVideoRecordingUnconfigured2Test() throws VideoRecorderException
{
recorderProvider = new VideoRecorderRESTProviderImpl( videoHostIp, videoPort, "", macID );
recorderProvider.stopVideoRecording();
}
@Test( expected = VideoRecorderException.class )
public void stopVideoRecordingUnconfigured3Test() throws VideoRecorderException
{
recorderProvider = new VideoRecorderRESTProviderImpl( videoHostIp, -1, serverHost, macID );
recorderProvider.stopVideoRecording();
}
@Test( expected = VideoRecorderException.class )
public void stopVideoRecordingUnconfigured4Test() throws VideoRecorderException
{
recorderProvider = new VideoRecorderRESTProviderImpl( videoHostIp, videoPort, serverHost, null );
recorderProvider.stopVideoRecording();
}
@Test( expected = VideoRecorderException.class )
public void stopVideoRecordingUnconfigured5Test() throws VideoRecorderException
{
recorderProvider = new VideoRecorderRESTProviderImpl( videoHostIp, videoPort, serverHost, "" );
recorderProvider.stopVideoRecording();
}
@Test
public void stopVideoRecordingServerReturnNullTest() throws VideoRecorderException
{
mockStatic( HttpClientUtil.class );
try
{
EasyMock.expect(
HttpClientUtil.postForObject( getRequestUri( VideoRecorderServiceConstants.REST_REQUEST_STOP ),
getParamMap( macID, videoHostIp, videoPort ) ) ).andReturn( null );
replay( HttpClientUtil.class );
assertFalse( recorderProvider.stopVideoRecording() );
}
catch ( Exception e )
{
fail();
}
}
@Test
public void stopVideoRecordingServerReturnFailureTest() throws VideoRecorderException
{
mockStatic( HttpClientUtil.class );
try
{
EasyMock.expect(
HttpClientUtil.postForObject( getRequestUri( VideoRecorderServiceConstants.REST_REQUEST_STOP ),
getParamMap( macID, videoHostIp, videoPort ) ) ).andReturn( failureResponse );
replay( HttpClientUtil.class );
assertFalse( recorderProvider.stopVideoRecording() );
}
catch ( Exception e )
{
fail();
}
}
@Test
public void stopVideoRecordingNoRecordingTest() throws VideoRecorderException
{
mockStatic( HttpClientUtil.class );
try
{
EasyMock.expect(
HttpClientUtil.postForObject( getRequestUri( VideoRecorderServiceConstants.REST_REQUEST_STOP ),
getParamMap( macID, videoHostIp, videoPort ) ) ).andReturn(
successResponseFailedRecordingResponse );
replay( HttpClientUtil.class );
assertFalse( recorderProvider.stopVideoRecording() );
}
catch ( Exception e )
{
fail();
}
}
@Test
public void stopVideoRecordingSuccessTest() throws VideoRecorderException
{
mockStatic( HttpClientUtil.class );
try
{
EasyMock.expect(
HttpClientUtil.postForObject( getRequestUri( VideoRecorderServiceConstants.REST_REQUEST_STOP ),
getParamMap( macID, videoHostIp, videoPort ) ) ).andReturn( successResponse );
replay( HttpClientUtil.class );
assertTrue( recorderProvider.stopVideoRecording() );
}
catch ( Exception e )
{
fail();
}
}
@Test( expected = VideoRecorderException.class )
public void getRecordingStatusUnconfiguredTest() throws VideoRecorderException
{
recorderProvider = new VideoRecorderRESTProviderImpl( null, 0, null, null );
recorderProvider.getRecordingInfo();
}
@Test( expected = VideoRecorderException.class )
public void getRecordingInfoUnconfigured1Test() throws VideoRecorderException
{
recorderProvider = new VideoRecorderRESTProviderImpl( "", videoPort, serverHost, macID );
recorderProvider.getRecordingInfo();
}
@Test( expected = VideoRecorderException.class )
public void getRecordingInfoUnconfigured2Test() throws VideoRecorderException
{
recorderProvider = new VideoRecorderRESTProviderImpl( videoHostIp, videoPort, "", macID );
recorderProvider.getRecordingInfo();
}
@Test( expected = VideoRecorderException.class )
public void getRecordingInfoUnconfigured3Test() throws VideoRecorderException
{
recorderProvider = new VideoRecorderRESTProviderImpl( videoHostIp, -1, serverHost, macID );
recorderProvider.getRecordingInfo();
}
@Test( expected = VideoRecorderException.class )
public void getRecordingInfoUnconfigured4Test() throws VideoRecorderException
{
recorderProvider = new VideoRecorderRESTProviderImpl( videoHostIp, videoPort, serverHost, null );
recorderProvider.getRecordingInfo();
}
@Test( expected = VideoRecorderException.class )
public void getRecordingInfoUnconfigured5Test() throws VideoRecorderException
{
recorderProvider = new VideoRecorderRESTProviderImpl( videoHostIp, videoPort, serverHost, "" );
recorderProvider.getRecordingInfo();
}
@Test( expected = VideoRecorderException.class )
public void getRecordingInfoServerReturnNullTest() throws VideoRecorderException
{
mockStatic( HttpClientUtil.class );
try
{
EasyMock.expect(
HttpClientUtil.getForObject( getRequestUri( VideoRecorderServiceConstants.REST_REQUEST_STATUS ),
getParamMap( macID, videoHostIp, videoPort ) ) ).andReturn( null );
replay( HttpClientUtil.class );
recorderProvider.getRecordingInfo();
}
catch ( Exception e )
{
fail();
}
}
@Test( expected = VideoRecorderException.class )
public void getRecordingInfoServerReturnFailureTest() throws VideoRecorderException
{
mockStatic( HttpClientUtil.class );
try
{
EasyMock.expect(
HttpClientUtil.getForObject( getRequestUri( VideoRecorderServiceConstants.REST_REQUEST_STATUS ),
getParamMap( macID, videoHostIp, videoPort ) ) ).andReturn( failureResponse );
replay( HttpClientUtil.class );
recorderProvider.getRecordingInfo();
}
catch ( Exception e )
{
fail();
}
}
@Test
public void getRecordingInfoNoRecordingTest() throws VideoRecorderException
{
mockStatic( HttpClientUtil.class );
try
{
EasyMock.expect(
HttpClientUtil.getForObject( getRequestUri( VideoRecorderServiceConstants.REST_REQUEST_STATUS ),
getParamMap( macID, videoHostIp, videoPort ) ) ).andReturn(
successResponseFailedRecordingResponse );
replay( HttpClientUtil.class );
assertNotNull( recorderProvider.getRecordingInfo() );
}
catch ( Exception e )
{
fail();
}
}
@Test
public void getRecordingInfoSuccessTest() throws VideoRecorderException
{
mockStatic( HttpClientUtil.class );
try
{
EasyMock.expect(
HttpClientUtil.getForObject( getRequestUri( VideoRecorderServiceConstants.REST_REQUEST_STATUS ),
getParamMap( macID, videoHostIp, videoPort ) ) ).andReturn( successResponse );
replay( HttpClientUtil.class );
assertNotNull( recorderProvider.getRecordingInfo() );
}
catch ( Exception e )
{
fail();
}
}
private Map< String, String > getParamMap( String macID, String videoServerIp, Integer port, String aliasName )
{
Map< String, String > paramMap = getParamMap( macID, videoServerIp, port );
paramMap.put( "alias", String.valueOf( aliasName ) );
return paramMap;
}
private Map< String, String > getParamMap( String macId, String videoServerIp, Integer port )
{
Map< String, String > paramMap = getParamMap( macId );
paramMap.put( "videoServerIp", videoServerIp );
paramMap.put( "port", String.valueOf( port ) );
return paramMap;
}
private Map< String, String > getParamMap( String macId )
{
Map< String, String > paramMap = new HashMap< String, String >();
paramMap.put( "macId", macId );
return paramMap;
}
private String getRequestUri( String restRequest )
{
String requestUri = "http://" + serverHost + VideoRecorderServiceConstants.REST_REQUEST_EXTERNAL_BASE_PATH
+ restRequest;
return requestUri;
}
}