added PlaylistEvent and PlaylistEventContianer tests

This commit is contained in:
maroy 2004-11-09 11:25:28 +00:00
parent c3a8a3c6da
commit 3da6eaa61f
6 changed files with 741 additions and 2 deletions

View File

@ -21,7 +21,7 @@
#
#
# Author : $Author: maroy $
# Version : $Revision: 1.21 $
# Version : $Revision: 1.22 $
# Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/scheduler/etc/Makefile.in,v $
#
# @configure_input@
@ -171,6 +171,7 @@ SCHEDULER_EXE_LIBS = -l${EVENT_SCHEDULER_LIB} -l${PLAYLIST_EXECUTOR_LIB} \
-lxmlrpc++ -lssl -lxml++-1.0
TEST_RUNNER_OBJS = ${SCHEDULER_OBJS} \
${TMP_DIR}/TestRunner.o \
${TMP_DIR}/SchedulerDaemonTest.o \
${TMP_DIR}/SchedulerDaemonUploadTest.o \
${TMP_DIR}/SchedulerDaemonDisplayScheduleTest.o \
@ -198,7 +199,8 @@ TEST_RUNNER_OBJS = ${SCHEDULER_OBJS} \
${TMP_DIR}/PostgresqlPlayLogTest.o \
${TMP_DIR}/GeneratePlayReportMethodTest.o \
${TMP_DIR}/UpdateFadeInFadeOutMethodTest.o \
${TMP_DIR}/TestRunner.o
${TMP_DIR}/PlaylistEventContainerTest.o \
${TMP_DIR}/PlaylistEventTest.o
TEST_RUNNER_LIBS = ${SCHEDULER_EXE_LIBS} -lcppunit -ldl

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE audioPlayer [
<!ELEMENT audioPlayer (helixPlayer) >
<!ELEMENT helixPlayer EMPTY >
<!ATTLIST helixPlayer dllPath CDATA #REQUIRED >
]>
<audioPlayer>
<helixPlayer dllPath = "../../usr/lib/helix"
/>
</audioPlayer>

View File

@ -0,0 +1,215 @@
/*------------------------------------------------------------------------------
Copyright (c) 2004 Media Development Loan Fund
This file is part of the LiveSupport project.
http://livesupport.campware.org/
To report bugs, send an e-mail to bugs@campware.org
LiveSupport 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 2 of the License, or
(at your option) any later version.
LiveSupport 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 LiveSupport; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Author : $Author: maroy $
Version : $Revision: 1.1 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/scheduler/src/PlaylistEventContainerTest.cxx,v $
------------------------------------------------------------------------------*/
/* ============================================================ include files */
#ifdef HAVE_CONFIG_H
#include "configure.h"
#endif
#if HAVE_UNISTD_H
#include <unistd.h>
#else
#error "Need unistd.h"
#endif
#include <string>
#include "LiveSupport/Core/TimeConversion.h"
#include "LiveSupport/Db/ConnectionManagerFactory.h"
#include "LiveSupport/Storage/StorageClientFactory.h"
#include "LiveSupport/PlaylistExecutor/AudioPlayerFactory.h"
#include "PlaylistEventContainer.h"
#include "PlaylistEventContainerTest.h"
using namespace boost::posix_time;
using namespace LiveSupport::Core;
using namespace LiveSupport::Db;
using namespace LiveSupport::Storage;
using namespace LiveSupport::PlaylistExecutor;
using namespace LiveSupport::Scheduler;
/* =================================================== local data structures */
/* ================================================ local constants & macros */
CPPUNIT_TEST_SUITE_REGISTRATION(PlaylistEventContainerTest);
/**
* The name of the configuration file for the audio player
*/
static const std::string audioPlayerConfigFileName = "etc/audioPlayer.xml";
/**
* The name of the configuration file for the connection manager
*/
static const std::string connectionManagerConfigFileName =
"etc/connectionManagerFactory.xml";
/**
* The name of the configuration file for the storage client
*/
static const std::string storageClientConfigFileName = "etc/storageClient.xml";
/**
* The name of the configuration file for the schedule factory
*/
static const std::string scheduleConfigFileName = "etc/scheduleFactory.xml";
/* =============================================== local function prototypes */
/* ============================================================= module code */
/*------------------------------------------------------------------------------
* Set up the test environment
*----------------------------------------------------------------------------*/
void
PlaylistEventContainerTest :: setUp(void) throw ()
{
try {
Ptr<xmlpp::DomParser>::Ref parser;
// configure the audio player factory
Ptr<AudioPlayerFactory>::Ref apf = AudioPlayerFactory::getInstance();
parser.reset(new xmlpp::DomParser(audioPlayerConfigFileName, true));
apf->configure(*(parser->get_document()->get_root_node()));
audioPlayer = apf->getAudioPlayer();
// configure the connection manager factory
Ptr<ConnectionManagerFactory>::Ref cmf =
ConnectionManagerFactory::getInstance();
parser.reset(new xmlpp::DomParser(connectionManagerConfigFileName,
true));
cmf->configure(*(parser->get_document()->get_root_node()));
// configure the storage client factory
Ptr<StorageClientFactory>::Ref scf =
StorageClientFactory::getInstance();
parser.reset(new xmlpp::DomParser(storageClientConfigFileName, true));
scf->configure(*(parser->get_document()->get_root_node()));
storage = scf->getStorageClient();
// configure the schedule factory
scheduleFactory = ScheduleFactory::getInstance();
parser.reset(new xmlpp::DomParser(scheduleConfigFileName, true));
scheduleFactory->configure(*(parser->get_document()->get_root_node()));
schedule = scheduleFactory->getSchedule();
} catch (std::invalid_argument &e) {
std::cerr << e.what() << std::endl;
CPPUNIT_FAIL("semantic error in configuration file");
} catch (xmlpp::exception &e) {
std::cerr << e.what() << std::endl;
CPPUNIT_FAIL("error parsing configuration file");
}
scheduleFactory->install();
audioPlayer->initialize();
}
/*------------------------------------------------------------------------------
* Clean up the test environment
*----------------------------------------------------------------------------*/
void
PlaylistEventContainerTest :: tearDown(void) throw ()
{
audioPlayer->deInitialize();
scheduleFactory->uninstall();
schedule.reset();
scheduleFactory.reset();
storage.reset();
audioPlayer.reset();
}
/*------------------------------------------------------------------------------
* A simple smoke test.
*----------------------------------------------------------------------------*/
void
PlaylistEventContainerTest :: simpleTest(void)
throw (CPPUNIT_NS::Exception)
{
Ptr<PlaylistEventContainer>::Ref container;
container.reset(new PlaylistEventContainer(storage, schedule, audioPlayer));
// see that there are no events scheduled
Ptr<ScheduledEventInterface>::Ref scheduledEvent;
scheduledEvent = container->getNextEvent(TimeConversion::now());
CPPUNIT_ASSERT(!scheduledEvent.get());
}
/*------------------------------------------------------------------------------
* Schedule something, and see if we can get it back.
*----------------------------------------------------------------------------*/
void
PlaylistEventContainerTest :: scheduleTest(void)
throw (CPPUNIT_NS::Exception)
{
Ptr<PlaylistEventContainer>::Ref container;
container.reset(new PlaylistEventContainer(storage, schedule, audioPlayer));
// schedule playlist 1 at 10 seconds from now
Ptr<UniqueId>::Ref playlistId(new UniqueId(1));
Ptr<Playlist>::Ref playlist = storage->getPlaylist(playlistId);
CPPUNIT_ASSERT(playlist.get());
Ptr<ptime>::Ref now = TimeConversion::now();
Ptr<ptime>::Ref from(new ptime(*now + seconds(10)));
try {
schedule->schedulePlaylist(playlist, from);
} catch (std::invalid_argument &e) {
CPPUNIT_FAIL(e.what());
}
Ptr<ScheduledEventInterface>::Ref scheduledEvent;
// see if we can get back the scheduled playlist
scheduledEvent = container->getNextEvent(now);
CPPUNIT_ASSERT(scheduledEvent.get());
CPPUNIT_ASSERT(*scheduledEvent->eventLength()
== *playlist->getPlaylength());
// see that there are no events scheduled after from
scheduledEvent = container->getNextEvent(from);
CPPUNIT_ASSERT(!scheduledEvent.get());
}

View File

@ -0,0 +1,150 @@
/*------------------------------------------------------------------------------
Copyright (c) 2004 Media Development Loan Fund
This file is part of the LiveSupport project.
http://livesupport.campware.org/
To report bugs, send an e-mail to bugs@campware.org
LiveSupport 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 2 of the License, or
(at your option) any later version.
LiveSupport 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 LiveSupport; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Author : $Author: maroy $
Version : $Revision: 1.1 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/scheduler/src/PlaylistEventContainerTest.h,v $
------------------------------------------------------------------------------*/
#ifndef PlaylistEventContainerTest_h
#define PlaylistEventContainerTest_h
#ifndef __cplusplus
#error This is a C++ include file
#endif
/* ============================================================ include files */
#ifdef HAVE_CONFIG_H
#include "configure.h"
#endif
#include <cppunit/extensions/HelperMacros.h>
#include "LiveSupport/Core/StorageClientInterface.h"
#include "LiveSupport/PlaylistExecutor/AudioPlayerInterface.h"
#include "ScheduleInterface.h"
#include "ScheduleFactory.h"
namespace LiveSupport {
namespace Scheduler {
using namespace boost::posix_time;
using namespace LiveSupport;
using namespace LiveSupport::Core;
using namespace LiveSupport::PlaylistExecutor;
using namespace LiveSupport::Scheduler;
/* ================================================================ constants */
/* =================================================================== macros */
/* =============================================================== data types */
/**
* Unit test for the PlaylistEventContainer class
*
* @author $Author: maroy $
* @version $Revision: 1.1 $
* @see PlaylistEventContainer
*/
class PlaylistEventContainerTest : public CPPUNIT_NS::TestFixture
{
CPPUNIT_TEST_SUITE(PlaylistEventContainerTest);
CPPUNIT_TEST(simpleTest);
CPPUNIT_TEST(scheduleTest);
CPPUNIT_TEST_SUITE_END();
private:
/**
* The audio player used by the test.
*/
Ptr<AudioPlayerInterface>::Ref audioPlayer;
/**
* The storage used by the container.
*/
Ptr<StorageClientInterface>::Ref storage;
/**
* The schedule factory used in the test.
*/
Ptr<ScheduleFactory>::Ref scheduleFactory;
/**
* The schedule used by the container.
*/
Ptr<ScheduleInterface>::Ref schedule;
protected:
/**
* Simple smoke test.
*
* @exception CPPUNIT_NS::Exception on test failures.
*/
void
simpleTest(void) throw (CPPUNIT_NS::Exception);
/**
* Test to see if we can get back a scheduled event.
*
* @exception CPPUNIT_NS::Exception on test failures.
*/
void
scheduleTest(void) throw (CPPUNIT_NS::Exception);
public:
/**
* Set up the environment for the test case.
*/
void
setUp(void) throw ();
/**
* Clean up the environment after the test case.
*/
void
tearDown(void) throw ();
};
/* ================================================= external data structures */
/* ====================================================== function prototypes */
} // namespace Scheduler
} // namespace LiveSupport
#endif // PlaylistEventContainerTest_h

View File

@ -0,0 +1,203 @@
/*------------------------------------------------------------------------------
Copyright (c) 2004 Media Development Loan Fund
This file is part of the LiveSupport project.
http://livesupport.campware.org/
To report bugs, send an e-mail to bugs@campware.org
LiveSupport 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 2 of the License, or
(at your option) any later version.
LiveSupport 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 LiveSupport; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Author : $Author: maroy $
Version : $Revision: 1.1 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/scheduler/src/PlaylistEventTest.cxx,v $
------------------------------------------------------------------------------*/
/* ============================================================ include files */
#ifdef HAVE_CONFIG_H
#include "configure.h"
#endif
#if HAVE_UNISTD_H
#include <unistd.h>
#else
#error "Need unistd.h"
#endif
#include <string>
#include "LiveSupport/Core/TimeConversion.h"
#include "LiveSupport/Storage/StorageClientFactory.h"
#include "LiveSupport/PlaylistExecutor/AudioPlayerFactory.h"
#include "PlaylistEvent.h"
#include "PlaylistEventTest.h"
using namespace boost::posix_time;
using namespace LiveSupport::Core;
using namespace LiveSupport::Storage;
using namespace LiveSupport::PlaylistExecutor;
using namespace LiveSupport::Scheduler;
/* =================================================== local data structures */
/* ================================================ local constants & macros */
CPPUNIT_TEST_SUITE_REGISTRATION(PlaylistEventTest);
/**
* The name of the configuration file for the audio player
*/
static const std::string audioPlayerConfigFileName = "etc/audioPlayer.xml";
/**
* The name of the configuration file for the storage client
*/
static const std::string storageClientConfigFileName = "etc/storageClient.xml";
/* =============================================== local function prototypes */
/* ============================================================= module code */
/*------------------------------------------------------------------------------
* Set up the test environment
*----------------------------------------------------------------------------*/
void
PlaylistEventTest :: setUp(void) throw ()
{
try {
Ptr<xmlpp::DomParser>::Ref parser;
// configure the audio player factory
Ptr<AudioPlayerFactory>::Ref apf = AudioPlayerFactory::getInstance();
parser.reset(new xmlpp::DomParser(audioPlayerConfigFileName, true));
apf->configure(*(parser->get_document()->get_root_node()));
audioPlayer = apf->getAudioPlayer();
// configure the storage client factory
Ptr<StorageClientFactory>::Ref scf =
StorageClientFactory::getInstance();
parser.reset(new xmlpp::DomParser(storageClientConfigFileName, true));
scf->configure(*(parser->get_document()->get_root_node()));
storage = scf->getStorageClient();
} catch (std::invalid_argument &e) {
std::cerr << e.what() << std::endl;
CPPUNIT_FAIL("semantic error in configuration file");
} catch (xmlpp::exception &e) {
std::cerr << e.what() << std::endl;
CPPUNIT_FAIL("error parsing configuration file");
}
audioPlayer->initialize();
duration.reset(new time_duration(seconds(30)));
}
/*------------------------------------------------------------------------------
* Clean up the test environment
*----------------------------------------------------------------------------*/
void
PlaylistEventTest :: tearDown(void) throw ()
{
audioPlayer->deInitialize();
duration.reset();
storage.reset();
audioPlayer.reset();
}
/*------------------------------------------------------------------------------
* Create a sample playlist event
*----------------------------------------------------------------------------*/
Ptr<PlaylistEvent>::Ref
PlaylistEventTest :: createTestEvent(void) throw ()
{
// create a fake schedule entry, with id 1 for playlist 1, starting
// 10 seconds from now, and lasting 30 seconds
Ptr<UniqueId>::Ref entryId(new UniqueId(1));
Ptr<UniqueId>::Ref playlistId(new UniqueId(1));
Ptr<ptime>::Ref now = TimeConversion::now();
Ptr<ptime>::Ref startTime(new ptime(*now + seconds(10)));
Ptr<ptime>::Ref endTime(new ptime(*startTime + *duration));
Ptr<ScheduleEntry>::Ref scheduleEntry(new ScheduleEntry(entryId,
playlistId,
startTime,
endTime));
Ptr<PlaylistEvent>::Ref playlistEvent(new PlaylistEvent(audioPlayer,
storage,
scheduleEntry));
return playlistEvent;
}
/*------------------------------------------------------------------------------
* A simple smoke test.
*----------------------------------------------------------------------------*/
void
PlaylistEventTest :: simpleTest(void)
throw (CPPUNIT_NS::Exception)
{
Ptr<PlaylistEvent>::Ref playlistEvent = createTestEvent();
CPPUNIT_ASSERT(*playlistEvent->eventLength() == seconds(30));
}
/*------------------------------------------------------------------------------
* See if the playlist event can be initialized.
*----------------------------------------------------------------------------*/
void
PlaylistEventTest :: initializeTest(void)
throw (CPPUNIT_NS::Exception)
{
Ptr<PlaylistEvent>::Ref playlistEvent = createTestEvent();
playlistEvent->initialize();
playlistEvent->deInitialize();
}
/*------------------------------------------------------------------------------
* See if the playlist can be played
*----------------------------------------------------------------------------*/
void
PlaylistEventTest :: playTest(void)
throw (CPPUNIT_NS::Exception)
{
Ptr<PlaylistEvent>::Ref playlistEvent = createTestEvent();
playlistEvent->initialize();
playlistEvent->start();
TimeConversion::sleep(duration);
playlistEvent->stop();
playlistEvent->deInitialize();
}

View File

@ -0,0 +1,157 @@
/*------------------------------------------------------------------------------
Copyright (c) 2004 Media Development Loan Fund
This file is part of the LiveSupport project.
http://livesupport.campware.org/
To report bugs, send an e-mail to bugs@campware.org
LiveSupport 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 2 of the License, or
(at your option) any later version.
LiveSupport 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 LiveSupport; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Author : $Author: maroy $
Version : $Revision: 1.1 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/scheduler/src/PlaylistEventTest.h,v $
------------------------------------------------------------------------------*/
#ifndef PlaylistEventTest_h
#define PlaylistEventTest_h
#ifndef __cplusplus
#error This is a C++ include file
#endif
/* ============================================================ include files */
#ifdef HAVE_CONFIG_H
#include "configure.h"
#endif
#include <cppunit/extensions/HelperMacros.h>
#include "LiveSupport/Core/StorageClientInterface.h"
#include "LiveSupport/PlaylistExecutor/AudioPlayerInterface.h"
namespace LiveSupport {
namespace Scheduler {
using namespace boost::posix_time;
using namespace LiveSupport;
using namespace LiveSupport::Core;
using namespace LiveSupport::PlaylistExecutor;
/* ================================================================ constants */
/* =================================================================== macros */
/* =============================================================== data types */
/**
* Unit test for the PlaylistEvent class
*
* @author $Author: maroy $
* @version $Revision: 1.1 $
* @see PlaylistEvent
*/
class PlaylistEventTest : public CPPUNIT_NS::TestFixture
{
CPPUNIT_TEST_SUITE(PlaylistEventTest);
CPPUNIT_TEST(simpleTest);
CPPUNIT_TEST(initializeTest);
CPPUNIT_TEST(playTest);
CPPUNIT_TEST_SUITE_END();
private:
/**
* The audio player used by the test.
*/
Ptr<AudioPlayerInterface>::Ref audioPlayer;
/**
* The storage used by the interface.
*/
Ptr<StorageClientInterface>::Ref storage;
/**
* The duration of the testing events.
*/
Ptr<time_duration>::Ref duration;
/**
* Create a playlist event for testing purposes.
*/
Ptr<PlaylistEvent>::Ref
createTestEvent(void) throw ();
protected:
/**
* Simple smoke test.
*
* @exception CPPUNIT_NS::Exception on test failures.
*/
void
simpleTest(void) throw (CPPUNIT_NS::Exception);
/**
* A test to see if the playlist event can be initialized.
*
* @exception CPPUNIT_NS::Exception on test failures.
*/
void
initializeTest(void) throw (CPPUNIT_NS::Exception);
/**
* A test to see if the playlist event can be played.
*
* @exception CPPUNIT_NS::Exception on test failures.
*/
void
playTest(void) throw (CPPUNIT_NS::Exception);
public:
/**
* Set up the environment for the test case.
*/
void
setUp(void) throw ();
/**
* Clean up the environment after the test case.
*/
void
tearDown(void) throw ();
};
/* ================================================= external data structures */
/* ====================================================== function prototypes */
} // namespace Scheduler
} // namespace LiveSupport
#endif // PlaylistEventTest_h