7
#include "../../iqhandler.h"
9
#include "../../stanzaextension.h"
10
#include "../../stanzaextensionfactory.h"
15
#include <cstdio> // [s]print[f]
23
void addFeature( const std::string& ) {}
29
ClientBase() : m_jid( "self" ) {}
30
virtual ~ClientBase() {}
31
const JID& jid() const { return m_jid; }
32
const std::string getID();
33
virtual void send( const IQ& ) = 0;
34
virtual void send( IQ&, IqHandler*, int ) = 0;
35
void removeIqHandler( IqHandler* ih, int exttype );
36
void removeIDHandler( IqHandler* ih );
37
void registerIqHandler( IqHandler* ih, int exttype );
38
void registerStanzaExtension( StanzaExtension* ext );
39
void removeStanzaExtension( int ext );
40
Disco* disco() { return &m_disco; }
44
StanzaExtensionFactory m_sef;
46
void ClientBase::removeIqHandler( IqHandler*, int ) {}
47
void ClientBase::removeIDHandler( IqHandler* ) {}
48
void ClientBase::registerIqHandler( IqHandler*, int ) {}
49
void ClientBase::registerStanzaExtension( StanzaExtension* se ) { delete se; }
50
void ClientBase::removeStanzaExtension( int ) {}
51
const std::string ClientBase::getID() { return "id"; }
53
using namespace gloox;
55
#define JINGLESESSION_TEST
56
#include "../../jinglesession.h"
57
#include "../../jinglesession.cpp"
58
#include "../../jinglesessionhandler.h"
59
#include "../../jinglesessionmanager.h"
60
#include "../../jinglesessionmanager.cpp"
61
#include "../../jinglecontent.h"
62
#include "../../jingleiceudp.h"
63
#include "../../jinglefiletransfer.h"
64
class TestInitiator : public ClientBase, public Jingle::SessionHandler
67
TestInitiator() : m_sm( this, this ), m_result( false ), m_result2( false )
69
m_sef.registerExtension( new Jingle::Session::Jingle() );
70
m_sm.registerPlugin( new Jingle::Content() );
71
m_sm.registerPlugin( new Jingle::ICEUDP() );
72
m_sm.registerPlugin( new Jingle::FileTransfer() );
74
virtual ~TestInitiator() {}
75
void setTest( int test ) { m_test = test; }
76
virtual void send( const IQ& ) {}
77
virtual void send( IQ& , IqHandler*, int ) {}
78
virtual void send( Tag* tag );
79
virtual void trackID( IqHandler *ih, const std::string& id, int context ) {}
80
bool checkResult() { bool t = m_result; m_result = false; return t; }
81
bool checkResult2() { bool t = m_result2; m_result2 = false; return t; }
82
virtual void handleSessionAction( Jingle::Action action, const Jingle::Session* session, const Jingle::Session::Jingle* jingle );
83
virtual void handleSessionActionError( Jingle::Action action, const Jingle::Session* /*session*/, const Error* /*e*/ ) {}
84
virtual void handleIncomingSession( Jingle::Session* session ) {}
86
Jingle::SessionManager m_sm;
95
void TestInitiator::handleSessionAction( Jingle::Action action, const Jingle::Session* session, const Jingle::Session::Jingle* jingle )
101
if( action != Jingle::InvalidAction || jingle->plugins().size() != 0 )
103
printf( "action: %d, plugins: %d\n", action, jingle->plugins().size() );
109
if( action != Jingle::SessionInitiate || jingle->plugins().size() != 1 || static_cast<const Jingle::Content*>( jingle->plugins().front() )->name() != "stub" )
111
printf( "action: %d, plugins: %d\n", action, jingle->plugins().size() );
117
if( action != Jingle::SessionInitiate || jingle->plugins().size() != 1 || static_cast<const Jingle::Content*>( jingle->plugins().front() )->name() != "iceudp"
118
|| static_cast<const Jingle::Content*>( jingle->plugins().front() )->plugins().size() != 1
119
|| static_cast<const Jingle::ICEUDP*>( static_cast<const Jingle::Content*>( jingle->plugins().front() )->plugins().front() )->pwd() != "pwd" )
121
printf( "action: %d, plugins: %d\n", action, jingle->plugins().size() );
127
if( action != Jingle::SessionInitiate || jingle->plugins().size() != 1 || static_cast<const Jingle::Content*>( jingle->plugins().front() )->name() != "ft"
128
|| static_cast<const Jingle::Content*>( jingle->plugins().front() )->plugins().size() != 2
129
|| static_cast<const Jingle::ICEUDP*>( static_cast<const Jingle::Content*>( jingle->plugins().front() )->plugins().front() )->pwd() != "pwd"
130
|| static_cast<const Jingle::FileTransfer*>( static_cast<const Jingle::Content*>( jingle->plugins().front() )->plugins().back() )->type() != Jingle::FileTransfer::Offer )
132
printf( "action: %d, plugins: %d\n", action, jingle->plugins().size() );
141
void TestInitiator::send( Tag* tag )
144
m_sef.addExtensions( iq, tag );
149
// ------------------------------------------------------------------------------------------------------------
153
// ------------------------------------------------------------------------------------------------------------
156
int main( int /*argc*/, char** /*argv*/ )
161
Tag* i = new Tag( "iq" ); i->addAttribute( "from", "me@there" ); i->addAttribute( "to", "you@here" ); i->addAttribute( "type", "set" ); i->addAttribute( "id", "someid" );
162
Tag* j = new Tag( i, "jingle", XMLNS, XMLNS_JINGLE );
166
name = "invalid jingle";
169
if( !ini.checkResult() )
172
fprintf( stderr, "test '%s' failed\n", name.c_str() );
176
name = "jingle with empty content";
178
j->addAttribute( "action", "session-initiate" );
179
c = new Tag( j, "content" ); c->addAttribute( "creator", "initor" ); c->addAttribute( "name", "stub" );
181
if( !ini.checkResult() )
184
fprintf( stderr, "test '%s' failed\n", name.c_str() );
188
name = "jingle with content and transport";
190
c->addAttribute( "name", "iceudp" );
191
Tag* t = new Tag( c, "transport", XMLNS, XMLNS_JINGLE_ICE_UDP ); t->addAttribute( "pwd", "pwd" ); t->addAttribute( "ufrag", "ufrag" );
193
if( !ini.checkResult() )
196
fprintf( stderr, "test '%s' failed\n", name.c_str() );
200
name = "jingle with content and transport + description";
202
c->addAttribute( "name", "ft" );
203
Tag* d = new Tag( c, "description", XMLNS, XMLNS_JINGLE_FILE_TRANSFER ); new Tag( new Tag( d, "offer" ), "file" );
205
if( !ini.checkResult() )
208
fprintf( stderr, "test '%s' failed\n", name.c_str() );
218
printf( "Jingle::SessionManager: OK\n" );
223
fprintf( stderr, "Jingle::SessionManager: %d test(s) failed\n", fail );