Monday, November 21, 2011

Upgrading testlink, changed test case formatting in exported document when exporting test cases

We had testlink 1.8.4 and we upgraded to 1.9.3, one of the differences we noted is that 1.9.3 test cases now have steps and when doing export for test cases, the test cases in the exported document looked different that we had exported before. we already exported one document with all test cases from 1.8.4 and did lots of changes. and we wanted to have 1.9.3 exported test cases looks the same

I started looking into the code, and found it in file \lib\functions\

    if ($tcInfo[$key] != '')
        $code .= '<tr>' .
                 '<td><span class="label">' . $labels['step_number'] .':</span></td>' .
                 '<td><span class="label">' . $labels['step_actions'] .':</span></td>' .
                 '<td><span class="label">' . $labels['expected_results'] .':</span></td></tr>';
        $loop2do = count($tcInfo[$key]);
        for($ydx=0 ; $ydx < $loop2do; $ydx++)
            $code .= '<tr>' .
                     '<td width="5">' .  $tcInfo[$key][$ydx]['step_number'] . '</td>' .
                     '<td>' .  $tcInfo[$key][$ydx]['actions'] . '</td>' .
                     '<td>' .  $tcInfo[$key][$ydx]['expected_results'] . '</td>' .


The above code created a table with a column for step number, column for step actions, column for step results, then there is a loop to create rows for each step. We wanted to get ride of step number column and have just one row for with one cell for step details, and another row for expected results, I have changed the code to be like below

    if ($tcInfo[$key] != '')
        $loop2do = count($tcInfo[$key]);
        for($ydx=0 ; $ydx < $loop2do; $ydx++)
            $code .= '<tr><td colspan="' .  $cfg['tableColspan'] . '"><span class="label">' . $labels['step_actions'] . ':</span><br />' .   $tcInfo[$key][$ydx]['actions'] . '</td></tr>' .
                     '<tr><td colspan="' .  $cfg['tableColspan'] . '"><span class="label">' . $labels['expected_results'] . ':</span><br />' .  $tcInfo[$key][$ydx]['expected_results'] . '</td></tr>';


This worked out great, now it looks exactly like test cases we had before

Testlink: Timeout Exception in reports after setting up integration with Bug tracking system

We are using testlink and already did setup for integration with bug tracking system that we are using, trac. While doing testing after this step we found out that some reports are not working and it is giving timeout exception

after digging into the code looking for why this is happening, I found out that there is some loop that is calling the bug tracking system for each bug attached to test case.

The function that is called to get the bug is called get_bugs_for_exec, found in file

This function is not causing any problem when opening the test cases, it is listing the bugs and getting the bug data from bug tracking system without any problems

To workaround the error I am getting in the reports, I have created another function called get_bugs_for_exec_reports with the same implementation but instead of calling the bug interface to get bug details, I just commented this part and only displayed the bug number, this will be enough for the reports, then in reports files, I changed instead of calling get_bugs_for_exec, I am calling get_bugs_for_exec_reports

files where I have done this change





function get_bugs_for_exec_report(&$db,&$bug_interface,$execution_id)
    $tables['execution_bugs'] = DB_TABLE_PREFIX . 'execution_bugs';
    $tables['executions'] = DB_TABLE_PREFIX . 'executions';
    $tables['builds'] = DB_TABLE_PREFIX . 'builds';
    $sql = "SELECT execution_id,bug_id, AS build_name " .
        "FROM {$tables['execution_bugs']}, {$tables['executions']} executions, " .
        " {$tables['builds']} builds ".
        "WHERE execution_id={$execution_id} " .
        "AND " .
        "AND " .
        "ORDER BY,bug_id";
    $map = $db->get_recordset($sql);
    // BUGID 3440 - added is_object() check
    if( !is_null($map) && is_object($bug_interface))
        foreach($map as $elem)
            $bug_list[$elem['bug_id']]['link_to_bts'] = $elem['bug_id'];#$bug_interface->buildViewBugLink($elem['bug_id'],GET_BUG_SUMMARY);
            $bug_list[$elem['bug_id']]['build_name'] = $elem['build_name'];

Wednesday, November 16, 2011

Disabling Symantec endpoint protection, Fixing copying to external drives problem

lately Symantec endpoint protection was installed in our company, it worked fine for my colleagues, but for me I wasn’t able to copy anything to external devices
so I started looking on how to disable it
I have tried lots of solutions and all didn't work
I tried normal uninstall, it required admin credentials, and the IT admin was on vacation ;)
I have tried Clean Whip tool, it didn’t uninstall endoint
I have tried disabling the services, I remember the services names, EAFRCliManager, Removel Storage Mgmt Service, Removal storage service
all methods didn’t work
Finally I started looking into the registry trying to find anything related
I was looking for hidden start up services and I found 2 services, named GeFilter, Geprotection
I have tried to change the startup type for these services, I wasn’t able to. I wasn’t able to do any changes for these services, I have tried lots of tricks to have full control over this keys to change them, none has worked.
I have noticed there is a key inside of them that is named VolumeInformation{SomeGuid}, I started looking with this Guid, and appeared that this guid is for my C drive
I wasn’t able to rename any of the keys before, but after my changes to have full control, I was able to, so I have renamed this key, removing the Guid part. then I restarted my PC
After restart still I wasn’t able to change values inside these services keys, also unable to delete. since I was able to rename, I tried renaming the services name, I was able to. after renaming, I tried deleting, I was able to
Finally I deleted both services, I look for other locations for the 2 words, GeFilter, GeProtection, deleted them all
Then I restarted my PC one more time, and voila, I was able to copy to external hard drives
To have full control over registry keys you can find more details here

Thursday, November 3, 2011

trac - installing XMLRPC plugin required for testlink integration

In order for testlink to work with trac, we must install the xmrpc plugin for testlink
To install this plugin

1- Follow the download instructions download the plugin from
2- Open the command line, go to python directory\scripts
3- Run the command

$ easy_install -Z -U /path/to/unpacked/download/version 

I used the path to the trunc folder inside the downloaded plugin

4- Search for trac.ini files and update with the below

tracrpc.* = enabled 

5- Test the install by visiting http://server-name/trac/project-name/xmlrpc, you should see a wiki page with the protocol usage with trac