I thought I committed this last night, but apparently not

This commit is contained in:
fgerlits 2004-11-23 09:42:36 +00:00
parent e46a2192ce
commit 6b616419df
19 changed files with 557 additions and 794 deletions

View File

@ -22,7 +22,7 @@
Author : $Author: fgerlits $ Author : $Author: fgerlits $
Version : $Revision: 1.5 $ Version : $Revision: 1.6 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/core/include/LiveSupport/Core/AudioClip.h,v $ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/core/include/LiveSupport/Core/AudioClip.h,v $
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
@ -72,7 +72,7 @@ using namespace boost::posix_time;
* in a Playlist. * in a Playlist.
* *
* @author $Author: fgerlits $ * @author $Author: fgerlits $
* @version $Revision: 1.5 $ * @version $Revision: 1.6 $
*/ */
class AudioClip : public Configurable class AudioClip : public Configurable
{ {
@ -161,7 +161,7 @@ class AudioClip : public Configurable
* *
* @return the unique id of the audio clip. * @return the unique id of the audio clip.
*/ */
Ptr<const UniqueId>::Ref Ptr<UniqueId>::Ref
getId(void) const throw () getId(void) const throw ()
{ {
return id; return id;

View File

@ -22,7 +22,7 @@
Author : $Author: fgerlits $ Author : $Author: fgerlits $
Version : $Revision: 1.1 $ Version : $Revision: 1.2 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/core/include/LiveSupport/Core/FadeInfo.h,v $ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/core/include/LiveSupport/Core/FadeInfo.h,v $
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
@ -70,7 +70,7 @@ using namespace boost::posix_time;
* contained in a Playlist. * contained in a Playlist.
* *
* @author $Author: fgerlits $ * @author $Author: fgerlits $
* @version $Revision: 1.1 $ * @version $Revision: 1.2 $
*/ */
class FadeInfo : public Configurable class FadeInfo : public Configurable
{ {
@ -173,7 +173,7 @@ class FadeInfo : public Configurable
* *
* @return the unique id of the fade info instance. * @return the unique id of the fade info instance.
*/ */
Ptr<const UniqueId>::Ref Ptr<UniqueId>::Ref
getId(void) const throw () getId(void) const throw ()
{ {
return id; return id;

View File

@ -22,7 +22,7 @@
Author : $Author: fgerlits $ Author : $Author: fgerlits $
Version : $Revision: 1.14 $ Version : $Revision: 1.15 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/core/include/LiveSupport/Core/Playlist.h,v $ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/core/include/LiveSupport/Core/Playlist.h,v $
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
@ -71,7 +71,7 @@ using namespace boost::posix_time;
* the playlist. * the playlist.
* *
* @author $Author: fgerlits $ * @author $Author: fgerlits $
* @version $Revision: 1.14 $ * @version $Revision: 1.15 $
*/ */
class Playlist : public Configurable class Playlist : public Configurable
{ {
@ -204,7 +204,7 @@ class Playlist : public Configurable
* *
* @return the unique id of the playlist. * @return the unique id of the playlist.
*/ */
Ptr<const UniqueId>::Ref Ptr<UniqueId>::Ref
getId(void) const throw () getId(void) const throw ()
{ {
return id; return id;

View File

@ -22,7 +22,7 @@
Author : $Author: fgerlits $ Author : $Author: fgerlits $
Version : $Revision: 1.5 $ Version : $Revision: 1.6 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/core/include/LiveSupport/Core/PlaylistElement.h,v $ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/core/include/LiveSupport/Core/PlaylistElement.h,v $
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
@ -74,7 +74,7 @@ using namespace LiveSupport::Core;
* An item in a playlist. * An item in a playlist.
* *
* @author $Author: fgerlits $ * @author $Author: fgerlits $
* @version $Revision: 1.5 $ * @version $Revision: 1.6 $
*/ */
class PlaylistElement : public Configurable class PlaylistElement : public Configurable
{ {
@ -196,7 +196,7 @@ class PlaylistElement : public Configurable
* *
* @return the id of the playlist element. * @return the id of the playlist element.
*/ */
Ptr<const UniqueId>::Ref Ptr<UniqueId>::Ref
getId(void) const throw () getId(void) const throw ()
{ {
return id; return id;

View File

@ -22,7 +22,7 @@
Author : $Author: fgerlits $ Author : $Author: fgerlits $
Version : $Revision: 1.13 $ Version : $Revision: 1.14 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/core/include/LiveSupport/Core/Attic/StorageClientInterface.h,v $ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/core/include/LiveSupport/Core/Attic/StorageClientInterface.h,v $
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
@ -44,6 +44,7 @@
#include "LiveSupport/Core/UniqueId.h" #include "LiveSupport/Core/UniqueId.h"
#include "LiveSupport/Core/Playlist.h" #include "LiveSupport/Core/Playlist.h"
#include "LiveSupport/Core/SessionId.h"
namespace LiveSupport { namespace LiveSupport {
@ -61,7 +62,7 @@ namespace Core {
* An interface for storage clients. * An interface for storage clients.
* *
* @author $Author: fgerlits $ * @author $Author: fgerlits $
* @version $Revision: 1.13 $ * @version $Revision: 1.14 $
*/ */
class StorageClientInterface class StorageClientInterface
{ {
@ -69,39 +70,46 @@ class StorageClientInterface
/** /**
* Tell if a playlist with a given id exists. * Tell if a playlist with a given id exists.
* *
* @param sessionId the session ID from the authentication client
* @param id the id of the playlist to check for. * @param id the id of the playlist to check for.
* @return true if a playlist with the specified id exists, * @return true if a playlist with the specified id exists,
* false otherwise. * false otherwise.
*/ */
virtual const bool virtual const bool
existsPlaylist(Ptr<const UniqueId>::Ref id) const throw () existsPlaylist(Ptr<SessionId>::Ref sessionId,
Ptr<UniqueId>::Ref id) const
throw (std::logic_error)
= 0; = 0;
/** /**
* Return a playlist with the specified id. * Return a playlist with the specified id.
* *
* @param sessionId the session ID from the authentication client
* @param id the id of the playlist to return. * @param id the id of the playlist to return.
* @return the requested playlist. * @return the requested playlist.
* @exception std::invalid_argument if no playlist with the specified * @exception std::logic_error if no playlist with the specified
* id exists. * id exists.
*/ */
virtual Ptr<Playlist>::Ref virtual Ptr<Playlist>::Ref
getPlaylist(Ptr<const UniqueId>::Ref id) const getPlaylist(Ptr<SessionId>::Ref sessionId,
throw (std::invalid_argument) Ptr<UniqueId>::Ref id) const
throw (std::logic_error)
= 0; = 0;
/** /**
* Acquire the resources for the playlist. * Acquire the resources for the playlist.
* *
* @param sessionId the session ID from the authentication client
* @param id the id of the playlist to acquire. * @param id the id of the playlist to acquire.
* @return a new Playlist instance containing a uri field which * @return a new Playlist instance containing a uri field which
* points to an executable (playable) SMIL representation of * points to an executable (playable) SMIL representation of
* the playlist (in the local storage). * the playlist (in the local storage).
* @exception std::invalid_argument if no playlist with the specified * @exception std::logic_error if no playlist with the specified
* specified id exists. * specified id exists.
*/ */
virtual Ptr<Playlist>::Ref virtual Ptr<Playlist>::Ref
acquirePlaylist(Ptr<const UniqueId>::Ref id) const acquirePlaylist(Ptr<SessionId>::Ref sessionId,
Ptr<UniqueId>::Ref id) const
throw (std::logic_error) throw (std::logic_error)
= 0; = 0;
@ -109,112 +117,135 @@ class StorageClientInterface
* Release the resources (audio clips, other playlists) used * Release the resources (audio clips, other playlists) used
* in a playlist. * in a playlist.
* *
* @param sessionId the session ID from the authentication client
* @param playlist the playlist to release. * @param playlist the playlist to release.
* @exception std::logic_error if the playlist has no uri field, * @exception std::logic_error if the playlist has no uri field,
* or the file does not exist, etc. * or the file does not exist, etc.
*/ */
virtual void virtual void
releasePlaylist(Ptr<Playlist>::Ref playlist) const releasePlaylist(Ptr<SessionId>::Ref sessionId,
Ptr<Playlist>::Ref playlist) const
throw (std::logic_error) throw (std::logic_error)
= 0; = 0;
/** /**
* Delete a playlist with the specified id. * Delete a playlist with the specified id.
* *
* @param sessionId the session ID from the authentication client
* @param id the id of the playlist to be deleted. * @param id the id of the playlist to be deleted.
* @exception std::invalid_argument if no playlist with the specified * @exception std::logic_error if no playlist with the specified
* id exists. * id exists.
*/ */
virtual void virtual void
deletePlaylist(Ptr<const UniqueId>::Ref id) deletePlaylist(Ptr<SessionId>::Ref sessionId,
throw (std::invalid_argument) Ptr<UniqueId>::Ref id)
throw (std::logic_error)
= 0; = 0;
/** /**
* Return a list of all playlists in the playlist store. * Return a list of all playlists in the playlist store.
* *
* @param sessionId the session ID from the authentication client
* @return a vector containing the playlists. * @return a vector containing the playlists.
*/ */
virtual Ptr<std::vector<Ptr<Playlist>::Ref> >::Ref virtual Ptr<std::vector<Ptr<Playlist>::Ref> >::Ref
getAllPlaylists(void) const throw () = 0; getAllPlaylists(Ptr<SessionId>::Ref sessionId) const
throw (std::logic_error)
= 0;
/** /**
* Create a new playlist. * Create a new playlist.
* *
* @param sessionId the session ID from the authentication client
* @return the newly created playlist. * @return the newly created playlist.
*/ */
virtual Ptr<Playlist>::Ref virtual Ptr<Playlist>::Ref
createPlaylist() throw () = 0; createPlaylist(Ptr<SessionId>::Ref sessionId)
throw (std::logic_error)
= 0;
/** /**
* Tell if an audio clip with a given id exists. * Tell if an audio clip with a given id exists.
* *
* @param sessionId the session ID from the authentication client
* @param id the id of the audio clip to check for. * @param id the id of the audio clip to check for.
* @return true if an audio clip with the specified id exists, * @return true if an audio clip with the specified id exists,
* false otherwise. * false otherwise.
*/ */
virtual const bool virtual const bool
existsAudioClip(Ptr<const UniqueId>::Ref id) const throw () existsAudioClip(Ptr<SessionId>::Ref sessionId,
Ptr<UniqueId>::Ref id) const
throw (std::logic_error)
= 0; = 0;
/** /**
* Return an audio clip with the specified id. * Return an audio clip with the specified id.
* *
* @param sessionId the session ID from the authentication client
* @param id the id of the audio clip to return. * @param id the id of the audio clip to return.
* @return the requested audio clip. * @return the requested audio clip.
* @exception std::invalid_argument if no audio clip with the * @exception std::logic_error if no audio clip with the
* specified id exists. * specified id exists.
*/ */
virtual Ptr<AudioClip>::Ref virtual Ptr<AudioClip>::Ref
getAudioClip(Ptr<const UniqueId>::Ref id) const getAudioClip(Ptr<SessionId>::Ref sessionId,
throw (std::invalid_argument) Ptr<UniqueId>::Ref id) const
throw (std::logic_error)
= 0; = 0;
/** /**
* Acquire the resources for the audio clip with the specified id. * Acquire the resources for the audio clip with the specified id.
* *
* @param sessionId the session ID from the authentication client
* @param id the id of the audio clip to acquire. * @param id the id of the audio clip to acquire.
* @return a new AudioClip instance, containing a uri field which * @return a new AudioClip instance, containing a uri field which
* points to (a way of getting) the sound file. * points to (a way of getting) the sound file.
* @exception std::invalid_argument if no audio clip with the * @exception std::logic_error if no audio clip with the
* specified id exists. * specified id exists.
*/ */
virtual Ptr<AudioClip>::Ref virtual Ptr<AudioClip>::Ref
acquireAudioClip(Ptr<const UniqueId>::Ref id) const acquireAudioClip(Ptr<SessionId>::Ref sessionId,
throw (std::logic_error) Ptr<UniqueId>::Ref id) const
throw (std::logic_error)
= 0; = 0;
/** /**
* Release the resource (sound file) used by an audio clip. * Release the resource (sound file) used by an audio clip.
* *
* @param sessionId the session ID from the authentication client
* @param audioClip the id of the audio clip to release. * @param audioClip the id of the audio clip to release.
* @exception std::logic_error if the audio clip has no uri field, * @exception std::logic_error if the audio clip has no uri field,
* or the file does not exist, etc. * or the file does not exist, etc.
*/ */
virtual void virtual void
releaseAudioClip(Ptr<AudioClip>::Ref audioClip) const releaseAudioClip(Ptr<SessionId>::Ref sessionId,
throw (std::logic_error) Ptr<AudioClip>::Ref audioClip) const
throw (std::logic_error)
= 0; = 0;
/** /**
* Delete an audio clip with the specified id. * Delete an audio clip with the specified id.
* *
* @param sessionId the session ID from the authentication client
* @param id the id of the audio clip to be deleted. * @param id the id of the audio clip to be deleted.
* @exception std::invalid_argument if no audio clip with the * @exception std::logic_error if no audio clip with the
* specified id exists. * specified id exists.
*/ */
virtual void virtual void
deleteAudioClip(Ptr<const UniqueId>::Ref id) deleteAudioClip(Ptr<SessionId>::Ref sessionId,
throw (std::invalid_argument) Ptr<UniqueId>::Ref id)
throw (std::logic_error)
= 0; = 0;
/** /**
* Return a list of all audio clips in the playlist store. * Return a list of all audio clips in the playlist store.
* *
* @param sessionId the session ID from the authentication client
* @return a vector containing the playlists. * @return a vector containing the playlists.
*/ */
virtual Ptr<std::vector<Ptr<AudioClip>::Ref> >::Ref virtual Ptr<std::vector<Ptr<AudioClip>::Ref> >::Ref
getAllAudioClips(void) const throw () = 0; getAllAudioClips(Ptr<SessionId>::Ref sessionId) const
throw (std::logic_error)
= 0;
}; };

View File

@ -21,7 +21,7 @@
# #
# #
# Author : $Author: fgerlits $ # Author : $Author: fgerlits $
# Version : $Revision: 1.6 $ # Version : $Revision: 1.7 $
# Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/storage/etc/Makefile.in,v $ # Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/storage/etc/Makefile.in,v $
# #
# @configure_input@ # @configure_input@
@ -63,6 +63,12 @@ CORE_LIB_DIR = ${CORE_DIR}/lib
CORE_LIB = livesupport_core CORE_LIB = livesupport_core
CORE_LIB_FILE = ${CORE_LIB_DIR}/lib${CORE_LIB}.a CORE_LIB_FILE = ${CORE_LIB_DIR}/lib${CORE_LIB}.a
AUTHENTICATION_DIR = ${MODULES_DIR}/authentication
AUTHENTICATION_INCLUDE_DIR = ${AUTHENTICATION_DIR}/include
AUTHENTICATION_LIB_DIR = ${AUTHENTICATION_DIR}/lib
AUTHENTICATION_LIB = livesupport_authentication
AUTHENTICATION_LIB_FILE = ${AUTHENTICATION_LIB_DIR}/lib${AUTHENTICATION_LIB}.a
VPATH = ${SRC_DIR} VPATH = ${SRC_DIR}
TEST_RESULTS = ${DOC_DIR}/testResults.xml TEST_RESULTS = ${DOC_DIR}/testResults.xml
@ -86,8 +92,10 @@ CXXFLAGS = @CXXFLAGS@ @DEFS@ @COVERAGE_CXXFLAGS@ \
-I${BOOST_INCLUDE_DIR} \ -I${BOOST_INCLUDE_DIR} \
-I${LIBXMLPP_INCLUDE_DIR} \ -I${LIBXMLPP_INCLUDE_DIR} \
-I${CORE_INCLUDE_DIR} \ -I${CORE_INCLUDE_DIR} \
-I${AUTHENTICATION_INCLUDE_DIR} \
-I${INCLUDE_DIR} -I${TMP_DIR} -I${INCLUDE_DIR} -I${TMP_DIR}
LDFLAGS = @LDFLAGS@ -L${USR_LIB_DIR} -L${CORE_LIB_DIR} -L${LIB_DIR} LDFLAGS = @LDFLAGS@ -L${USR_LIB_DIR} -L${CORE_LIB_DIR} \
-L${AUTHENTICATION_LIB_DIR} -L${LIB_DIR}
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
@ -98,12 +106,11 @@ STORAGE_LIB_OBJS = ${TMP_DIR}/StorageClientFactory.o \
${TMP_DIR}/WebStorageClient.o ${TMP_DIR}/WebStorageClient.o
TEST_RUNNER_OBJS = ${TMP_DIR}/TestStorageClientTest.o \ TEST_RUNNER_OBJS = ${TMP_DIR}/TestStorageClientTest.o \
${TMP_DIR}/StorageServerLoginTest.o \
${TMP_DIR}/WebStorageClientTest.o \ ${TMP_DIR}/WebStorageClientTest.o \
${TMP_DIR}/TestRunner.o ${TMP_DIR}/TestRunner.o
TEST_RUNNER_LIBS = -l${STORAGE_LIB} -l${CORE_LIB} -lxml++-1.0 -lcppunit -ldl \ TEST_RUNNER_LIBS = -l${STORAGE_LIB} -l${CORE_LIB} -l${AUTHENTICATION_LIB} \
-lxmlrpc++ -lssl -lxml++-1.0 -lcppunit -ldl -lxmlrpc++ -lssl
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" ?> <?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE storageClientFactory [ <!DOCTYPE storageClientFactory [
<!ELEMENT storageClientFactory (testStorage) > <!ELEMENT storageClientFactory (testStorage, webStorage) >
<!ELEMENT testStorage (playlist*) > <!ELEMENT testStorage (playlist*) >
<!ATTLIST testStorage tempFiles CDATA #REQUIRED > <!ATTLIST testStorage tempFiles CDATA #REQUIRED >
@ -18,6 +18,15 @@
<!ATTLIST audioClip id NMTOKEN #REQUIRED > <!ATTLIST audioClip id NMTOKEN #REQUIRED >
<!ATTLIST audioClip playlength NMTOKEN #REQUIRED > <!ATTLIST audioClip playlength NMTOKEN #REQUIRED >
<!ATTLIST audioClip uri CDATA #REQUIRED > <!ATTLIST audioClip uri CDATA #REQUIRED >
<!ELEMENT webStorage (location) >
<!ATTLIST webStorage tempFiles CDATA #REQUIRED >
<!ELEMENT location EMPTY >
<!ATTLIST location server CDATA #REQUIRED >
<!ATTLIST location port NMTOKEN #REQUIRED >
<!ATTLIST location path CDATA #REQUIRED >
]> ]>
<storageClientFactory> <storageClientFactory>
<testStorage tempFiles="file:///tmp/tempPlaylist"> <testStorage tempFiles="file:///tmp/tempPlaylist">
@ -32,4 +41,8 @@
</playlistElement> </playlistElement>
</playlist> </playlist>
</testStorage> </testStorage>
<webStorage tempFiles="file:///tmp/tempPlaylist" >
<location server="localhost" port="80"
path="/storage/var/xmlrpc/xrLocStor.php" />
</webStorage>
</storageClientFactory> </storageClientFactory>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" ?> <?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE webStorage [ <!DOCTYPE webStorage [
<!ELEMENT webStorage (location, identity) > <!ELEMENT webStorage (location) >
<!ATTLIST webStorage tempFiles CDATA #REQUIRED > <!ATTLIST webStorage tempFiles CDATA #REQUIRED >
<!ELEMENT location EMPTY > <!ELEMENT location EMPTY >
@ -9,12 +9,8 @@
<!ATTLIST location port NMTOKEN #REQUIRED > <!ATTLIST location port NMTOKEN #REQUIRED >
<!ATTLIST location path CDATA #REQUIRED > <!ATTLIST location path CDATA #REQUIRED >
<!ELEMENT identity EMPTY >
<!ATTLIST identity login CDATA #REQUIRED >
<!ATTLIST identity pass CDATA #REQUIRED >
]> ]>
<webStorage tempFiles="file:///tmp/tempPlaylist" > <webStorage tempFiles="file:///tmp/tempPlaylist" >
<location server="localhost" port="80" <location server="localhost" port="80"
path="/storage/var/xmlrpc/xrLocStor.php" /> path="/storage/var/xmlrpc/xrLocStor.php" />
<identity login="root" pass="q" />
</webStorage> </webStorage>

View File

@ -21,8 +21,8 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Author : $Author: maroy $ Author : $Author: fgerlits $
Version : $Revision: 1.1 $ Version : $Revision: 1.2 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/storage/src/StorageClientFactory.cxx,v $ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/storage/src/StorageClientFactory.cxx,v $
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
@ -36,6 +36,7 @@
#include "LiveSupport/Storage/StorageClientFactory.h" #include "LiveSupport/Storage/StorageClientFactory.h"
#include "TestStorageClient.h" #include "TestStorageClient.h"
#include "WebStorageClient.h"
using namespace LiveSupport::Core; using namespace LiveSupport::Core;
@ -93,7 +94,7 @@ StorageClientFactory :: configure(const xmlpp::Element & element)
storageClient.reset(); storageClient.reset();
// try to look for an TestStorageClient configuration element // try to look for a TestStorageClient configuration element
xmlpp::Node::NodeList nodes = xmlpp::Node::NodeList nodes =
element.get_children(TestStorageClient::getConfigElementName()); element.get_children(TestStorageClient::getConfigElementName());
if (nodes.size() >= 1) { if (nodes.size() >= 1) {
@ -109,4 +110,3 @@ StorageClientFactory :: configure(const xmlpp::Element & element)
} }
} }

View File

@ -1,118 +0,0 @@
/*------------------------------------------------------------------------------
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: fgerlits $
Version : $Revision: 1.2 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/storage/src/Attic/StorageServerLoginTest.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 <iostream>
#include <XmlRpcClient.h>
#include <XmlRpcValue.h>
#include "StorageServerLoginTest.h"
using namespace std;
using namespace XmlRpc;
using namespace LiveSupport::Storage;
/* =================================================== local data structures */
/* ================================================ local constants & macros */
CPPUNIT_TEST_SUITE_REGISTRATION(StorageServerLoginTest);
/**
* The name of the configuration file for the ...
*/
// static const std::string configFileName = "etc/...";
/* =============================================== local function prototypes */
/* ============================================================= module code */
/*------------------------------------------------------------------------------
* Set up the test environment
*----------------------------------------------------------------------------*/
void
StorageServerLoginTest :: setUp(void) throw ()
{
}
/*------------------------------------------------------------------------------
* Clean up the test environment
*----------------------------------------------------------------------------*/
void
StorageServerLoginTest :: tearDown(void) throw ()
{
}
/*------------------------------------------------------------------------------
* A simple smoke test.
*----------------------------------------------------------------------------*/
void
StorageServerLoginTest :: firstTest(void)
throw (CPPUNIT_NS::Exception)
{
XmlRpcValue parameters;
XmlRpcValue result;
XmlRpcClient xmlRpcClient("localhost", 80,
"/storage/var/xmlrpc/xrLocStor.php", false);
parameters.clear();
parameters["login"] = "root";
parameters["pass"] = "q";
xmlRpcClient.execute("locstor.login", parameters, result);
std::string sessionId(result);
parameters.clear();
parameters["sessid"] = sessionId;
result.clear();
xmlRpcClient.execute("locstor.logout", parameters, result);
std::string byeMessage(result);
CPPUNIT_ASSERT(byeMessage == "Bye");
}

View File

@ -1,107 +0,0 @@
/*------------------------------------------------------------------------------
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: fgerlits $
Version : $Revision: 1.1 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/storage/src/Attic/StorageServerLoginTest.h,v $
------------------------------------------------------------------------------*/
#ifndef StorageServerLoginTest_h
#define StorageServerLoginTest_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>
namespace LiveSupport {
namespace Storage {
using namespace LiveSupport;
/* ================================================================ constants */
/* =================================================================== macros */
/* =============================================================== data types */
/**
* Unit test to test the XML-RPC communication with the storage server.
*
* @author $Author: fgerlits $
* @version $Revision: 1.1 $
*/
class StorageServerLoginTest : public CPPUNIT_NS::TestFixture
{
CPPUNIT_TEST_SUITE(StorageServerLoginTest);
CPPUNIT_TEST(firstTest);
CPPUNIT_TEST_SUITE_END();
protected:
/**
* Simple smoke test.
*
* @exception CPPUNIT_NS::Exception on test failures.
*/
void
firstTest(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 Storage
} // namespace LiveSupport
#endif // StorageServerLoginTest_h

View File

@ -22,7 +22,7 @@
Author : $Author: fgerlits $ Author : $Author: fgerlits $
Version : $Revision: 1.16 $ Version : $Revision: 1.17 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/storage/src/TestStorageClient.cxx,v $ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/storage/src/TestStorageClient.cxx,v $
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
@ -182,7 +182,8 @@ TestStorageClient :: configure(const xmlpp::Element & element)
* Tell if a playlist exists. * Tell if a playlist exists.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
const bool const bool
TestStorageClient :: existsPlaylist(Ptr<const UniqueId>::Ref id) const TestStorageClient :: existsPlaylist(Ptr<SessionId>::Ref sessionId,
Ptr<UniqueId>::Ref id) const
throw () throw ()
{ {
return playlistMap.count(id->getId()) == 1 ? true : false; return playlistMap.count(id->getId()) == 1 ? true : false;
@ -193,7 +194,8 @@ TestStorageClient :: existsPlaylist(Ptr<const UniqueId>::Ref id) const
* Return a playlist. * Return a playlist.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
Ptr<Playlist>::Ref Ptr<Playlist>::Ref
TestStorageClient :: getPlaylist(Ptr<const UniqueId>::Ref id) const TestStorageClient :: getPlaylist(Ptr<SessionId>::Ref sessionId,
Ptr<UniqueId>::Ref id) const
throw (std::invalid_argument) throw (std::invalid_argument)
{ {
PlaylistMap::const_iterator it = playlistMap.find(id->getId()); PlaylistMap::const_iterator it = playlistMap.find(id->getId());
@ -210,7 +212,8 @@ TestStorageClient :: getPlaylist(Ptr<const UniqueId>::Ref id) const
* Acquire resources for a playlist. * Acquire resources for a playlist.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
Ptr<Playlist>::Ref Ptr<Playlist>::Ref
TestStorageClient :: acquirePlaylist(Ptr<const UniqueId>::Ref id) const TestStorageClient :: acquirePlaylist(Ptr<SessionId>::Ref sessionId,
Ptr<UniqueId>::Ref id) const
throw (std::logic_error) throw (std::logic_error)
{ {
PlaylistMap::const_iterator playlistMapIt = playlistMap.find(id->getId()); PlaylistMap::const_iterator playlistMapIt = playlistMap.find(id->getId());
@ -241,9 +244,10 @@ TestStorageClient :: acquirePlaylist(Ptr<const UniqueId>::Ref id) const
Playlist::const_iterator it = oldPlaylist->begin(); Playlist::const_iterator it = oldPlaylist->begin();
while (it != oldPlaylist->end()) { while (it != oldPlaylist->end()) {
Ptr<AudioClip>::Ref audioClip = acquireAudioClip( it->second Ptr<AudioClip>::Ref audioClip
= acquireAudioClip(sessionId, it->second
->getAudioClip() ->getAudioClip()
->getId() ); ->getId());
Ptr<time_duration>::Ref relativeOffset(new time_duration( Ptr<time_duration>::Ref relativeOffset(new time_duration(
*(it->second->getRelativeOffset()) )); *(it->second->getRelativeOffset()) ));
Ptr<const FadeInfo>::Ref oldFadeInfo = it->second->getFadeInfo(); Ptr<const FadeInfo>::Ref oldFadeInfo = it->second->getFadeInfo();
@ -280,7 +284,8 @@ TestStorageClient :: acquirePlaylist(Ptr<const UniqueId>::Ref id) const
* Release a playlist. * Release a playlist.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void void
TestStorageClient :: releasePlaylist(Ptr<Playlist>::Ref playlist) const TestStorageClient :: releasePlaylist(Ptr<SessionId>::Ref sessionId,
Ptr<Playlist>::Ref playlist) const
throw (std::logic_error) throw (std::logic_error)
{ {
if (! playlist->getUri()) { if (! playlist->getUri()) {
@ -300,7 +305,7 @@ TestStorageClient :: releasePlaylist(Ptr<Playlist>::Ref playlist) const
Playlist::const_iterator it = playlist->begin(); Playlist::const_iterator it = playlist->begin();
while (it != playlist->end()) { while (it != playlist->end()) {
try { try {
releaseAudioClip(it->second->getAudioClip()); releaseAudioClip(sessionId, it->second->getAudioClip());
} }
catch (std::invalid_argument &e) { catch (std::invalid_argument &e) {
++badAudioClips; ++badAudioClips;
@ -324,7 +329,8 @@ TestStorageClient :: releasePlaylist(Ptr<Playlist>::Ref playlist) const
* Delete a playlist. * Delete a playlist.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void void
TestStorageClient :: deletePlaylist(Ptr<const UniqueId>::Ref id) TestStorageClient :: deletePlaylist(Ptr<SessionId>::Ref sessionId,
Ptr<UniqueId>::Ref id)
throw (std::invalid_argument) throw (std::invalid_argument)
{ {
// erase() returns the number of entries found & erased // erase() returns the number of entries found & erased
@ -338,7 +344,8 @@ TestStorageClient :: deletePlaylist(Ptr<const UniqueId>::Ref id)
* Return a listing of all the playlists in the playlist store. * Return a listing of all the playlists in the playlist store.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
Ptr<std::vector<Ptr<Playlist>::Ref> >::Ref Ptr<std::vector<Ptr<Playlist>::Ref> >::Ref
TestStorageClient :: getAllPlaylists(void) const TestStorageClient :: getAllPlaylists(Ptr<SessionId>::Ref sessionId)
const
throw () throw ()
{ {
PlaylistMap::const_iterator it = playlistMap.begin(); PlaylistMap::const_iterator it = playlistMap.begin();
@ -358,7 +365,8 @@ TestStorageClient :: getAllPlaylists(void) const
* Create a new playlist. * Create a new playlist.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
Ptr<Playlist>::Ref Ptr<Playlist>::Ref
TestStorageClient :: createPlaylist() throw () TestStorageClient :: createPlaylist(Ptr<SessionId>::Ref sessionId)
throw ()
{ {
// generate a new UniqueId -- TODO: fix UniqueId to make sure // generate a new UniqueId -- TODO: fix UniqueId to make sure
// this is really unique; not checked here! // this is really unique; not checked here!
@ -381,8 +389,9 @@ TestStorageClient :: createPlaylist() throw ()
* Tell if an audio clip exists. * Tell if an audio clip exists.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
const bool const bool
TestStorageClient :: existsAudioClip(Ptr<const UniqueId>::Ref id) const TestStorageClient :: existsAudioClip(Ptr<SessionId>::Ref sessionId,
throw () Ptr<UniqueId>::Ref id) const
throw ()
{ {
return audioClipMap.count(id->getId()) == 1 ? true : false; return audioClipMap.count(id->getId()) == 1 ? true : false;
} }
@ -392,7 +401,8 @@ TestStorageClient :: existsAudioClip(Ptr<const UniqueId>::Ref id) const
* Return an audio clip. * Return an audio clip.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
Ptr<AudioClip>::Ref Ptr<AudioClip>::Ref
TestStorageClient :: getAudioClip(Ptr<const UniqueId>::Ref id) const TestStorageClient :: getAudioClip(Ptr<SessionId>::Ref sessionId,
Ptr<UniqueId>::Ref id) const
throw (std::invalid_argument) throw (std::invalid_argument)
{ {
AudioClipMap::const_iterator it = audioClipMap.find(id->getId()); AudioClipMap::const_iterator it = audioClipMap.find(id->getId());
@ -409,7 +419,8 @@ TestStorageClient :: getAudioClip(Ptr<const UniqueId>::Ref id) const
* Acquire resources for an audio clip. * Acquire resources for an audio clip.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
Ptr<AudioClip>::Ref Ptr<AudioClip>::Ref
TestStorageClient :: acquireAudioClip(Ptr<const UniqueId>::Ref id) const TestStorageClient :: acquireAudioClip(Ptr<SessionId>::Ref sessionId,
Ptr<UniqueId>::Ref id) const
throw (std::logic_error) throw (std::logic_error)
{ {
AudioClipMap::const_iterator it = audioClipMap.find(id->getId()); AudioClipMap::const_iterator it = audioClipMap.find(id->getId());
@ -449,7 +460,8 @@ TestStorageClient :: acquireAudioClip(Ptr<const UniqueId>::Ref id) const
* Release an audio clip. * Release an audio clip.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void void
TestStorageClient :: releaseAudioClip(Ptr<AudioClip>::Ref audioClip) const TestStorageClient :: releaseAudioClip(Ptr<SessionId>::Ref sessionId,
Ptr<AudioClip>::Ref audioClip) const
throw (std::logic_error) throw (std::logic_error)
{ {
if (*(audioClip->getUri()) == "") { if (*(audioClip->getUri()) == "") {
@ -465,7 +477,8 @@ TestStorageClient :: releaseAudioClip(Ptr<AudioClip>::Ref audioClip) const
* Delete an audio clip. * Delete an audio clip.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void void
TestStorageClient :: deleteAudioClip(Ptr<const UniqueId>::Ref id) TestStorageClient :: deleteAudioClip(Ptr<SessionId>::Ref sessionId,
Ptr<UniqueId>::Ref id)
throw (std::invalid_argument) throw (std::invalid_argument)
{ {
// erase() returns the number of entries found & erased // erase() returns the number of entries found & erased
@ -479,7 +492,8 @@ TestStorageClient :: deleteAudioClip(Ptr<const UniqueId>::Ref id)
* Return a listing of all the audio clips in the audio clip store. * Return a listing of all the audio clips in the audio clip store.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
Ptr<std::vector<Ptr<AudioClip>::Ref> >::Ref Ptr<std::vector<Ptr<AudioClip>::Ref> >::Ref
TestStorageClient :: getAllAudioClips(void) const TestStorageClient :: getAllAudioClips(Ptr<SessionId>::Ref sessionId)
const
throw () throw ()
{ {
AudioClipMap::const_iterator it = audioClipMap.begin(); AudioClipMap::const_iterator it = audioClipMap.begin();

View File

@ -22,7 +22,7 @@
Author : $Author: fgerlits $ Author : $Author: fgerlits $
Version : $Revision: 1.14 $ Version : $Revision: 1.15 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/storage/src/TestStorageClient.h,v $ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/storage/src/TestStorageClient.h,v $
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
@ -47,6 +47,7 @@
#include "LiveSupport/Core/Playlist.h" #include "LiveSupport/Core/Playlist.h"
#include "LiveSupport/Core/Configurable.h" #include "LiveSupport/Core/Configurable.h"
#include "LiveSupport/Core/StorageClientInterface.h" #include "LiveSupport/Core/StorageClientInterface.h"
#include "LiveSupport/Core/SessionId.h"
namespace LiveSupport { namespace LiveSupport {
@ -67,7 +68,7 @@ using namespace LiveSupport::Core;
* A dummy storage client, only used for test purposes. * A dummy storage client, only used for test purposes.
* *
* @author $Author: fgerlits $ * @author $Author: fgerlits $
* @version $Revision: 1.14 $ * @version $Revision: 1.15 $
*/ */
class TestStorageClient : class TestStorageClient :
virtual public Configurable, virtual public Configurable,
@ -141,28 +142,32 @@ class TestStorageClient :
configure(const xmlpp::Element & element) configure(const xmlpp::Element & element)
throw (std::invalid_argument, throw (std::invalid_argument,
std::logic_error); std::logic_error);
/** /**
* Tell if a playlist with a given id exists. * Tell if a playlist with a given id exists.
* *
* @param sessionId the session ID from the authentication client
* @param id the id of the playlist to check for. * @param id the id of the playlist to check for.
* @return true if a playlist with the specified id exists, * @return true if a playlist with the specified id exists,
* false otherwise. * false otherwise.
*/ */
virtual const bool virtual const bool
existsPlaylist(Ptr<const UniqueId>::Ref id) const existsPlaylist(Ptr<SessionId>::Ref sessionId,
Ptr<UniqueId>::Ref id) const
throw (); throw ();
/** /**
* Return a playlist with the specified id. * Return a playlist with the specified id.
* *
* @param sessionId the session ID from the authentication client
* @param id the id of the playlist to return. * @param id the id of the playlist to return.
* @return the requested playlist. * @return the requested playlist.
* @exception std::invalid_argument if no playlist with the specified * @exception std::invalid_argument if no playlist with the specified
* id exists. * id exists.
*/ */
virtual Ptr<Playlist>::Ref virtual Ptr<Playlist>::Ref
getPlaylist(Ptr<const UniqueId>::Ref id) const getPlaylist(Ptr<SessionId>::Ref sessionId,
Ptr<UniqueId>::Ref id) const
throw (std::invalid_argument); throw (std::invalid_argument);
/** /**
@ -173,6 +178,7 @@ class TestStorageClient :
* appended to the temp storage path read from the configuration file, * appended to the temp storage path read from the configuration file,
* plus a ".smil" extension. * plus a ".smil" extension.
* *
* @param sessionId the session ID from the authentication client
* @param id the id of the playlist to acquire. * @param id the id of the playlist to acquire.
* @return a new Playlist instance containing a uri field which * @return a new Playlist instance containing a uri field which
* points to an executable (playable) SMIL representation of * points to an executable (playable) SMIL representation of
@ -181,69 +187,82 @@ class TestStorageClient :
* specified id exists. * specified id exists.
*/ */
virtual Ptr<Playlist>::Ref virtual Ptr<Playlist>::Ref
acquirePlaylist(Ptr<const UniqueId>::Ref id) const acquirePlaylist(Ptr<SessionId>::Ref sessionId,
Ptr<UniqueId>::Ref id) const
throw (std::logic_error); throw (std::logic_error);
/** /**
* Release the resources (audio clips, other playlists) used * Release the resources (audio clips, other playlists) used
* in a playlist. * in a playlist.
* *
* @param sessionId the session ID from the authentication client
* @param playlist the playlist to release. * @param playlist the playlist to release.
* @exception std::logic_error if the playlist has no uri field, * @exception std::logic_error if the playlist has no uri field,
* or the file does not exist, etc. * or the file does not exist, etc.
*/ */
virtual void virtual void
releasePlaylist(Ptr<Playlist>::Ref playlist) const releasePlaylist(Ptr<SessionId>::Ref sessionId,
Ptr<Playlist>::Ref playlist) const
throw (std::logic_error); throw (std::logic_error);
/** /**
* Delete the playlist with the specified id. * Delete the playlist with the specified id.
* *
* @param sessionId the session ID from the authentication client
* @param id the id of the playlist to be deleted. * @param id the id of the playlist to be deleted.
* @exception std::invalid_argument if no playlist with the specified * @exception std::invalid_argument if no playlist with the specified
* id exists. * id exists.
*/ */
virtual void virtual void
deletePlaylist(Ptr<const UniqueId>::Ref id) deletePlaylist(Ptr<SessionId>::Ref sessionId,
Ptr<UniqueId>::Ref id)
throw (std::invalid_argument); throw (std::invalid_argument);
/** /**
* Return a list of all playlists in the playlist store. * Return a list of all playlists in the playlist store.
* *
* @param sessionId the session ID from the authentication client
* @return a vector containing the playlists. * @return a vector containing the playlists.
*/ */
virtual Ptr<std::vector<Ptr<Playlist>::Ref> >::Ref virtual Ptr<std::vector<Ptr<Playlist>::Ref> >::Ref
getAllPlaylists(void) const throw (); getAllPlaylists(Ptr<SessionId>::Ref sessionId) const
throw ();
/** /**
* Create a new playlist. * Create a new playlist.
* *
* @param sessionId the session ID from the authentication client
* @return the newly created playlist. * @return the newly created playlist.
*/ */
virtual Ptr<Playlist>::Ref virtual Ptr<Playlist>::Ref
createPlaylist() throw (); createPlaylist(Ptr<SessionId>::Ref sessionId)
throw ();
/** /**
* Tell if an audio clip with a given id exists. * Tell if an audio clip with a given id exists.
* *
* @param sessionId the session ID from the authentication client
* @param id the id of the audio clip to check for. * @param id the id of the audio clip to check for.
* @return true if an audio clip with the specified id exists, * @return true if an audio clip with the specified id exists,
* false otherwise. * false otherwise.
*/ */
virtual const bool virtual const bool
existsAudioClip(Ptr<const UniqueId>::Ref id) const existsAudioClip(Ptr<SessionId>::Ref sessionId,
Ptr<UniqueId>::Ref id) const
throw (); throw ();
/** /**
* Return an audio clip with the specified id. * Return an audio clip with the specified id.
* *
* @param sessionId the session ID from the authentication client
* @param id the id of the audio clip to return. * @param id the id of the audio clip to return.
* @return the requested audio clip. * @return the requested audio clip.
* @exception std::invalid_argument if no audio clip with the * @exception std::invalid_argument if no audio clip with the
* specified id exists. * specified id exists.
*/ */
virtual Ptr<AudioClip>::Ref virtual Ptr<AudioClip>::Ref
getAudioClip(Ptr<const UniqueId>::Ref id) const getAudioClip(Ptr<SessionId>::Ref sessionId,
Ptr<UniqueId>::Ref id) const
throw (std::invalid_argument); throw (std::invalid_argument);
/** /**
@ -254,6 +273,7 @@ class TestStorageClient :
* Assumes URIs in the config file are relative paths prefixed by * Assumes URIs in the config file are relative paths prefixed by
* "file:"; e.g., "file:var/test1.mp3". * "file:"; e.g., "file:var/test1.mp3".
* *
* @param sessionId the session ID from the authentication client
* @param id the id of the audio clip to acquire. * @param id the id of the audio clip to acquire.
* @return a new AudioClip instance, containing a uri field which * @return a new AudioClip instance, containing a uri field which
* points to (a way of getting) the sound file. * points to (a way of getting) the sound file.
@ -261,38 +281,45 @@ class TestStorageClient :
* specified id exists. * specified id exists.
*/ */
virtual Ptr<AudioClip>::Ref virtual Ptr<AudioClip>::Ref
acquireAudioClip(Ptr<const UniqueId>::Ref id) const acquireAudioClip(Ptr<SessionId>::Ref sessionId,
Ptr<UniqueId>::Ref id) const
throw (std::logic_error); throw (std::logic_error);
/** /**
* Release the resource (sound file) used by an audio clip. * Release the resource (sound file) used by an audio clip.
* *
* @param id the id of the audio clip to release. * @param sessionId the session ID from the authentication client
* @param audioClip the audio clip to release.
* @exception std::logic_error if the audio clip has no uri field, * @exception std::logic_error if the audio clip has no uri field,
* or the file does not exist, etc. * or the file does not exist, etc.
*/ */
virtual void virtual void
releaseAudioClip(Ptr<AudioClip>::Ref audioClip) const releaseAudioClip(Ptr<SessionId>::Ref sessionId,
Ptr<AudioClip>::Ref audioClip) const
throw (std::logic_error); throw (std::logic_error);
/** /**
* Delete the audio clip with the specified id. * Delete the audio clip with the specified id.
* *
* @param sessionId the session ID from the authentication client
* @param id the id of the audio clip to be deleted. * @param id the id of the audio clip to be deleted.
* @exception std::invalid_argument if no audio clip with the * @exception std::invalid_argument if no audio clip with the
* specified id exists. * specified id exists.
*/ */
virtual void virtual void
deleteAudioClip(Ptr<const UniqueId>::Ref id) deleteAudioClip(Ptr<SessionId>::Ref sessionId,
Ptr<UniqueId>::Ref id)
throw (std::invalid_argument); throw (std::invalid_argument);
/** /**
* Return a list of all audio clips in the playlist store. * Return a list of all audio clips in the playlist store.
* *
* @param sessionId the session ID from the authentication client
* @return a vector containing the audio clips. * @return a vector containing the audio clips.
*/ */
virtual Ptr<std::vector<Ptr<AudioClip>::Ref> >::Ref virtual Ptr<std::vector<Ptr<AudioClip>::Ref> >::Ref
getAllAudioClips(void) const throw (); getAllAudioClips(Ptr<SessionId>::Ref sessionId) const
throw ();
}; };

View File

@ -22,7 +22,7 @@
Author : $Author: fgerlits $ Author : $Author: fgerlits $
Version : $Revision: 1.13 $ Version : $Revision: 1.14 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/storage/src/TestStorageClientTest.cxx,v $ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/storage/src/TestStorageClientTest.cxx,v $
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
@ -89,6 +89,8 @@ TestStorageClientTest :: setUp(void) throw ()
} catch (xmlpp::exception &e) { } catch (xmlpp::exception &e) {
CPPUNIT_FAIL("error parsing configuration file"); CPPUNIT_FAIL("error parsing configuration file");
} }
dummySessionId.reset(new SessionId("dummy"));
} }
@ -109,13 +111,13 @@ void
TestStorageClientTest :: firstTest(void) TestStorageClientTest :: firstTest(void)
throw (CPPUNIT_NS::Exception) throw (CPPUNIT_NS::Exception)
{ {
Ptr<UniqueId>::Ref id1(new UniqueId(1)); Ptr<UniqueId>::Ref id1(new UniqueId(1));
Ptr<UniqueId>::Ref id2(new UniqueId(77)); Ptr<UniqueId>::Ref id2(new UniqueId(77));
CPPUNIT_ASSERT(tsc->existsPlaylist(id1)); CPPUNIT_ASSERT(tsc->existsPlaylist(dummySessionId, id1));
CPPUNIT_ASSERT(!tsc->existsPlaylist(id2)); CPPUNIT_ASSERT(!tsc->existsPlaylist(dummySessionId, id2));
Ptr<Playlist>::Ref playlist = tsc->getPlaylist(id1); Ptr<Playlist>::Ref playlist = tsc->getPlaylist(dummySessionId, id1);
CPPUNIT_ASSERT(playlist->getId()->getId() == id1->getId()); CPPUNIT_ASSERT(playlist->getId()->getId() == id1->getId());
} }
@ -131,17 +133,17 @@ TestStorageClientTest :: deletePlaylistTest(void)
Ptr<UniqueId>::Ref id2(new UniqueId(77)); Ptr<UniqueId>::Ref id2(new UniqueId(77));
try { try {
tsc->deletePlaylist(id2); tsc->deletePlaylist(dummySessionId, id2);
CPPUNIT_FAIL("allowed to delete non-existent playlist"); CPPUNIT_FAIL("allowed to delete non-existent playlist");
} catch (std::invalid_argument &e) { } catch (std::invalid_argument &e) {
} }
try { try {
tsc->deletePlaylist(id1); tsc->deletePlaylist(dummySessionId, id1);
} catch (std::invalid_argument &e) { } catch (std::invalid_argument &e) {
CPPUNIT_FAIL("cannot delete existing playlist"); CPPUNIT_FAIL("cannot delete existing playlist");
} }
try { try {
tsc->deletePlaylist(id1); tsc->deletePlaylist(dummySessionId, id1);
CPPUNIT_FAIL("allowed to delete non-existent playlist"); CPPUNIT_FAIL("allowed to delete non-existent playlist");
} catch (std::invalid_argument &e) { } catch (std::invalid_argument &e) {
} }
@ -155,11 +157,11 @@ void
TestStorageClientTest :: getAllPlaylistsTest(void) TestStorageClientTest :: getAllPlaylistsTest(void)
throw (CPPUNIT_NS::Exception) throw (CPPUNIT_NS::Exception)
{ {
Ptr<std::vector<Ptr<Playlist>::Ref> >::Ref playlistVector = Ptr<std::vector<Ptr<Playlist>::Ref> >::Ref
tsc->getAllPlaylists(); playlistVector = tsc->getAllPlaylists(dummySessionId);
CPPUNIT_ASSERT(playlistVector->size() == 1); CPPUNIT_ASSERT(playlistVector->size() == 1);
Ptr<Playlist>::Ref playlist = (*playlistVector)[0]; Ptr<Playlist>::Ref playlist = (*playlistVector)[0];
CPPUNIT_ASSERT((int) (playlist->getId()->getId()) == 1); CPPUNIT_ASSERT((int) (playlist->getId()->getId()) == 1);
} }
@ -171,9 +173,9 @@ void
TestStorageClientTest :: createPlaylistTest(void) TestStorageClientTest :: createPlaylistTest(void)
throw (CPPUNIT_NS::Exception) throw (CPPUNIT_NS::Exception)
{ {
Ptr<Playlist>::Ref playlist = tsc->createPlaylist(); Ptr<Playlist>::Ref playlist = tsc->createPlaylist(dummySessionId);
CPPUNIT_ASSERT(tsc->existsPlaylist(playlist->getId())); CPPUNIT_ASSERT(tsc->existsPlaylist(dummySessionId, playlist->getId()));
} }
@ -184,26 +186,27 @@ void
TestStorageClientTest :: audioClipTest(void) TestStorageClientTest :: audioClipTest(void)
throw (CPPUNIT_NS::Exception) throw (CPPUNIT_NS::Exception)
{ {
Ptr<const UniqueId>::Ref id2(new UniqueId(10002)); Ptr<UniqueId>::Ref id2(new UniqueId(10002));
Ptr<const UniqueId>::Ref id77(new UniqueId(10077)); Ptr<UniqueId>::Ref id77(new UniqueId(10077));
CPPUNIT_ASSERT(tsc->existsAudioClip(id2)); CPPUNIT_ASSERT(tsc->existsAudioClip(dummySessionId, id2));
CPPUNIT_ASSERT(!tsc->existsAudioClip(id77)); CPPUNIT_ASSERT(!tsc->existsAudioClip(dummySessionId, id77));
Ptr<AudioClip>::Ref audioClip = tsc->getAudioClip(id2); Ptr<AudioClip>::Ref audioClip = tsc->getAudioClip(dummySessionId, id2);
CPPUNIT_ASSERT(audioClip->getId()->getId() == id2->getId()); CPPUNIT_ASSERT(audioClip->getId()->getId() == id2->getId());
CPPUNIT_ASSERT(audioClip->getPlaylength()->total_seconds() CPPUNIT_ASSERT(audioClip->getPlaylength()->total_seconds()
== 30*60); == 30*60);
Ptr<std::vector<Ptr<AudioClip>::Ref> >::Ref audioClipVector = Ptr<std::vector<Ptr<AudioClip>::Ref> >::Ref
tsc->getAllAudioClips(); audioClipVector
= tsc->getAllAudioClips(dummySessionId);
CPPUNIT_ASSERT(audioClipVector->size() == 2); CPPUNIT_ASSERT(audioClipVector->size() == 2);
audioClip = (*audioClipVector)[0]; audioClip = (*audioClipVector)[0];
CPPUNIT_ASSERT((int) (audioClip->getId()->getId()) == 10001); CPPUNIT_ASSERT((int) (audioClip->getId()->getId()) == 10001);
tsc->deleteAudioClip(id2); tsc->deleteAudioClip(dummySessionId, id2);
CPPUNIT_ASSERT(!tsc->existsAudioClip(id2)); CPPUNIT_ASSERT(!tsc->existsAudioClip(dummySessionId, id2));
} }
@ -214,12 +217,12 @@ void
TestStorageClientTest :: acquireAudioClipTest(void) TestStorageClientTest :: acquireAudioClipTest(void)
throw (CPPUNIT_NS::Exception) throw (CPPUNIT_NS::Exception)
{ {
Ptr<const UniqueId>::Ref id2(new UniqueId(10002)); Ptr<UniqueId>::Ref id2(new UniqueId(10002));
Ptr<const UniqueId>::Ref id77(new UniqueId(10077)); Ptr<UniqueId>::Ref id77(new UniqueId(10077));
Ptr<AudioClip>::Ref audioClip; Ptr<AudioClip>::Ref audioClip;
try { try {
audioClip = tsc->acquireAudioClip(id2); audioClip = tsc->acquireAudioClip(dummySessionId, id2);
} }
catch (std::logic_error &e) { catch (std::logic_error &e) {
std::string eMsg = "could not acquire audio clip:\n"; std::string eMsg = "could not acquire audio clip:\n";
@ -232,7 +235,7 @@ TestStorageClientTest :: acquireAudioClipTest(void)
CPPUNIT_ASSERT(*(audioClip->getUri()) == audioClipUri); CPPUNIT_ASSERT(*(audioClip->getUri()) == audioClipUri);
try { try {
tsc->releaseAudioClip(audioClip); tsc->releaseAudioClip(dummySessionId, audioClip);
} }
catch (std::logic_error &e) { catch (std::logic_error &e) {
std::string eMsg = "could not release audio clip:\n"; std::string eMsg = "could not release audio clip:\n";
@ -241,7 +244,7 @@ TestStorageClientTest :: acquireAudioClipTest(void)
} }
try { try {
audioClip = tsc->acquireAudioClip(id77); audioClip = tsc->acquireAudioClip(dummySessionId, id77);
CPPUNIT_FAIL("allowed to acquire non-existent audio clip"); CPPUNIT_FAIL("allowed to acquire non-existent audio clip");
} }
catch (std::logic_error &e) { catch (std::logic_error &e) {
@ -261,7 +264,7 @@ TestStorageClientTest :: acquirePlaylistTest(void)
Ptr<Playlist>::Ref playlist; Ptr<Playlist>::Ref playlist;
try { try {
playlist = tsc->acquirePlaylist(id1); playlist = tsc->acquirePlaylist(dummySessionId, id1);
} }
catch (std::logic_error &e) { catch (std::logic_error &e) {
std::string eMsg = "could not acquire playlist:\n"; std::string eMsg = "could not acquire playlist:\n";
@ -280,7 +283,7 @@ TestStorageClientTest :: acquirePlaylistTest(void)
string savedTempFilePath = playlist->getUri()->substr(7); string savedTempFilePath = playlist->getUri()->substr(7);
try { try {
tsc->releasePlaylist(playlist); tsc->releasePlaylist(dummySessionId, playlist);
} }
catch (std::logic_error &e) { catch (std::logic_error &e) {
std::string eMsg = "could not release playlist:\n"; std::string eMsg = "could not release playlist:\n";
@ -296,7 +299,7 @@ TestStorageClientTest :: acquirePlaylistTest(void)
ifs2.close(); ifs2.close();
try { try {
playlist = tsc->acquirePlaylist(id77); playlist = tsc->acquirePlaylist(dummySessionId, id77);
CPPUNIT_FAIL("allowed to acquire non-existent playlist"); CPPUNIT_FAIL("allowed to acquire non-existent playlist");
} }
catch (std::logic_error &e) { catch (std::logic_error &e) {

View File

@ -22,7 +22,7 @@
Author : $Author: fgerlits $ Author : $Author: fgerlits $
Version : $Revision: 1.7 $ Version : $Revision: 1.8 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/storage/src/TestStorageClientTest.h,v $ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/storage/src/TestStorageClientTest.h,v $
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
@ -58,7 +58,7 @@ namespace Storage {
* Unit test for the UploadPlaylistMetohd class. * Unit test for the UploadPlaylistMetohd class.
* *
* @author $Author: fgerlits $ * @author $Author: fgerlits $
* @version $Revision: 1.7 $ * @version $Revision: 1.8 $
* @see TestStorageClient * @see TestStorageClient
*/ */
class TestStorageClientTest : public CPPUNIT_NS::TestFixture class TestStorageClientTest : public CPPUNIT_NS::TestFixture
@ -79,6 +79,11 @@ class TestStorageClientTest : public CPPUNIT_NS::TestFixture
*/ */
Ptr<TestStorageClient>::Ref tsc; Ptr<TestStorageClient>::Ref tsc;
/**
* A dummy session ID to pass to the storage client.
*/
Ptr<SessionId>::Ref dummySessionId;
protected: protected:
/** /**

View File

@ -22,7 +22,7 @@
Author : $Author: fgerlits $ Author : $Author: fgerlits $
Version : $Revision: 1.2 $ Version : $Revision: 1.3 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/storage/src/WebStorageClient.cxx,v $ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/storage/src/WebStorageClient.cxx,v $
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
@ -90,21 +90,6 @@ static const std::string locationPortAttrName = "port";
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
static const std::string locationPathAttrName = "path"; static const std::string locationPathAttrName = "path";
/*------------------------------------------------------------------------------
* The name of the config child element for the storage server login
*----------------------------------------------------------------------------*/
static const std::string identityConfigElementName = "identity";
/*------------------------------------------------------------------------------
* The name of the config child element for the storage server login name
*----------------------------------------------------------------------------*/
static const std::string identityLoginAttrName = "login";
/*------------------------------------------------------------------------------
* The name of the config child element for the storage server login password
*----------------------------------------------------------------------------*/
static const std::string identityPasswordAttrName = "pass";
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ constants for the SMIL file */ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ constants for the SMIL file */
@ -174,37 +159,6 @@ static const std::string errorCodeParamName = "faultCode";
static const std::string errorMessageParamName = "faultString"; static const std::string errorMessageParamName = "faultString";
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ storage server constants: login */
/*------------------------------------------------------------------------------
* The name of the login method on the storage server
*----------------------------------------------------------------------------*/
static const std::string loginMethodName = "locstor.login";
/*------------------------------------------------------------------------------
* The name of the login parameter in the input structure
*----------------------------------------------------------------------------*/
static const std::string loginMethodLoginParamName = "login";
/*------------------------------------------------------------------------------
* The name of the password parameter in the input structure
*----------------------------------------------------------------------------*/
static const std::string loginMethodPasswordParamName = "pass";
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ storage server constants: logout */
/*------------------------------------------------------------------------------
* The name of the logout method on the storage server
*----------------------------------------------------------------------------*/
static const std::string logoutMethodName = "locstor.logout";
/*------------------------------------------------------------------------------
* The name of the session ID parameter in the input structure
*----------------------------------------------------------------------------*/
static const std::string logoutMethodSessionIdParamName = "sessid";
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ storage server constants: existsAudioClip */ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ storage server constants: existsAudioClip */
/*------------------------------------------------------------------------------ /*------------------------------------------------------------------------------
@ -224,6 +178,25 @@ static const std::string existsAudioClipMethodSessionIdParamName = "sessid";
static const std::string existsAudioClipMethodAudioClipIdParamName = "gunid"; static const std::string existsAudioClipMethodAudioClipIdParamName = "gunid";
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ storage server constants: getAudioClip */
/*------------------------------------------------------------------------------
* The name of the get audio clip method on the storage server
*----------------------------------------------------------------------------*/
static const std::string getAudioClipMethodName
= "locstor.getAudioClip";
/*------------------------------------------------------------------------------
* The name of the session ID parameter in the input structure
*----------------------------------------------------------------------------*/
static const std::string getAudioClipMethodSessionIdParamName = "sessid";
/*------------------------------------------------------------------------------
* The name of the audio clip unique ID parameter in the input structure
*----------------------------------------------------------------------------*/
static const std::string getAudioClipMethodAudioClipIdParamName = "gunid";
/* =============================================== local function prototypes */ /* =============================================== local function prototypes */
@ -299,96 +272,6 @@ WebStorageClient :: configure(const xmlpp::Element & element)
eMsg += " XML element"; eMsg += " XML element";
throw std::invalid_argument(eMsg); throw std::invalid_argument(eMsg);
} }
// read the login and password to the storage server
childNodes = element.get_children(identityConfigElementName);
it = childNodes.begin();
if (it == childNodes.end()) {
std::string eMsg = "missing ";
eMsg += identityConfigElementName;
eMsg += " XML element";
throw std::invalid_argument(eMsg);
}
const xmlpp::Element * identityConfigElement
= dynamic_cast<const xmlpp::Element*> (*it);
if (!(attribute = identityConfigElement
->get_attribute(identityLoginAttrName))) {
std::string eMsg = "Missing attribute ";
eMsg += identityLoginAttrName;
throw std::invalid_argument(eMsg);
}
storageServerLogin = attribute->get_value();
if (!(attribute = identityConfigElement
->get_attribute(identityPasswordAttrName))) {
std::string eMsg = "Missing attribute ";
eMsg += identityPasswordAttrName;
throw std::invalid_argument(eMsg);
}
storageServerPassword = attribute->get_value();
++it;
if (it != childNodes.end()) {
std::string eMsg = "more than one ";
eMsg += identityConfigElementName;
eMsg += " XML element";
throw std::invalid_argument(eMsg);
}
}
/*------------------------------------------------------------------------------
* Login to the storage server.
*----------------------------------------------------------------------------*/
std::string
WebStorageClient :: loginToStorageServer(void) const
throw ()
{
XmlRpcValue parameters;
XmlRpcValue result;
XmlRpcClient xmlRpcClient(storageServerName.c_str(), storageServerPort,
storageServerPath.c_str(), false);
parameters[loginMethodLoginParamName] = storageServerLogin.c_str();
parameters[loginMethodPasswordParamName] = storageServerPassword.c_str();
if (!xmlRpcClient.execute(loginMethodName.c_str(), parameters, result)) {
// throw exception;
}
if (result.getType() != XmlRpcValue::TypeString) {
return std::string(""); // change to throw exception
}
return std::string(result);
}
/*------------------------------------------------------------------------------
* Logout from the storage server.
*----------------------------------------------------------------------------*/
void
WebStorageClient :: logoutFromStorageServer(std::string sessionId) const
throw ()
{
XmlRpcValue parameters;
XmlRpcValue result;
XmlRpcClient xmlRpcClient(storageServerName.c_str(), storageServerPort,
storageServerPath.c_str(), false);
parameters[logoutMethodSessionIdParamName] = sessionId.c_str();
if (!xmlRpcClient.execute(logoutMethodName.c_str(), parameters, result)) {
//throw exception;
}
if (xmlRpcClient.isFault()) {
// throw exception
}
} }
@ -396,8 +279,9 @@ WebStorageClient :: logoutFromStorageServer(std::string sessionId) const
* Tell if a playlist exists. * Tell if a playlist exists.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
const bool const bool
WebStorageClient :: existsPlaylist(Ptr<const UniqueId>::Ref id) const WebStorageClient :: existsPlaylist(Ptr<SessionId>::Ref sessionId,
throw () Ptr<UniqueId>::Ref id) const
throw (std::logic_error)
{ {
return false; return false;
} }
@ -407,8 +291,9 @@ WebStorageClient :: existsPlaylist(Ptr<const UniqueId>::Ref id) const
* Return a playlist. * Return a playlist.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
Ptr<Playlist>::Ref Ptr<Playlist>::Ref
WebStorageClient :: getPlaylist(Ptr<const UniqueId>::Ref id) const WebStorageClient :: getPlaylist(Ptr<SessionId>::Ref sessionId,
throw (std::invalid_argument) Ptr<UniqueId>::Ref id) const
throw (std::logic_error)
{ {
Ptr<Playlist>::Ref playlist(new Playlist); Ptr<Playlist>::Ref playlist(new Playlist);
return playlist; return playlist;
@ -419,7 +304,8 @@ WebStorageClient :: getPlaylist(Ptr<const UniqueId>::Ref id) const
* Acquire resources for a playlist. * Acquire resources for a playlist.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
Ptr<Playlist>::Ref Ptr<Playlist>::Ref
WebStorageClient :: acquirePlaylist(Ptr<const UniqueId>::Ref id) const WebStorageClient :: acquirePlaylist(Ptr<SessionId>::Ref sessionId,
Ptr<UniqueId>::Ref id) const
throw (std::logic_error) throw (std::logic_error)
{ {
Ptr<Playlist>::Ref playlist(new Playlist); Ptr<Playlist>::Ref playlist(new Playlist);
@ -431,7 +317,8 @@ WebStorageClient :: acquirePlaylist(Ptr<const UniqueId>::Ref id) const
* Release a playlist. * Release a playlist.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void void
WebStorageClient :: releasePlaylist(Ptr<Playlist>::Ref playlist) const WebStorageClient :: releasePlaylist(Ptr<SessionId>::Ref sessionId,
Ptr<Playlist>::Ref playlist) const
throw (std::logic_error) throw (std::logic_error)
{ {
@ -442,8 +329,9 @@ WebStorageClient :: releasePlaylist(Ptr<Playlist>::Ref playlist) const
* Delete a playlist. * Delete a playlist.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void void
WebStorageClient :: deletePlaylist(Ptr<const UniqueId>::Ref id) WebStorageClient :: deletePlaylist(Ptr<SessionId>::Ref sessionId,
throw (std::invalid_argument) Ptr<UniqueId>::Ref id)
throw (std::logic_error)
{ {
} }
@ -453,8 +341,8 @@ WebStorageClient :: deletePlaylist(Ptr<const UniqueId>::Ref id)
* Return a listing of all the playlists in the playlist store. * Return a listing of all the playlists in the playlist store.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
Ptr<std::vector<Ptr<Playlist>::Ref> >::Ref Ptr<std::vector<Ptr<Playlist>::Ref> >::Ref
WebStorageClient :: getAllPlaylists(void) const WebStorageClient :: getAllPlaylists(Ptr<SessionId>::Ref sessionId) const
throw () throw (std::logic_error)
{ {
Ptr<std::vector<Ptr<Playlist>::Ref> >::Ref playlistVector( Ptr<std::vector<Ptr<Playlist>::Ref> >::Ref playlistVector(
new std::vector<Ptr<Playlist>::Ref>); new std::vector<Ptr<Playlist>::Ref>);
@ -466,7 +354,8 @@ WebStorageClient :: getAllPlaylists(void) const
* Create a new playlist. * Create a new playlist.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
Ptr<Playlist>::Ref Ptr<Playlist>::Ref
WebStorageClient :: createPlaylist() throw () WebStorageClient :: createPlaylist(Ptr<SessionId>::Ref sessionId)
throw (std::logic_error)
{ {
Ptr<Playlist>::Ref playlist(new Playlist); Ptr<Playlist>::Ref playlist(new Playlist);
return playlist; return playlist;
@ -477,29 +366,37 @@ WebStorageClient :: createPlaylist() throw ()
* Tell if an audio clip exists. * Tell if an audio clip exists.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
const bool const bool
WebStorageClient :: existsAudioClip(Ptr<const UniqueId>::Ref id) const WebStorageClient :: existsAudioClip(Ptr<SessionId>::Ref sessionId,
throw () Ptr<UniqueId>::Ref id) const
throw (std::logic_error)
{ {
std::string sessionId = loginToStorageServer();
XmlRpcValue parameters; XmlRpcValue parameters;
XmlRpcValue result; XmlRpcValue result;
XmlRpcClient xmlRpcClient(storageServerName.c_str(), storageServerPort, XmlRpcClient xmlRpcClient(storageServerName.c_str(), storageServerPort,
storageServerPath.c_str(), false); storageServerPath.c_str(), false);
parameters[existsAudioClipMethodSessionIdParamName] = sessionId.c_str(); parameters[existsAudioClipMethodSessionIdParamName]
parameters[existsAudioClipMethodAudioClipIdParamName] = int(id->getId()); = sessionId->getId().c_str();
parameters[existsAudioClipMethodAudioClipIdParamName]
= int(id->getId());
if (!xmlRpcClient.execute(existsAudioClipMethodName.c_str(), if (!xmlRpcClient.execute(existsAudioClipMethodName.c_str(),
parameters, result)) { parameters, result)) {
// throw exception std::string eMsg = "cannot execute XML-RPC method '";
eMsg += existsAudioClipMethodName;
eMsg += "'";
throw std::logic_error(eMsg);
} }
logoutFromStorageServer(sessionId);
if (result.getType() != XmlRpcValue::TypeBoolean) { if (xmlRpcClient.isFault()
return false; // change to throw exception || result.getType() != XmlRpcValue::TypeBoolean) {
std::stringstream eMsg;
eMsg << "XML-RPC method '"
<< existsAudioClipMethodName
<< "' returned error message:\n"
<< result;
throw std::logic_error(eMsg.str());
} }
return bool(result); return bool(result);
@ -510,11 +407,57 @@ WebStorageClient :: existsAudioClip(Ptr<const UniqueId>::Ref id) const
* Return an audio clip. * Return an audio clip.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
Ptr<AudioClip>::Ref Ptr<AudioClip>::Ref
WebStorageClient :: getAudioClip(Ptr<const UniqueId>::Ref id) const WebStorageClient :: getAudioClip(Ptr<SessionId>::Ref sessionId,
throw (std::invalid_argument) Ptr<UniqueId>::Ref id) const
throw (std::logic_error)
{ {
Ptr<AudioClip>::Ref playlist(new AudioClip); XmlRpcValue parameters;
return playlist; XmlRpcValue result;
XmlRpcClient xmlRpcClient(storageServerName.c_str(), storageServerPort,
storageServerPath.c_str(), false);
parameters[getAudioClipMethodSessionIdParamName]
= sessionId->getId().c_str();
parameters[getAudioClipMethodAudioClipIdParamName]
= int(id->getId());
if (!xmlRpcClient.execute(getAudioClipMethodName.c_str(),
parameters, result)) {
std::string eMsg = "cannot execute XML-RPC method '";
eMsg += getAudioClipMethodName;
eMsg += "'";
throw std::logic_error(eMsg);
}
if (xmlRpcClient.isFault()
|| result.getType() != XmlRpcValue::TypeString) {
std::stringstream eMsg;
eMsg << "XML-RPC method '"
<< getAudioClipMethodName
<< "' returned error message:\n"
<< result;
throw std::logic_error(eMsg.str());
}
Ptr<std::string>::Ref xmlAudioClip = decodeString(result);
Ptr<AudioClip>::Ref audioClip;
try {
Ptr<xmlpp::DomParser>::Ref parser(new xmlpp::DomParser());
parser->parse_memory(*xmlAudioClip);
const xmlpp::Document * document = parser->get_document();
const xmlpp::Element * root = document->get_root_node();
audioClip.reset(new AudioClip);
audioClip->configure(*root);
} catch (std::invalid_argument &e) {
throw std::logic_error("semantic error in audio clip metafile");
} catch (xmlpp::exception &e) {
throw std::logic_error("error parsing audio clip metafile");
}
return audioClip;
} }
@ -522,7 +465,8 @@ WebStorageClient :: getAudioClip(Ptr<const UniqueId>::Ref id) const
* Acquire resources for an audio clip. * Acquire resources for an audio clip.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
Ptr<AudioClip>::Ref Ptr<AudioClip>::Ref
WebStorageClient :: acquireAudioClip(Ptr<const UniqueId>::Ref id) const WebStorageClient :: acquireAudioClip(Ptr<SessionId>::Ref sessionId,
Ptr<UniqueId>::Ref id) const
throw (std::logic_error) throw (std::logic_error)
{ {
Ptr<AudioClip>::Ref playlist(new AudioClip); Ptr<AudioClip>::Ref playlist(new AudioClip);
@ -535,7 +479,8 @@ WebStorageClient :: acquireAudioClip(Ptr<const UniqueId>::Ref id) const
* Release an audio clip. * Release an audio clip.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void void
WebStorageClient :: releaseAudioClip(Ptr<AudioClip>::Ref audioClip) const WebStorageClient :: releaseAudioClip(Ptr<SessionId>::Ref sessionId,
Ptr<AudioClip>::Ref audioClip) const
throw (std::logic_error) throw (std::logic_error)
{ {
@ -546,8 +491,9 @@ WebStorageClient :: releaseAudioClip(Ptr<AudioClip>::Ref audioClip) const
* Delete an audio clip. * Delete an audio clip.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void void
WebStorageClient :: deleteAudioClip(Ptr<const UniqueId>::Ref id) WebStorageClient :: deleteAudioClip(Ptr<SessionId>::Ref sessionId,
throw (std::invalid_argument) Ptr<UniqueId>::Ref id)
throw (std::logic_error)
{ {
} }
@ -557,11 +503,69 @@ WebStorageClient :: deleteAudioClip(Ptr<const UniqueId>::Ref id)
* Return a listing of all the audio clips in the audio clip store. * Return a listing of all the audio clips in the audio clip store.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
Ptr<std::vector<Ptr<AudioClip>::Ref> >::Ref Ptr<std::vector<Ptr<AudioClip>::Ref> >::Ref
WebStorageClient :: getAllAudioClips(void) const WebStorageClient :: getAllAudioClips(Ptr<SessionId>::Ref sessionId)
throw () const
throw (std::logic_error)
{ {
Ptr<std::vector<Ptr<AudioClip>::Ref> >::Ref audioClipVector( Ptr<std::vector<Ptr<AudioClip>::Ref> >::Ref audioClipVector(
new std::vector<Ptr<AudioClip>::Ref>); new std::vector<Ptr<AudioClip>::Ref>);
return audioClipVector; return audioClipVector;
} }
/*------------------------------------------------------------------------------
* Convert a hex digit to an int. This is used by decodeString().
*----------------------------------------------------------------------------*/
int
WebStorageClient :: hexDigitToChar(const char &hexDigit) const
throw ()
{
if (hexDigit >= '0' && hexDigit <= '9') {
return hexDigit - '0';
}
else if (hexDigit >= 'a' && hexDigit <= 'f') {
return hexDigit - 'a' + 10;
}
else if (hexDigit >= 'A' && hexDigit <= 'F') {
return hexDigit - 'A' + 10;
}
else {
return 0;
}
}
/*------------------------------------------------------------------------------
* Decode an escaped string.
*----------------------------------------------------------------------------*/
Ptr<std::string>::Ref
WebStorageClient :: decodeString(const std::string &inputString) const
throw ()
{
Ptr<std::string>::Ref outputString(new std::string);
char nextChar;
std::string::const_iterator it = inputString.begin();
while (it != inputString.end()) {
nextChar = *(it++);
if (nextChar == '%') {
if (it == inputString.end()) {
nextChar = '?';
}
else {
nextChar = hexDigitToChar(*(it++));
if (it == inputString.end()) {
nextChar = '?';
}
else {
nextChar *= 16;
nextChar += hexDigitToChar(*(it++));
}
}
}
outputString->push_back(nextChar);
}
return outputString;
}

View File

@ -22,7 +22,7 @@
Author : $Author: fgerlits $ Author : $Author: fgerlits $
Version : $Revision: 1.2 $ Version : $Revision: 1.3 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/storage/src/WebStorageClient.h,v $ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/storage/src/WebStorageClient.h,v $
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
@ -47,6 +47,7 @@
#include "LiveSupport/Core/Playlist.h" #include "LiveSupport/Core/Playlist.h"
#include "LiveSupport/Core/Configurable.h" #include "LiveSupport/Core/Configurable.h"
#include "LiveSupport/Core/StorageClientInterface.h" #include "LiveSupport/Core/StorageClientInterface.h"
#include "LiveSupport/Core/SessionId.h"
namespace LiveSupport { namespace LiveSupport {
@ -67,7 +68,7 @@ using namespace LiveSupport::Core;
* An interface to the (possibly remote) php storage server. * An interface to the (possibly remote) php storage server.
* *
* @author $Author: fgerlits $ * @author $Author: fgerlits $
* @version $Revision: 1.2 $ * @version $Revision: 1.3 $
*/ */
class WebStorageClient : class WebStorageClient :
virtual public Configurable, virtual public Configurable,
@ -100,41 +101,31 @@ class WebStorageClient :
std::string storageServerPath; std::string storageServerPath;
/** /**
* The login name to the storage server. * Decode an escaped %73%74%72%69%6E%67 to a normal string.
* This is really bad and low-level; to be replaced later.
*
* @return a pointer to a newly allocated string which contains
* the decoded value.
*/ */
std::string storageServerLogin; Ptr<std::string>::Ref
decodeString(const std::string &inputString) const
throw ();
/** /**
* The password to the storage server. * Convert a hex digit 0..9 | a..f | A..F to an int.
* This is used in decodeString().
*
* @return an int with the converted value.
*/ */
std::string storageServerPassword; int
hexDigitToChar(const char &hexDigit) const
/** throw ();
* Login to the storage server, using the data read from the
* configuration file. If successful, a new session ID is returned.
*
* @return the new session ID
*/
std::string
loginToStorageServer(void) const throw ();
/**
* Logout from the storage server. The parameter is the ID of
* the session to end (returned previously by storageServerLogin()).
*
* @param sessionId the ID of the session to end
*/
void
logoutFromStorageServer(std::string sessionId) const
throw ();
public: public:
/** /**
* A virtual destructor, as this class has virtual functions. * A virtual destructor, as this class has virtual functions.
*/ */
virtual virtual
~WebStorageClient(void) throw () ~WebStorageClient(void) throw ()
{ {
} }
@ -145,7 +136,7 @@ class WebStorageClient :
* @return the name of the expected XML configuration element. * @return the name of the expected XML configuration element.
*/ */
static const std::string static const std::string
getConfigElementName(void) throw () getConfigElementName(void) throw ()
{ {
return configElementNameStr; return configElementNameStr;
} }
@ -167,25 +158,31 @@ class WebStorageClient :
/** /**
* Tell if a playlist with a given id exists. * Tell if a playlist with a given id exists.
* *
* @param sessionId the session ID from the authentication client
* @param id the id of the playlist to check for. * @param id the id of the playlist to check for.
* @return true if a playlist with the specified id exists, * @return true if a playlist with the specified id exists,
* false otherwise. * false otherwise.
* @exception std::logic_error if we have not logged in yet.
*/ */
virtual const bool virtual const bool
existsPlaylist(Ptr<const UniqueId>::Ref id) const existsPlaylist(Ptr<SessionId>::Ref sessionId,
throw (); Ptr<UniqueId>::Ref id) const
throw (std::logic_error);
/** /**
* Return a playlist with the specified id. * Return a playlist with the specified id.
* *
* @param sessionId the session ID from the authentication client
* @param id the id of the playlist to return. * @param id the id of the playlist to return.
* @return the requested playlist. * @return the requested playlist.
* @exception std::invalid_argument if no playlist with the specified * @exception std::logic_error if no playlist with the specified
* id exists. * id exists.
* @exception std::logic_error if we have not logged in yet.
*/ */
virtual Ptr<Playlist>::Ref virtual Ptr<Playlist>::Ref
getPlaylist(Ptr<const UniqueId>::Ref id) const getPlaylist(Ptr<SessionId>::Ref sessionId,
throw (std::invalid_argument); Ptr<UniqueId>::Ref id) const
throw (std::logic_error);
/** /**
* Acquire the resources for the playlist. * Acquire the resources for the playlist.
@ -195,79 +192,100 @@ class WebStorageClient :
* appended to the temp storage path read from the configuration file, * appended to the temp storage path read from the configuration file,
* plus a ".smil" extension. * plus a ".smil" extension.
* *
* @param sessionId the session ID from the authentication client
* @param id the id of the playlist to acquire. * @param id the id of the playlist to acquire.
* @return a new Playlist instance containing a uri field which * @return a new Playlist instance containing a uri field which
* points to an executable (playable) SMIL representation of * points to an executable (playable) SMIL representation of
* the playlist (in the local storage). * the playlist (in the local storage).
* @exception std::invalid_argument if no playlist with the specified * @exception std::logic_error if no playlist with the specified
* specified id exists. * specified id exists.
* @exception std::logic_error if we have not logged in yet.
*/ */
virtual Ptr<Playlist>::Ref virtual Ptr<Playlist>::Ref
acquirePlaylist(Ptr<const UniqueId>::Ref id) const acquirePlaylist(Ptr<SessionId>::Ref sessionId,
throw (std::logic_error); Ptr<UniqueId>::Ref id) const
throw (std::logic_error);
/** /**
* Release the resources (audio clips, other playlists) used * Release the resources (audio clips, other playlists) used
* in a playlist. The uri of the playlist is no longer valid, and * in a playlist. The uri of the playlist is no longer valid, and
* the uri field is deleted. * the uri field is deleted.
* *
* @param sessionId the session ID from the authentication client
* @param playlist the playlist to release. * @param playlist the playlist to release.
* @exception std::logic_error if the playlist has no uri field, * @exception std::logic_error if the playlist has no uri field,
* or the file does not exist, etc. * or the file does not exist, etc.
* @exception std::logic_error if we have not logged in yet.
*/ */
virtual void virtual void
releasePlaylist(Ptr<Playlist>::Ref playlist) const releasePlaylist(Ptr<SessionId>::Ref sessionId,
throw (std::logic_error); Ptr<Playlist>::Ref playlist) const
throw (std::logic_error);
/** /**
* Delete the playlist with the specified id. * Delete the playlist with the specified id.
* *
* @param sessionId the session ID from the authentication client
* @param id the id of the playlist to be deleted. * @param id the id of the playlist to be deleted.
* @exception std::invalid_argument if no playlist with the specified * @exception std::logic_error if no playlist with the specified
* id exists. * id exists.
* @exception std::logic_error if we have not logged in yet.
*/ */
virtual void virtual void
deletePlaylist(Ptr<const UniqueId>::Ref id) deletePlaylist(Ptr<SessionId>::Ref sessionId,
throw (std::invalid_argument); Ptr<UniqueId>::Ref id)
throw (std::logic_error);
/** /**
* Return a list of all playlists in the playlist store. * Return a list of all playlists in the playlist store.
* *
* @param sessionId the session ID from the authentication client
* @return a vector containing the playlists. * @return a vector containing the playlists.
* @exception std::logic_error if we have not logged in yet.
*/ */
virtual Ptr<std::vector<Ptr<Playlist>::Ref> >::Ref virtual Ptr<std::vector<Ptr<Playlist>::Ref> >::Ref
getAllPlaylists(void) const throw (); getAllPlaylists(Ptr<SessionId>::Ref sessionId) const
throw (std::logic_error);
/** /**
* Create a new playlist. * Create a new playlist.
* *
* @param sessionId the session ID from the authentication client
* @return the newly created playlist. * @return the newly created playlist.
* @exception std::logic_error if we have not logged in yet.
*/ */
virtual Ptr<Playlist>::Ref virtual Ptr<Playlist>::Ref
createPlaylist() throw (); createPlaylist(Ptr<SessionId>::Ref sessionId)
throw (std::logic_error);
/** /**
* Tell if an audio clip with a given id exists. * Tell if an audio clip with a given id exists.
* *
* @param sessionId the session ID from the authentication client
* @param id the id of the audio clip to check for. * @param id the id of the audio clip to check for.
* @return true if an audio clip with the specified id exists, * @return true if an audio clip with the specified id exists,
* false otherwise. * false otherwise.
* @exception std::logic_error if we have not logged in yet
*/ */
virtual const bool virtual const bool
existsAudioClip(Ptr<const UniqueId>::Ref id) const existsAudioClip(Ptr<SessionId>::Ref sessionId,
throw (); Ptr<UniqueId>::Ref id) const
throw (std::logic_error);
/** /**
* Return an audio clip with the specified id. * Return an audio clip with the specified id.
* *
* @param sessionId the session ID from the authentication client
* @param id the id of the audio clip to return. * @param id the id of the audio clip to return.
* @return the requested audio clip. * @return the requested audio clip.
* @exception std::invalid_argument if no audio clip with the * @exception std::logic_error if no audio clip with the
* specified id exists. * specified id exists.
* @exception std::logic_error if we have not logged in yet.
*/ */
virtual Ptr<AudioClip>::Ref virtual Ptr<AudioClip>::Ref
getAudioClip(Ptr<const UniqueId>::Ref id) const getAudioClip(Ptr<SessionId>::Ref sessionId,
throw (std::invalid_argument); Ptr<UniqueId>::Ref id) const
throw (std::logic_error);
/** /**
* Acquire the resources for the audio clip with the specified id. * Acquire the resources for the audio clip with the specified id.
@ -275,47 +293,59 @@ class WebStorageClient :
* Returns an AudioClip instance with a valid uri field, which points * Returns an AudioClip instance with a valid uri field, which points
* to the binary sound file. * to the binary sound file.
* *
* @param sessionId the session ID from the authentication client
* @param id the id of the audio clip to acquire. * @param id the id of the audio clip to acquire.
* @return a new AudioClip instance, containing a uri field which * @return a new AudioClip instance, containing a uri field which
* points to (a way of getting) the sound file. * points to (a way of getting) the sound file.
* @exception std::invalid_argument if no audio clip with the * @exception std::logic_error if no audio clip with the
* specified id exists. * specified id exists.
* @exception std::logic_error if we have not logged in yet.
*/ */
virtual Ptr<AudioClip>::Ref virtual Ptr<AudioClip>::Ref
acquireAudioClip(Ptr<const UniqueId>::Ref id) const acquireAudioClip(Ptr<SessionId>::Ref sessionId,
throw (std::logic_error); Ptr<UniqueId>::Ref id) const
throw (std::logic_error);
/** /**
* Release the resource (sound file) used by an audio clip. The * Release the resource (sound file) used by an audio clip. The
* uri of the audio clip is no longer valid, and the uri field is * uri of the audio clip is no longer valid, and the uri field is
* deleted. * deleted.
* *
* @param id the id of the audio clip to release. * @param sessionId the session ID from the authentication client
* @param audioClip the audio clip to release.
* @exception std::logic_error if the audio clip has no uri field, * @exception std::logic_error if the audio clip has no uri field,
* or the file does not exist, etc. * or the file does not exist, etc.
* @exception std::logic_error if we have not logged in yet.
*/ */
virtual void virtual void
releaseAudioClip(Ptr<AudioClip>::Ref audioClip) const releaseAudioClip(Ptr<SessionId>::Ref sessionId,
throw (std::logic_error); Ptr<AudioClip>::Ref audioClip) const
throw (std::logic_error);
/** /**
* Delete the audio clip with the specified id. * Delete the audio clip with the specified id.
* *
* @param sessionId the session ID from the authentication client
* @param id the id of the audio clip to be deleted. * @param id the id of the audio clip to be deleted.
* @exception std::invalid_argument if no audio clip with the * @exception std::logic_error if no audio clip with the
* specified id exists. * specified id exists.
* @exception std::logic_error if we have not logged in yet.
*/ */
virtual void virtual void
deleteAudioClip(Ptr<const UniqueId>::Ref id) deleteAudioClip(Ptr<SessionId>::Ref sessionId,
throw (std::invalid_argument); Ptr<UniqueId>::Ref id)
throw (std::logic_error);
/** /**
* Return a list of all audio clips in the playlist store. * Return a list of all audio clips in the playlist store.
* *
* @param sessionId the session ID from the authentication client
* @return a vector containing the audio clips. * @return a vector containing the audio clips.
* @exception std::logic_error if we have not logged in yet.
*/ */
virtual Ptr<std::vector<Ptr<AudioClip>::Ref> >::Ref virtual Ptr<std::vector<Ptr<AudioClip>::Ref> >::Ref
getAllAudioClips(void) const throw (); getAllAudioClips(Ptr<SessionId>::Ref sessionId) const
throw (std::logic_error);
}; };

View File

@ -22,7 +22,7 @@
Author : $Author: fgerlits $ Author : $Author: fgerlits $
Version : $Revision: 1.2 $ Version : $Revision: 1.3 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/storage/src/WebStorageClientTest.cxx,v $ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/storage/src/WebStorageClientTest.cxx,v $
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
@ -45,11 +45,13 @@
#include <iostream> #include <iostream>
#include "WebStorageClient.h" #include "WebStorageClient.h"
#include "WebStorageClientTest.h" #include "LiveSupport/Core/SessionId.h"
#include "WebStorageClientTest.h"
using namespace std; using namespace std;
using namespace LiveSupport::Core; using namespace LiveSupport::Core;
using namespace LiveSupport::Authentication;
using namespace LiveSupport::Storage; using namespace LiveSupport::Storage;
/* =================================================== local data structures */ /* =================================================== local data structures */
@ -60,9 +62,15 @@ using namespace LiveSupport::Storage;
CPPUNIT_TEST_SUITE_REGISTRATION(WebStorageClientTest); CPPUNIT_TEST_SUITE_REGISTRATION(WebStorageClientTest);
/** /**
* The name of the configuration file for the storage client factory daemon. * The name of the configuration file for the web storage client.
*/ */
static const std::string configFileName = "etc/webStorage.xml"; static const std::string storageConfigFileName = "etc/webStorage.xml";
/**
* The name of the configuration file for the authentication factory.
*/
static const std::string authenticationFactoryConfigFileName
= "etc/authenticationClient.xml";
/* =============================================== local function prototypes */ /* =============================================== local function prototypes */
@ -76,18 +84,35 @@ static const std::string configFileName = "etc/webStorage.xml";
void void
WebStorageClientTest :: setUp(void) throw () WebStorageClientTest :: setUp(void) throw ()
{ {
Ptr<AuthenticationClientFactory>::Ref acf;
acf = AuthenticationClientFactory::getInstance();
try { try {
Ptr<xmlpp::DomParser>::Ref parser( Ptr<xmlpp::DomParser>::Ref parser(
new xmlpp::DomParser(configFileName, true)); new xmlpp::DomParser(authenticationFactoryConfigFileName, true));
const xmlpp::Document * document = parser->get_document();
const xmlpp::Element * root = document->get_root_node();
acf->configure(*root);
} catch (std::invalid_argument &e) {
CPPUNIT_FAIL("semantic error in authentication configuration file");
} catch (xmlpp::exception &e) {
CPPUNIT_FAIL("error parsing authentication configuration file");
}
authentication = acf->getAuthenticationClient();
try {
Ptr<xmlpp::DomParser>::Ref parser(
new xmlpp::DomParser(storageConfigFileName, true));
const xmlpp::Document * document = parser->get_document(); const xmlpp::Document * document = parser->get_document();
const xmlpp::Element * root = document->get_root_node(); const xmlpp::Element * root = document->get_root_node();
wsc.reset(new WebStorageClient()); wsc.reset(new WebStorageClient());
wsc->configure(*root); wsc->configure(*root);
} catch (std::invalid_argument &e) { } catch (std::invalid_argument &e) {
CPPUNIT_FAIL("semantic error in configuration file"); CPPUNIT_FAIL("semantic error in storage configuration file");
} catch (xmlpp::exception &e) { } catch (xmlpp::exception &e) {
CPPUNIT_FAIL("error parsing configuration file"); CPPUNIT_FAIL("error parsing storage configuration file");
} }
} }
@ -98,6 +123,7 @@ WebStorageClientTest :: setUp(void) throw ()
void void
WebStorageClientTest :: tearDown(void) throw () WebStorageClientTest :: tearDown(void) throw ()
{ {
authentication.reset();
wsc.reset(); wsc.reset();
} }
@ -109,68 +135,20 @@ void
WebStorageClientTest :: firstTest(void) WebStorageClientTest :: firstTest(void)
throw (CPPUNIT_NS::Exception) throw (CPPUNIT_NS::Exception)
{ {
Ptr<UniqueId>::Ref id01(new UniqueId(10001)); Ptr<UniqueId>::Ref id77(new UniqueId(10077));
Ptr<UniqueId>::Ref id77(new UniqueId(10077)); Ptr<SessionId>::Ref sessionId(new SessionId("bad ID"));
CPPUNIT_ASSERT( wsc->existsAudioClip(id01)); // this does not currently work due to a bug in the storage server
CPPUNIT_ASSERT(!wsc->existsAudioClip(id77)); // try {
} // wsc->existsAudioClip(sessionId, id77);
// CPPUNIT_FAIL("existsAudioClip allowed operation without login");
// }
// catch (std::logic_error &e) {
// }
CPPUNIT_ASSERT( sessionId = authentication->login("root", "q"));
/*------------------------------------------------------------------------------ CPPUNIT_ASSERT(!wsc->existsAudioClip(sessionId, id77));
* Testing the deletePlaylist method CPPUNIT_ASSERT( authentication->logout(sessionId));
*----------------------------------------------------------------------------*/
void
WebStorageClientTest :: deletePlaylistTest(void)
throw (CPPUNIT_NS::Exception)
{
Ptr<UniqueId>::Ref id1(new UniqueId(1));
Ptr<UniqueId>::Ref id2(new UniqueId(77));
try {
wsc->deletePlaylist(id2);
CPPUNIT_FAIL("allowed to delete non-existent playlist");
} catch (std::invalid_argument &e) {
}
try {
wsc->deletePlaylist(id1);
} catch (std::invalid_argument &e) {
CPPUNIT_FAIL("cannot delete existing playlist");
}
try {
wsc->deletePlaylist(id1);
CPPUNIT_FAIL("allowed to delete non-existent playlist");
} catch (std::invalid_argument &e) {
}
}
/*------------------------------------------------------------------------------
* Testing the getAllPlaylists method
*----------------------------------------------------------------------------*/
void
WebStorageClientTest :: getAllPlaylistsTest(void)
throw (CPPUNIT_NS::Exception)
{
Ptr<std::vector<Ptr<Playlist>::Ref> >::Ref playlistVector =
wsc->getAllPlaylists();
CPPUNIT_ASSERT(playlistVector->size() == 1);
Ptr<Playlist>::Ref playlist = (*playlistVector)[0];
CPPUNIT_ASSERT((int) (playlist->getId()->getId()) == 1);
}
/*------------------------------------------------------------------------------
* Testing the createPlaylist method
*----------------------------------------------------------------------------*/
void
WebStorageClientTest :: createPlaylistTest(void)
throw (CPPUNIT_NS::Exception)
{
Ptr<Playlist>::Ref playlist = wsc->createPlaylist();
CPPUNIT_ASSERT(wsc->existsPlaylist(playlist->getId()));
} }
@ -181,8 +159,19 @@ void
WebStorageClientTest :: audioClipTest(void) WebStorageClientTest :: audioClipTest(void)
throw (CPPUNIT_NS::Exception) throw (CPPUNIT_NS::Exception)
{ {
Ptr<const UniqueId>::Ref id2(new UniqueId(10002)); /*
Ptr<const UniqueId>::Ref id77(new UniqueId(10077)); Ptr<UniqueId>::Ref id01(new UniqueId(10001));
Ptr<UniqueId>::Ref id77(new UniqueId(10077));
Ptr<SessionId>::Ref sessionId;
CPPUNIT_ASSERT( sessionId = authentication->login("root", "q"));
//cerr << "###\n" << sessionId << "\n" << sessionId->getId() << endl;
CPPUNIT_ASSERT( wsc->existsAudioClip(sessionId, id01));
//std::cerr << "\naudio clip: <<<\n" << audioClip->getId()->getId() << ">>>\n";
CPPUNIT_ASSERT( authentication->logout(sessionId));
CPPUNIT_ASSERT(wsc->existsAudioClip(id2)); CPPUNIT_ASSERT(wsc->existsAudioClip(id2));
CPPUNIT_ASSERT(!wsc->existsAudioClip(id77)); CPPUNIT_ASSERT(!wsc->existsAudioClip(id77));
@ -201,101 +190,6 @@ WebStorageClientTest :: audioClipTest(void)
wsc->deleteAudioClip(id2); wsc->deleteAudioClip(id2);
CPPUNIT_ASSERT(!wsc->existsAudioClip(id2)); CPPUNIT_ASSERT(!wsc->existsAudioClip(id2));
*/
} }
/*------------------------------------------------------------------------------
* Testing the acquire / release operations
*----------------------------------------------------------------------------*/
void
WebStorageClientTest :: acquireAudioClipTest(void)
throw (CPPUNIT_NS::Exception)
{
Ptr<const UniqueId>::Ref id2(new UniqueId(10002));
Ptr<const UniqueId>::Ref id77(new UniqueId(10077));
Ptr<AudioClip>::Ref audioClip;
try {
audioClip = wsc->acquireAudioClip(id2);
}
catch (std::logic_error &e) {
std::string eMsg = "could not acquire audio clip:\n";
eMsg += e.what();
CPPUNIT_FAIL(eMsg);
}
string audioClipUri("file://");
audioClipUri += get_current_dir_name();
audioClipUri += "/var/test2.mp3";
CPPUNIT_ASSERT(*(audioClip->getUri()) == audioClipUri);
try {
wsc->releaseAudioClip(audioClip);
}
catch (std::logic_error &e) {
std::string eMsg = "could not release audio clip:\n";
eMsg += e.what();
CPPUNIT_FAIL(eMsg);
}
try {
audioClip = wsc->acquireAudioClip(id77);
CPPUNIT_FAIL("allowed to acquire non-existent audio clip");
}
catch (std::logic_error &e) {
}
}
/*------------------------------------------------------------------------------
* Testing the acquire / release operations
*----------------------------------------------------------------------------*/
void
WebStorageClientTest :: acquirePlaylistTest(void)
throw (CPPUNIT_NS::Exception)
{
Ptr<UniqueId>::Ref id1(new UniqueId(1));
Ptr<UniqueId>::Ref id77(new UniqueId(77));
Ptr<Playlist>::Ref playlist;
try {
playlist = wsc->acquirePlaylist(id1);
}
catch (std::logic_error &e) {
std::string eMsg = "could not acquire playlist:\n";
eMsg += e.what();
CPPUNIT_FAIL(eMsg);
}
CPPUNIT_ASSERT(playlist->getUri());
CPPUNIT_ASSERT(playlist->getUri()->substr(0,7) == "file://");
std::ifstream ifs1(playlist->getUri()->substr(7).c_str());
if (!ifs1) {
ifs1.close();
CPPUNIT_FAIL("temp file not created correctly");
}
ifs1.close();
string savedTempFilePath = playlist->getUri()->substr(7);
try {
wsc->releasePlaylist(playlist);
}
catch (std::logic_error &e) {
std::string eMsg = "could not release playlist:\n";
eMsg += e.what();
CPPUNIT_FAIL(eMsg);
}
CPPUNIT_ASSERT(!playlist->getUri());
std::ifstream ifs2(savedTempFilePath.c_str());
if (ifs2) {
ifs2.close();
CPPUNIT_FAIL("temp file not destroyed correctly");
}
ifs2.close();
try {
playlist = wsc->acquirePlaylist(id77);
CPPUNIT_FAIL("allowed to acquire non-existent playlist");
}
catch (std::logic_error &e) {
}
}

View File

@ -22,7 +22,7 @@
Author : $Author: fgerlits $ Author : $Author: fgerlits $
Version : $Revision: 1.1 $ Version : $Revision: 1.2 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/storage/src/WebStorageClientTest.h,v $ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/storage/src/WebStorageClientTest.h,v $
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
@ -42,10 +42,14 @@
#include <cppunit/extensions/HelperMacros.h> #include <cppunit/extensions/HelperMacros.h>
#include "LiveSupport/Core/AuthenticationClientInterface.h"
#include "LiveSupport/Authentication/AuthenticationClientFactory.h"
namespace LiveSupport { namespace LiveSupport {
namespace Storage { namespace Storage {
using namespace LiveSupport::Core;
/* ================================================================ constants */ /* ================================================================ constants */
@ -58,26 +62,26 @@ namespace Storage {
* Unit test for the UploadPlaylistMetohd class. * Unit test for the UploadPlaylistMetohd class.
* *
* @author $Author: fgerlits $ * @author $Author: fgerlits $
* @version $Revision: 1.1 $ * @version $Revision: 1.2 $
* @see WebStorageClient * @see WebStorageClient
*/ */
class WebStorageClientTest : public CPPUNIT_NS::TestFixture class WebStorageClientTest : public CPPUNIT_NS::TestFixture
{ {
CPPUNIT_TEST_SUITE(WebStorageClientTest); CPPUNIT_TEST_SUITE(WebStorageClientTest);
CPPUNIT_TEST(firstTest); CPPUNIT_TEST(firstTest);
// CPPUNIT_TEST(getAllPlaylistsTest); CPPUNIT_TEST(audioClipTest);
// CPPUNIT_TEST(deletePlaylistTest);
// CPPUNIT_TEST(createPlaylistTest);
// CPPUNIT_TEST(audioClipTest);
// CPPUNIT_TEST(acquireAudioClipTest);
// CPPUNIT_TEST(acquirePlaylistTest);
CPPUNIT_TEST_SUITE_END(); CPPUNIT_TEST_SUITE_END();
private: private:
/**
* An AuthenticationClient instance to login an logout.
*/
Ptr<AuthenticationClientInterface>::Ref authentication;
/** /**
* The WebStorageClient instance to test. * The WebStorageClient instance to test.
*/ */
Ptr<WebStorageClient>::Ref wsc; Ptr<WebStorageClient>::Ref wsc;
protected: protected:
@ -89,30 +93,6 @@ class WebStorageClientTest : public CPPUNIT_NS::TestFixture
void void
firstTest(void) throw (CPPUNIT_NS::Exception); firstTest(void) throw (CPPUNIT_NS::Exception);
/**
* Testing deletePlaylist().
*
* @exception CPPUNIT_NS::Exception on test failures.
*/
void
deletePlaylistTest(void)
throw (CPPUNIT_NS::Exception);
/**
* Testing getAllPlaylists().
*
* @exception CPPUNIT_NS::Exception on test failures.
*/
void
getAllPlaylistsTest(void)
throw (CPPUNIT_NS::Exception);
/**
* Testing createPlaylist().
*
* @exception CPPUNIT_NS::Exception on test failures.
*/
void
createPlaylistTest(void) throw (CPPUNIT_NS::Exception);
/** /**
* Testing the audio clip operations. * Testing the audio clip operations.
* *
@ -121,22 +101,6 @@ class WebStorageClientTest : public CPPUNIT_NS::TestFixture
void void
audioClipTest(void) throw (CPPUNIT_NS::Exception); audioClipTest(void) throw (CPPUNIT_NS::Exception);
/**
* Testing the acquire / release operations on audio clips.
*
* @exception CPPUNIT_NS::Exception on test failures.
*/
void
acquireAudioClipTest(void) throw (CPPUNIT_NS::Exception);
/**
* Testing the acquire / release operations on playlists.
*
* @exception CPPUNIT_NS::Exception on test failures.
*/
void
acquirePlaylistTest(void) throw (CPPUNIT_NS::Exception);
public: public: