/**
* 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.recorder.persistence;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.NoResultException;
import javax.persistence.Query;
import org.junit.Test;
import com.comcast.cats.info.VideoRecorderState;
import com.comcast.cats.recorder.domain.MediaMetaData;
import com.comcast.cats.recorder.domain.Recording;
import com.comcast.cats.recorder.domain.RecordingStatus;
/**
* General entity service tests.
*
* @author SSugun00c
*
*/
public class EntityServiceIT extends BaseEntityServiceIT
{
@Test
public void testAddNewRecording() throws Exception
{
int videoServerPort = 0;
String videoServerIp = "192.168.160.202";
String mrl = "rtsp://192.168.160.202/axis-media/media.amp?videocodec=h264";
// Add to recordings
Recording recording = new Recording( null, videoServerIp, videoServerPort, mrl );
RecordingStatus recordingStatus = new RecordingStatus( VideoRecorderState.RECORDING.toString(), null );
// Add to recording status
recording.setRecordingStatus( recordingStatus );
List< MediaMetaData > mediaMetaDataList = new ArrayList< MediaMetaData >();
String filePath_01 = "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs/ip/2012/November/13/192.168.160.202/0/cats-capture-01-32-09-PM-EST.mp4";
String filePath_02 = "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs/ip/2012/November/13/192.168.160.202/0/cats-capture-02-00-00-PM-EST.mp4";
String httpPath_01 = "http://localhost/ip/2012/November/13/192.168.160.202/0/cats-capture-01-32-09-PM-EST.mp4";
String httpPath_02 = "http://localhost/ip/2012/November/13/192.168.160.202/0/cats-capture-02-00-00-PM-EST.mp4";
MediaMetaData media_01 = new MediaMetaData( filePath_01, httpPath_01 );
media_01.setRecordingEntity( recording );
mediaMetaDataList.add( media_01 );
MediaMetaData media_02 = new MediaMetaData( filePath_02, httpPath_02 );
media_02.setRecordingEntity( recording );
mediaMetaDataList.add( media_02 );
// Add to Media Info
recording.setMediaInfoEntityList( mediaMetaDataList );
entityManager.getTransaction().begin();
entityManager.persist( recording );
entityManager.getTransaction().commit();
LOGGER.info( "Created New recording with id= " + recording.getId() );
LOGGER.info( "Created New recording status with id= " + recording.getRecordingStatus().getId() );
}
/*
* @Test public void testGetAllRecording() throws Exception {
*
* @SuppressWarnings( "unchecked" ) List< Recording > recordingEntityList =
* ( List< Recording > ) entityManager .createQuery( "from RecordingEntity"
* ).getResultList();
*
* LOGGER.info( recordingEntityList.size() + " items found" );
*
* for ( Recording recordingEntity : recordingEntityList ) { LOGGER.info(
* recordingEntity.toString() ); } }
*/
@Test
public void testGetAllRecordingById() throws Exception
{
@SuppressWarnings( "unchecked" )
List< Recording > recordingEntityList = ( List< Recording > ) entityManager.createQuery( "from Recording" )
.getResultList();
LOGGER.info( recordingEntityList.size() + " items found" );
for ( Recording recordingEntity : recordingEntityList )
{
LOGGER.info( recordingEntity.toString() );
}
}
@Test
public void testGetActiveRecording() throws Exception
{
final Query query = entityManager.createNamedQuery( "Recording.findActiveRecordingByMacId" );
String macId = "00:19:47:25:AD:7E";
query.setParameter( "stbMacAddress", macId );
try
{
final Recording recording = ( Recording ) query.getSingleResult();
LOGGER.info( recording.toString() );
}
catch ( NoResultException e )
{
LOGGER.info( "No record available" );
}
}
@Test
public void testGetLatestRecording() throws Exception
{
final Query query = entityManager.createNamedQuery( "Recording.findAllRecordingByMacIdWithLatestFirst" );
String macId = "00:19:47:25:AD:7E";
query.setParameter( "stbMacAddress", macId );
try
{
final Recording recording = ( Recording ) query.setMaxResults( 1 ).getSingleResult();
LOGGER.info( recording.toString() );
}
catch ( NoResultException e )
{
LOGGER.info( "No record available" );
}
}
@Test
public void testUpdateRecordingStatus() throws Exception
{
String videoServerIp = "192.168.160.202";
Integer port = 80;
final Query query = entityManager.createNamedQuery( "Recording.findActiveRecording" );
query.setParameter( "videoServerIp", videoServerIp ).setParameter( "videoServerPort", port );
Recording recording = null;
try
{
recording = ( Recording ) query.getSingleResult();
LOGGER.info( "An active recording found" );
RecordingStatus recordingStatus = recording.getRecordingStatus();
LOGGER.info( "before: " + recordingStatus );
recordingStatus.setState( VideoRecorderState.STOPPED.toString() );
entityManager.getTransaction().begin();
entityManager.merge( recordingStatus );
entityManager.getTransaction().commit();
LOGGER.info( "after: " + recordingStatus );
}
catch ( NoResultException e )
{
LOGGER.info( "No active recording found " );
}
}
@Test
public void testGetActiveRecordingById() throws Exception
{
/*
* SELECT * FROM pvr_recording,pvr_media_metadata,pvr_recording_status
* where pvr_recording.recording_id= pvr_media_metadata.parent_id AND
* pvr_recording.recording_id=pvr_recording_status.recording_status_id
* AND pvr_recording.recording_id=1 AND
* pvr_recording_status.state!='STOPPED' AND
* pvr_recording_status.state!='ERROR' AND
* pvr_recording_status.state!='FORCE_CLOSE';
*/
/*
* @NamedQuery( name = "Recording.findActiveRecordingByMacId", query =
* "SELECT recording FROM Recording recording, RecordingStatus recordingStatus "
* + "WHERE recording.id=recordingStatus.id " +
* "AND recording.stbMacAddress=:stbMacAddress " +
* "AND recordingStatus.state!='STOPPED' " +
* "AND recordingStatus.state!='ERROR' " +
* "AND recordingStatus.state!='FORCE_CLOSE'" ),
*/
/*
* String queryStr="SELECT recording " +
* "FROM Recording recording, RecordingStatus recordingStatus, MediaMetaData mediaMetaData "
* + " WHERE recording.id= mediaMetaData.recordingEntity.id" +
* " AND recording.id=recordingStatus.id" +
* " AND recording.id=:recordingId" +
* " AND recordingStatus.state!='STOPPED'" +
* " AND recordingStatus.state!='ERROR'" +
* " AND recordingStatus.state!='FORCE_CLOSE'";
*/
// LOGGER.info( "queryStr= "+queryStr );
final Query query = entityManager.createNamedQuery( "Recording.findActiveRecordingByRecordingId" );
query.setParameter( "recordingId", 1 );
Recording recording = ( Recording ) query.getSingleResult();
LOGGER.info( "recording= " + recording );
}
@Test
public void testGetRecordingHistoryByMac() throws Exception
{
String macId = "00:19:47:25:AD:7E";
final Query query = entityManager.createNamedQuery( "Recording.findRecordingByMacId" );
// .createQuery(
// "from Recording recording where recording.stbMacAddress =:stbMacAddress"
// );
query.setParameter( "stbMacAddress", macId );
@SuppressWarnings( "unchecked" )
final List< Recording > recordingList = ( List< Recording > ) query.getResultList();
LOGGER.info( recordingList.size() + " record(s) found for macId[" + macId + "]" );
}
}