diff -r 46cc8e302e43 -r 3404599e4dda libtelepathy/tsrc/src/telepathygabblelogintest.cpp --- a/libtelepathy/tsrc/src/telepathygabblelogintest.cpp Wed Mar 31 22:32:38 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,680 +0,0 @@ -/* -* Copyright (c) 2008 - 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the License "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: Used for Login-Logout related Test Cases -* -*/ - - - - -//Include files -#include -#include -#include - -#include -#include - -#include "telepathygabbleutils.h" -#include "telepathygabblelogintest.h" -#include "telepathygabbletestdata.h" -#include "telepathygabbleadddeletecontact.h" - -static void test_log_handler1 ( - const gchar *message - ) -{ - FILE* fp; - - fp = fopen("c:\\tplogs.txt","a"); - if(fp) - { - fprintf(fp,message); - fprintf(fp,"\n"); - fclose(fp); - } - - -} - - -//----------------------------------------------------------------------------- -// function_name : CTelepathyGabbleLoginTest -// description : Constructor -// Returns : None -//----------------------------------------------------------------------------- - -CTelepathyGabbleLoginTest::CTelepathyGabbleLoginTest() - { - } - -//----------------------------------------------------------------------------- -// function_name : ConstructL -// description : Constructor -// Returns : None -//----------------------------------------------------------------------------- - -void CTelepathyGabbleLoginTest::ConstructL() - { - - } - -//----------------------------------------------------------------------------- -// function_name : NewL -// description : Constructor -// Returns : None -//----------------------------------------------------------------------------- -CTelepathyGabbleLoginTest* CTelepathyGabbleLoginTest::NewL() - { - - CTelepathyGabbleLoginTest* self = new(ELeave) CTelepathyGabbleLoginTest; - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop(); - return self; - } - -//----------------------------------------------------------------------------- -// function_name : ~CTelepathyGabbleLoginTest -// description : destructor -// Returns : None -//----------------------------------------------------------------------------- -CTelepathyGabbleLoginTest::~CTelepathyGabbleLoginTest() - { - - //class variables - //delete conn; - //conn = NULL; - - } - -//----------------------------------------------------------------------------- -// function_name : action_login -// description : login -// Returns : gboolean -//----------------------------------------------------------------------------- -TInt CTelepathyGabbleLoginTest::action_login(char* username,char* password, - char* server, char* resource, char* ssl_flag, - char *port, char *proxy_server, char *proxy_port, - CTestData* aTestData) -{ - - - TpConnMgr *connmgr = NULL; - GError *error = NULL; - - test_log_handler1(username); - test_log_handler1(password); - test_log_handler1(server); - test_log_handler1(resource); - test_log_handler1(ssl_flag); - test_log_handler1(port); - - - GHashTable *connection_parameters = g_hash_table_new(g_str_hash, g_str_equal); - - DBusGConnection *dbus_connection; - TpConn *tp_conn; - - //Use the values passed from the cfg file. - gchar* def1 = g_strdup(username); - gchar* def2 = g_strdup(password); - - gchar* def3 = g_strdup(server); - gchar* def4 = g_strdup(resource); - - guint def5 = atoi(port); //443; - - #ifdef __WINSCW__ - gchar* def6 = g_strdup(proxy_server); //g_strdup("172.16.42.135"); //for emulater - guint def7 = atoi(proxy_port); //8080; //for emulater - #endif - - GValue *value1 = g_new0(GValue, 1); - GValue *value2 = g_new0(GValue, 1); - GValue *value3 = g_new0(GValue, 1); - GValue *value4 = g_new0(GValue, 1); - GValue *value5 = g_new0(GValue, 1); - - #ifdef __WINSCW__ - GValue *value6 = g_new0(GValue, 1); - GValue *value7 = g_new0(GValue, 1); - #endif - - GValue *value8 = g_new0(GValue, 1); - g_type_init(); - - - // just use system bus and do not bother about others - dbus_connection = dbus_g_bus_get( DBUS_BUS_SESSION , &error); - - aTestData->GetStifLogger()->Log( _L("after dbus_g_bus_get") ); - /* bsr 4 sep: this was null as host parsing failed -> transport was zero -> connectionw as 0 */ - if (dbus_connection == NULL) - { - // if we get error as part of above step, connection variable is NULL, so we are here - //_dbus_verboseerr("Failed to open connection to bus: %s\n", error->message); - //test_log_handler("Found Error in dbus_g_bus_get exiting.\n"); - aTestData->GetStifLogger()->Log( _L("dbus_connection == NULL") ); - g_error_free(error); - return (aTestData->GetConnectionState()); - } - else - { - aTestData->SetDBusConnection(dbus_connection); - } - - aTestData->GetStifLogger()->Log( _L("b4 tp_connmgr_new") ); - /* Create a connection manager object */ - connmgr = tp_connmgr_new(dbus_connection, CONNMGR_BUS, CONNMGR_PATH, - /*CONNMGR_BUS*/ TP_IFACE_CONN_MGR_INTERFACE); - aTestData->GetStifLogger()->Log( _L("after tp_connmgr_new") ); - if (connmgr == NULL) - { - aTestData->GetStifLogger()->Log( _L("connmgr == NULL") ); - g_error("Failed to create a connection manager, skipping manager startup."); - return (aTestData->GetConnectionState()); - } - else - { - aTestData->SetTpConnMgr(connmgr); - } - - g_value_init(value1, G_TYPE_STRING); - g_value_set_string (value1, def1); - g_hash_table_insert(connection_parameters, (gpointer)"account", (gpointer)value1); - - g_value_init(value2, G_TYPE_STRING); - g_value_set_string (value2, def2); - g_hash_table_insert(connection_parameters,(gpointer) "password",(gpointer) value2); - - g_value_init(value3, G_TYPE_STRING); - g_value_set_string (value3, def3); - g_hash_table_insert(connection_parameters,(gpointer) "server",(gpointer)value3 ); - - g_value_init(value4, G_TYPE_STRING); - g_value_set_string (value4, def4); - g_hash_table_insert(connection_parameters, (gpointer)"resource", (gpointer)value4); - - - g_value_init(value5, G_TYPE_UINT); - g_value_set_uint (value5, def5); - g_hash_table_insert(connection_parameters, (gpointer)"port", (gpointer)value5); - - //convert the ssl_flag to ascii - TInt ssl_bool = atoi(ssl_flag); - - //if (ssl_flag == "1") //def8 ==1 - if (ssl_bool == 1) //i.e. only for gtalk, not for gizmo - { - gboolean def8 = TRUE; //for gtalk - g_value_init(value8, G_TYPE_BOOLEAN); - g_value_set_boolean (value8, def8); - g_hash_table_insert(connection_parameters, (gpointer)"old-ssl", (gpointer)value8); - } - -#ifdef __WINSCW__ - g_value_init(value6, G_TYPE_STRING); - g_value_set_string (value6, def6); - g_hash_table_insert(connection_parameters, (gpointer)"https-proxy-server", (gpointer)value6); - - - g_value_init(value7, G_TYPE_UINT); - g_value_set_uint (value7, def7); - g_hash_table_insert(connection_parameters, (gpointer)"https-proxy-port",(gpointer) value7); -#endif - - - // Create a new actual connection with the connection manager - //Ensure that conn is global. - // The same conn object is used for logout. - aTestData->GetStifLogger()->Log( _L("b4 tp_connmgr_new_connection") ); - tp_conn = tp_connmgr_new_connection(connmgr,connection_parameters, PROTOCOL); - aTestData->GetStifLogger()->Log( _L("after tp_connmgr_new_connection") ); - if( tp_conn == NULL ) - { - aTestData->GetStifLogger()->Log( _L("tp_conn is null") ); - return (aTestData->GetConnectionState()); - } - else - { - aTestData->SetTpConn(tp_conn); - } - - - - // add a callback for StatusChange signal - dbus_g_proxy_connect_signal(DBUS_G_PROXY(tp_conn), "StatusChanged", - (G_CALLBACK(status_changed_cb)), - aTestData,NULL ); - - g_hash_table_destroy(connection_parameters); - - //Run the mainloop - g_main_loop_run (aTestData->GetMainLoop()); - - //Quit of main loop happened in thecallback. - //unref this mainloop - // same main loop can be used for all classes, - // unref after logout in each test case when logintest object gets destroyed - //g_main_loop_unref ( mainloop ); - - //After the status_changed_cb , the control back here - //Check the value of global variable that was updated - //in the callback and return the same. - - - //Get the connected state for login and return the same. - return (aTestData->GetConnectionState()); -} - -//----------------------------------------------------------------------------- -// function_name : action_logout -// description : Does logout -// Returns : None -//----------------------------------------------------------------------------- - -TInt CTelepathyGabbleLoginTest::action_logout(CTestData* aTestData) -{ - GError *error = NULL; - - //Do the disconnect - tp_conn_disconnect (DBUS_G_PROXY( aTestData->GetTpConn()), &error); - - //g_hash_table_destroy(global_data_ptr->Getptrhashtable_textchan()); - - //Start the main loop - g_main_loop_run (aTestData->GetMainLoop()); - - - //After this see that the callback status_changed_cb - //is hit with TP_CONN_STATUS_DISCONNECTED as the status. - - //After the status_changed_cb , the control back here - //Check the value of global variable that was updated in the - //callback and return the same. - - if (error) - { - // There is some error - g_error_free (error); - // Update the global to connected - //global_connected = TRUE; - } - //else global_connected is made FALSE in the status_changed_cb - - - //return global_connected; - //Get the connected state for login and return the same. - return (aTestData->GetConnectionState()); -} - -//----------------------------------------------------------------------------- -// function_name : action_cancel -// description : cancel login -// Returns : None -//----------------------------------------------------------------------------- - -TInt CTelepathyGabbleLoginTest::action_cancel(char* username, - char* password, char* server,char* resource, char* ssl_flag, - char *port,char *proxy_server, char *proxy_port, - CTestData* aTestData) -{ - aTestData->SetTestType(CTestData::ECancel) ; - aTestData->GetStifLogger()->Log( _L("inside action_cancel\n") ); - action_login(username,password,server,resource,ssl_flag, - port, proxy_server, proxy_port, aTestData); - - action_logout(aTestData);//Do tp_disconnected. - - return (aTestData->GetConnectionState()); -} - -//----------------------------------------------------------------------------- -// function_name : status_changed_cb -//----------------------------------------------------------------------------- -gboolean CTelepathyGabbleLoginTest::status_changed_cb(DBusGProxy* /*proxy*/, - guint status, guint reason, - gpointer user_data) -{ - GHashTable* textChannelsHT = NULL; - CTestData* testData = static_cast (user_data); - CStifLogger* logger = testData->GetStifLogger(); - logger->Log( _L("status_changed_cb\n") ); - - if (status == TP_CONN_STATUS_CONNECTED ) - { - - - logger->Log( _L("status_changed_cb::connected\n") ); - - - if( testData->GetTestType() != CTestData::ELogin ) - { - - - textChannelsHT = - g_hash_table_new_full(g_str_hash, - g_str_equal, - (GDestroyNotify) g_free, - (GDestroyNotify) g_object_unref); - - testData->SetTextChannelsHT(textChannelsHT); - //Register the callback for new channel - //Commented for now has been put in the SendMessage function, - dbus_g_proxy_connect_signal(DBUS_G_PROXY(testData->GetTpConn()), "NewChannel", - (G_CALLBACK(new_channel_handler)), - user_data,NULL); - } - else - { - // if the test case is login related test case, new channel callback not required - //so dont register for NewChannel - g_main_loop_quit(testData->GetMainLoop()); - testData->ResetLoginCompleteFlag(); - } - //update the state_of_conenction enum - testData->SetConnectionState(CTestData::ECONNECTED ); - - } - else if (status == TP_CONN_STATUS_CONNECTING) - { - //if the test case is for cancel disconnect here, meaning cancel the login here. - //if cancel test case, do disconnect in connecting state - testData->SetConnectionState(CTestData::ECONNECTING); - if ( testData->GetTestType() == CTestData::ECancel) - { - //quit from this callback so that we return to point from where - //action_login was called. - g_main_loop_quit(testData->GetMainLoop()); - } - - } - else if ( status == TP_CONN_STATUS_DISCONNECTED ) - { - - - if ( testData->GetTestType() == CTestData::ECancel) - { - //this disconnect was initiated from the cancel test case - logger->Log( _L("status_changed_cb :cancelled \n") ); - testData->SetConnectionState(CTestData::EDISCONNECTED); - //quit the main loop. - g_main_loop_quit(testData->GetMainLoop()); - } - else - { - - if(reason == TP_CONN_STATUS_REASON_AUTHENTICATION_FAILED) - { - // Here disconnect is received as the authentication has failed. - //it could be because of invalid user_id or invalid passwd issued - //while passing the login parameters. - //Here we are checking for TP_CONN_STATUS_REASON_AUTHENTICATION_FAILED since - // the gabblelogs show the reason value as 3 if invalid user_id and passwd are given. - - testData->SetConnectionState(CTestData::EDISCONNECTED); - - //Quit the main loop started in action_login. - g_main_loop_quit(testData->GetMainLoop()); - - } - else - { - //this was initiated in the logout testcase, - //update the state_of_connection - //LOGOUT AFTER SUCCESSFUL LOGIN - - if( testData->GetConnectionState() != CTestData::EDISCONNECTED ) - { - - logger->Log( _L("status_changed_cb::not disconnected\n") ); - - testData->IncLoginCompleteFlag(); - - //currently for all the reasons except TP_CONN_STATUS_REASON_AUTHENTICATION_FAILED - //disconencted will come here. - //This code can be updated for variuos "reason" values - //based on the scenarios and the need for the test cases for those scenarios. - } - - if( testData->GetLoginCompleteFlag() && testData->GetConnectionState() == CTestData::EDISCONNECTED ) - { - logger->Log( _L("status_changed_cb::disconnected\n") ); - testData->ResetLoginCompleteFlag(); - //Quit the main loop started in action_login. - g_main_loop_quit(testData->GetMainLoop()); - - } - logger->Log( _L("status_changed_cb::before SetConnectionState\n") ); - testData->SetConnectionState(CTestData::EDISCONNECTED); - - } - } - - } - logger->Log( _L("status_changed_cb out\n") ); - return TRUE; -} - -//----------------------------------------------------------------------------- -// function_name : new_channel_handler -// description : callback function for NewChannel signal -//----------------------------------------------------------------------------- -void CTelepathyGabbleLoginTest::new_channel_handler(DBusGProxy* /*proxy*/, const char *object_path, - const char *channel_type, guint handle_type, - guint channel_handle, gboolean /*suppress_handler*/, - gpointer user_data) -{ -CTestData* testData = static_cast (user_data); -CStifLogger* logger = testData->GetStifLogger(); -logger->Log( _L("new_channel_handler\n") ); - -//Use the class data member new_text_channel. -TpChan *new_chan; - -//Get the new_chan -new_chan = tp_chan_new(testData->GetDBusConnection(), - CONNMGR_BUS, object_path, - channel_type, handle_type, channel_handle); - - -//channel_type == TP_IFACE_CHANNEL_TYPE_TEXT -if ((strcmp(channel_type, TP_IFACE_CHANNEL_TYPE_TEXT) == 0) ) - { - g_hash_table_insert(testData->GetTextChannelsHT(), g_strdup(object_path), new_chan); - //test_log_handler( "b4 text_channel_init" ); - //check for new_chan objects for text channel should be loaclly stored/freed - text_channel_init( new_chan ); - } - - -//channel_type == TP_IFACE_CHANNEL_TYPE_CONTACT_LIST -if( strcmp( channel_type, TP_IFACE_CHANNEL_TYPE_CONTACT_LIST ) == 0 - && (g_strrstr(object_path, "RosterChannel/subscribe") ) ) - - { - DBusGProxy* groupInterface = NULL; - //Get the group_iface - groupInterface = - tp_chan_get_interface(new_chan, - TELEPATHY_CHAN_IFACE_GROUP_QUARK); - - - testData->SetGroupSubscribeInterface(groupInterface); - - //register the callback, commented for now. - dbus_g_proxy_connect_signal (groupInterface, "MembersChanged", - G_CALLBACK (CTelepathyGabbleAddDeleteContact::roster_members_changed_cb ), - NULL, NULL); - - //add_contact("testcm6666@gmail.com",NULL); - - testData->IncLoginCompleteFlag(); - - } - -if( strcmp( channel_type, TP_IFACE_CHANNEL_TYPE_CONTACT_LIST ) == 0 - && (g_strrstr(object_path, "RosterChannel/publish") ) ) - - { - - DBusGProxy* groupInterface = NULL; - //Get the group_iface - groupInterface == - tp_chan_get_interface(new_chan, - TELEPATHY_CHAN_IFACE_GROUP_QUARK); - - testData->SetGroupPublishInterface(groupInterface); - - dbus_g_proxy_connect_signal (groupInterface, "MembersChanged", - G_CALLBACK (CTelepathyGabbleAddDeleteContact::roster_members_changed_cb ), - NULL, NULL); - - - - //Increment the flag. - testData->IncLoginCompleteFlag(); - - } - -if( strcmp( channel_type, TP_IFACE_CHANNEL_TYPE_CONTACT_LIST ) == 0 - && (g_strrstr(object_path, "RosterChannel/known") ) ) - - { - DBusGProxy* groupInterface = NULL; - //Get the group_iface - groupInterface = tp_chan_get_interface(new_chan, - TELEPATHY_CHAN_IFACE_GROUP_QUARK); - - - //remove_contact( "testcm6666@gmail.com", NULL ); - testData->SetGroupKnownInterface(groupInterface); - - dbus_g_proxy_connect_signal (groupInterface, "MembersChanged", - G_CALLBACK (CTelepathyGabbleAddDeleteContact::roster_members_changed_cb ), - NULL, NULL); - - - //increment the flag - testData->IncLoginCompleteFlag(); - - } - -if( strcmp( channel_type, TP_IFACE_CHANNEL_TYPE_CONTACT_LIST ) == 0 - && (g_strrstr(object_path, "RosterChannel/deny") ) ) - - { - DBusGProxy* groupInterface = NULL; - //Get the group_iface - groupInterface = tp_chan_get_interface(new_chan, - TELEPATHY_CHAN_IFACE_GROUP_QUARK); - - testData->SetGroupDenyInterface(groupInterface); - - dbus_g_proxy_connect_signal (groupInterface, "MembersChanged", - G_CALLBACK (CTelepathyGabbleAddDeleteContact::roster_members_changed_cb ), - NULL, NULL); - - //remove_contact( "testcm6666@gmail.com", NULL ); - - //increment the flag - testData->IncLoginCompleteFlag(); - - } - //Quit the mainloop started once all the channel-types are recieved. - //check the flag. - - if (testData->GetLoginCompleteFlag() == 3) - //In case of gizmo, the number of channels is 3.gtalk for deny also we get the callback - //we must also store the server name in the login class and check the server name here - { - //Quit the main loop. - testData->ResetLoginCompleteFlag(); - testData->GetStifLogger()->Log( _L("new_channel_handler::after ResetLoginCompleteFlag\n") ); - g_main_loop_quit(testData->GetMainLoop()); - - } - - -} - -//----------------------------------------------------------------------------- -// function_name : text_channel_init -// description : To get pending messages after login -//----------------------------------------------------------------------------- - -void CTelepathyGabbleLoginTest::text_channel_init ( TpChan *text_chan ) - { - GPtrArray *messages_list ; - guint i; - GArray *message_ids; - DBusGProxy *text_iface; - - - text_iface = tp_chan_get_interface(text_chan , - TELEPATHY_CHAN_IFACE_TEXT_QUARK); - - - //check if need to fetch the pending message or simply register for receive only - tp_chan_type_text_list_pending_messages(text_iface, - FALSE, - &messages_list, - NULL); - - - message_ids = g_array_new (FALSE, TRUE, sizeof (guint)); - - - for (i = 0; i < messages_list->len ; i++) - { - guint message_id; - guint timestamp; - guint from_handle; - guint message_type; - guint message_flags; - const gchar *message_body; - GValueArray *message_struct; - - - - message_struct = (GValueArray *) g_ptr_array_index (messages_list, i); - - message_id = g_value_get_uint(g_value_array_get_nth(message_struct, 0)); - - timestamp = g_value_get_uint(g_value_array_get_nth(message_struct, 1)); - - from_handle = g_value_get_uint(g_value_array_get_nth(message_struct, 2)); - - message_type = g_value_get_uint(g_value_array_get_nth(message_struct, 3)); - - message_flags = g_value_get_uint(g_value_array_get_nth(message_struct, 4)); - - message_body = g_value_get_string(g_value_array_get_nth(message_struct, 5)); - - g_array_append_val (message_ids, message_id); - - } - - - tp_chan_type_text_acknowledge_pending_messages(text_iface, message_ids, - NULL); - - - -} - - - -//End of file \ No newline at end of file