/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Version: MPL 1.1 / GPLv3+ / LGPLv3+ * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License or as specified alternatively below. You may obtain a copy of * the License at http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * Major Contributor(s): * Copyright (C) 2012 Red Hat, Inc., Eike Rathke * * All Rights Reserved. * * For minor contributions see the git repository. * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 3 or later (the "GPLv3+"), or * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"), * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable * instead of those above. */ #include #include #include #include #include #include #include #include #include #include #include #include #include namespace { class TestTeleTubes: public CppUnit::TestFixture { public: TestTeleTubes() {} ~TestTeleTubes() {} // This could happen in costructor wasn't there TestTeleTubes instance for each test: void testInitialize(); void testCreateAccountManager(); void testRegisterClients(); void testContactList(); void testStartBuddySession(); void testSendPacket(); void testReceivePacket(); void testDestroyTeleTubes(); void testFailAlways(); // Order is significant. CPPUNIT_TEST_SUITE( TestTeleTubes ); CPPUNIT_TEST( testInitialize ); CPPUNIT_TEST( testCreateAccountManager ); CPPUNIT_TEST( testRegisterClients ); CPPUNIT_TEST( testContactList ); CPPUNIT_TEST( testStartBuddySession ); CPPUNIT_TEST( testSendPacket ); CPPUNIT_TEST( testReceivePacket ); CPPUNIT_TEST( testDestroyTeleTubes ); #if 0 CPPUNIT_TEST( testFailAlways ); // test failure displays SAL_LOG, uncomment for debugging #endif CPPUNIT_TEST_SUITE_END(); }; class TestCollaboration; // static, not members, so they actually survive cppunit test iteration static TestCollaboration* mpCollaboration = NULL; static TeleConference* mpConference1 = NULL; static TeleConference* mpConference2 = NULL; static TpAccount* mpOffererAccount = NULL; static TpContact* mpAccepterContact = NULL; static bool mbFileSentSuccess = false; static bool mbPacketReceived = false; static OUString maTestConfigIniURL; static OString maOffererIdentifier; static OString maAccepterIdentifier; class TestCollaboration : public Collaboration { virtual void EndCollaboration() const {} virtual void PacketReceived( const OString& rPacket ) const { CPPUNIT_ASSERT( rPacket == "from 1 to 2"); mbPacketReceived = true; } virtual void SaveAndSendFile( TpContact* ) const {} virtual void StartCollaboration( TeleConference* ) {} }; static gboolean timed_out( void * ) { CPPUNIT_ASSERT_MESSAGE( "Test took longer than ten seconds!", false); return FALSE; } void TestTeleTubes::testInitialize() { utl::LocalFileHelper::ConvertPhysicalNameToURL( OUString::createFromAscii( getenv("SRCDIR") ) + "/tubes/qa/test-config.ini", maTestConfigIniURL ); rtl::Bootstrap aTestConfig( maTestConfigIniURL ); TeleManager::addSuffixToNames( "TeleTest"); rtl::OUString aOffererIdentifier; CPPUNIT_ASSERT_MESSAGE( "See README for how to set up test-config.ini", aTestConfig.getFrom("offerer", aOffererIdentifier)); maOffererIdentifier = OUStringToOString( aOffererIdentifier, RTL_TEXTENCODING_UTF8); rtl::OUString aAccepterIdentifier; CPPUNIT_ASSERT_MESSAGE( "See README for how to set up test-config.ini", aTestConfig.getFrom("accepter", aAccepterIdentifier)); maAccepterIdentifier = OUStringToOString( aAccepterIdentifier, RTL_TEXTENCODING_UTF8); g_timeout_add_seconds (10, timed_out, NULL); mpCollaboration = new TestCollaboration(); } void TestTeleTubes::testCreateAccountManager() { bool bConnected = TeleManager::createAccountManager(); CPPUNIT_ASSERT( bConnected == true); } void TestTeleTubes::testRegisterClients() { bool bRegistered = TeleManager::registerClients(); CPPUNIT_ASSERT( bRegistered == true); } void TestTeleTubes::testContactList() { AccountContactPairV pairs = TeleManager::getContactList()->getContacts(); /* Both our accounts are meant to be signed in, and they both should be * capable of LibreOffice tubes because this test runs after we register * our handler. */ CPPUNIT_ASSERT_MESSAGE( "Make sure both your test accounts are signed in " "and are on each other's contact lists", pairs.size() > 0 ); CPPUNIT_ASSERT(!mpAccepterContact); for (guint i = 0; i < pairs.size(); i++) { AccountContactPair pair = pairs[i]; if (tp_account_get_normalized_name (pair.first) == maOffererIdentifier && tp_contact_get_identifier (pair.second) == maAccepterIdentifier) { mpOffererAccount = pair.first; g_object_ref (mpOffererAccount); mpAccepterContact = pair.second; g_object_ref (mpAccepterContact); } g_object_unref (pair.first); g_object_unref (pair.second); } CPPUNIT_ASSERT_MESSAGE( "Couldn't find offerer account. " "Make sure both your test accounts are signed in " "and are on each other's contact lists", mpOffererAccount); CPPUNIT_ASSERT_MESSAGE( "Couldn't find accepter contact. " "Make sure both your test accounts are signed in " "and are on each other's contact lists", mpAccepterContact); } static void lcl_FileSent( bool success, void * ) { mbFileSentSuccess = success; } void TestTeleTubes::testStartBuddySession() { CPPUNIT_ASSERT( mpOffererAccount != 0); CPPUNIT_ASSERT( mpAccepterContact != 0); mpConference1 = TeleManager::startBuddySession( mpOffererAccount, mpAccepterContact); CPPUNIT_ASSERT( mpConference1 != NULL); mpConference1->sendFile( mpAccepterContact, maTestConfigIniURL, lcl_FileSent, NULL); while (!mbFileSentSuccess) g_main_context_iteration( NULL, TRUE); // This checks that the file was received and msCurrentUUID set (see manager.cxx) while (!TeleManager::hasWaitingConference()) g_main_context_iteration( NULL, TRUE); mpConference2 = TeleManager::getConference(); CPPUNIT_ASSERT( mpConference2 != NULL); mpCollaboration->SetConference( mpConference2 ); } void TestTeleTubes::testSendPacket() { bool bSentPacket = false; if (mpConference1) bSentPacket = mpConference1->sendPacket( "from 1 to 2"); CPPUNIT_ASSERT( bSentPacket); } void TestTeleTubes::testReceivePacket() { while (!mbPacketReceived) g_main_context_iteration( NULL, TRUE); } void TestTeleTubes::testDestroyTeleTubes() { if (mpOffererAccount) { g_object_unref(mpOffererAccount); mpOffererAccount = NULL; } if (mpAccepterContact) { g_object_unref(mpAccepterContact); mpAccepterContact = NULL; } if (mpConference1) mpConference1->close(); delete mpConference1; if (mpConference2) mpConference2->close(); delete mpConference2; TeleManager::finalize(); } void TestTeleTubes::testFailAlways() { CPPUNIT_ASSERT( false); } CPPUNIT_TEST_SUITE_REGISTRATION( TestTeleTubes); } CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */