Archive for the ‘Support Bulletins’ Category

How to Open up Polarion to External Customers

Friday, August 8th, 2008

The described scenario assumes you want to open Polarion ALM to external customers or suppliers

If you are just running a Polarion ALM instance that is directly accessible from the Internet you also expose your Subversion repository , confidential content is accessible from outside.

Actually the Subversion repository is already protected by the access file, but it is easy to expose content by mistake.

This blog describes an approach to open Polarion ALM to external customers and avoid the risk described above.

Internal users access Polarion ALM directly from inside the internal network. The change will be transparent for them.

External users access Polarion ALM via a proxy provided by Apache. This proxy will forward safe requests only which don’t reveal internal content of your repository, even if Subversion’s access file is not configured to hide that information.

Polarion and Apache Proxy

Basic configuration of the proxy
The basic configuration of the Apache running the proxy is quite simple.

Adding the following lines to the default configuration is sufficient (replace <polarion-server> with the URL of your Polarion server):
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
ProxyRequests Off
ProxyPass /polarion <polarion-server>/polarion
ProxyPassReverse /polarion <polarion-server>/polarion

With this configuration all requests to <external-server>/polarion will be passed to <internal-server>/polarion. Please make sure that the Firewall grants access from external-server to internal-server on port 80.

Securing the Proxy
With this configuration an external user could still access files in the repository. Actually, it is not that bad, as the user has to know the exact path of the file he tries to access.

Following line closes this possibility:
ProxyPass /polarion/webdav !

Unfortunately this configuration has a disadvantage: It will also disable access to LiveDocuments using Word and Excel for the external users.

Re-enabling access to Attachment
Disabling all access to the repository also prevents users from downloading attachments.

To enable download of attachments, the /svnwebclient/fileDownload.jsp URL has to be forwarded to the internal server.

Add following lines to the configuration of your Apache acting as proxy:
ProxyPass /svnwebclient/fileDownload.jsp <polarion-server>/svnwebclient/fileDownload.jsp
ProxyPassReverse /svnwebclient/fileDownload.jsp <polarion-server>/svnwebclient/fileDownload.jsp

Doing that without any additional precautions is risky: Again, the access of the external user to files in the repository is only restricted by the access configuration.

An additional layer of security can be implemented by restricting the parameters of the URL to only allow download of files inside the project(s) the external user is able to access. This is achieved by using mod_rewrite to redirect every forbidden access to a nonexistent URL.

Add following lines to your configuration:
LoadModule rewrite_module modules/mod_rewrite.so
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/svnwebclient/fileDownload.jsp$
RewriteCond %{QUERY_STRING} !^.*&url=<project-location>
RewriteRule .* /nonexistent

<project-location> has to be replaced with the location of the project in the repository, all slashes (/) in have to be replaced with %2F and a %2F should be appended at the end.

Example:
Assuming you want to expose Library project from the Polarion demo-data and your internal Polarion server has the URL http://polarion.

You can get the location of the project from the Overview Topic of the project.

The location is Demo%20Projects/demolibrary, the string to use is Demo%20Projects%2Fdemolibrary%2F

The resulting configuration to use for the proxy is:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
ProxyRequests Off
ProxyPass /polarion http://polarion/polarion
ProxyPassReverse /polarion http://polarion/polarion
ProxyPass /polarion/webdav !
ProxyPass /svnwebclient/fileDownload.jsp http://polarion/svnwebclient/fileDownload.jsp
ProxyPassReverse /svnwebclient/fileDownload.jsp http://polarion/svnwebclient/fileDownload.jsp
LoadModule rewrite_module modules/mod_rewrite.so
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/svnwebclient/fileDownload.jsp$
RewriteCond %{QUERY_STRING} !^.*&url=Demo%20Projects%2Fdemolibrary%2F
RewriteRule .* /nonexistent

Best Wishes
Benjamin

Log-Rotation for Apache

Sunday, July 13th, 2008

The following statement will enable log rotation for Apache. The command is specified for installation in a Windows system. Please check paths for you own installation.
CustomLog “|C:/Polarion3.1.1/bundled/apache_2.0.59/bin/rotatelogs.exe C:/Polarion3.1.1/data/logs/apache/access.log 60″ common

Log rotation works by a pipe to the rotatelogs.exe, which itself can be configured to rotate logs by time or by size. Try rotatelogs -? to get help.

The given statement is suitable for the access log file, which receive most of the log output. Look for further log configuration in httpd.conf and adopt them appropriately to rotate all Apache log files.

Best Wishes
Matthias

Hibernation of Windows and Polarion

Thursday, May 15th, 2008

When you run Polarion for a while and want to hibernate your computer, sometimes you get the message “Insufficient System Resources Exist to Complete the API”. This is typical the case on computers where you develop customizations for Polarion. The problem will not occur on servers, since they will normally never hibernate.
This problem occurs because the Windows kernel power manager cannot obtain the memory resources that are required to prepare the computer to hibernate.
Polarion utilizes a lot of memory and the garbage collector gives it back to the operating system . Then the main memory gets cluttered and the hibernation fails. There is a hotfix available from Microsoft, which can be downloaded. Just look up the article “KB909095”.

Best Wishes
Matthias

Fix Pre-existing Workflow Configurations in 3.1.0

Wednesday, April 16th, 2008

SUPPORT BULLETIN
Since at least v. 2.0.1 Polarion has had a mistake in the default workflow configuration. In the Reopen action, one of the parameters of a workflow function (valid.states) has a status value "opened" as shown in the following code example:

<action id="reopen" name="Reopen">
    <cleared>
        <field name="resolution"/>
        <field name="resolvedOn"/>
    </cleared>

    <functions>
        <function name="LinkedWorkItemsStatusChange">
            <param name="back.link.roles" value="depends_on"/>
            <param name="link.roles" value="parent"/>
            <param name="valid.states" value="opened,inprogress,reopened"/>
            <param name="target.state" value="reopened"/>
            <param name="clear.attribs" value="resolution,resolvedOn"/>
        </function>
    </functions>
</action>

The correct word is “open”, and this has been changed in version 3.1. If you are upgrading to that version and have an existing workflow configuration form any older version, you should check both you global configuration and any project configurations that may have been based on the default global configuration (which contained the error), and fix the configuration(s) as follows:

<action id="reopen" name="Reopen">
    <cleared>
        <field name="resolution"/>
        <field name="resolvedOn"/>
    </cleared>

    <functions>
        <function name="LinkedWorkItemsStatusChange">
            <param name="back.link.roles" value="depends_on"/>
            <param name="link.roles" value="parent"/>
            <param name="valid.states" value="open,inprogress,reopened"/>
            <param name="target.state" value="reopened"/>
            <param name="clear.attribs" value="resolution,resolvedOn"/>
        </function>
    </functions>
</action>

Exposing Workitems Inside the Polarion Wiki

Thursday, March 6th, 2008

Polarion 3.0.3 Release is out. The new release ships with a hidden but quite interesting improvement of its wiki functionality.
The feature is called “embedding of workitems inside wiki pages”. Instead of simple references you can directly display workitems inside your wiki pages.

In this blog I want to give you some examples how this functionality can come very handy inside your projects.
Just by embedding simple workitem queries in your wiki pages you will be able to create custom specification documents, impact reports or project status reports.

Lets have a look at the different ways how work items can be embedded.

Embedding via Workitem ID

Use this if you want to embed exactly one workitem inside your wiki page.
Wiki syntax:
{wi: ProjectName/WorkItemId | List of Fields | expand=yes/no}

ProjectName(optional): name of project where work item is located. If no one is specified current project name used by default
WorkItemId: identifier of work item.
fields = List of Fields(optional): list of entries in form FieldName as Type that specifies fields to output. Type can be text, image, image-text. By default the application outputs following fields: id as text, type as image, status as image, severity as image.
expand: if this property is set to yes all specified information about work item is presented below the link

Example:
{wi: MyProject/WI-245 | description as text, status as text-image, severity as text | expand = no}

Embedding By Query

Use this if you want to add multiple items inside your wiki page.
The syntax text is similiar to Polarion Query builder syntax
{wi: query=Polarion Query | List of Fields | sortby = Field tablewidth=Width | tableheight = Height | expand=yes/no}

Example:
{wi: query= type:defect AND (priority:critical OR priority:major) | sortby=created | fields = ID, status as image, severity as image-text, description as text | tablewidth=90% | tableheight=240px}

Creation of custom specification documents

In many cases specification documents consist of some static sections and sections in which you list requirements.

In following Example I combined both approaches - embedding via workitem ID and embedding by query - to create a simple specification document

fullspecificationpage.gif
After some static section at the beginning we list the description of workitem DEMO-1.
Using list as output format( output=list) will display all selected fields below the workitem. I prefer that format because I find it easier to read.
Expand is set to yes (expand=yes) so all listed fields (here only description) are expanded already when you open the wiki page.
We could add additional fields inside the fields section seperated by comma (fields = title as text, description as text…)

embeddingoneitem.gif

In the next section I have added multiple items by query. We have two options here. We can specify a query to filter for specific requirements to be displayed..
For example we could query for all functional requirements with following query: categories.id:functional or
for all requirements in status proposed with following query: status:proposed.
The other option is to pick a set of items by id inside our query.
I have chosen the latter approach in our example.

embeddingmultipleitems.gif

Displaying linked testcases to a requirement in a table view

You can easily query for linked testcases to a requirement if you know the id(s) of the requirement.
Lets say our requirement has the id DEMO-22 and we want to find all testcases linked to it.
To display requirement DEMO-22 we simply embed it by ID. To display linked testcases in the next column we use following trick.
All linked testcases will have a link to DEMO-22. So if we don’t search by id (id:DEMO-22) but just for the word DEMO-22 we will find all items with the word DEMO-22 inside

.wikiquerylinkedtestcases.gif
All testcases that link to DEMO-22 will have the word inside the linked work items section.
As we want to list testcases only the complete query will look like this: “type:testcase AND DEMO-22″

linkedtestcases.gif

Creating Backlog Reports by User

If you want to embed all open items per user for a specific timpoint you can do that simply by following query:
status:open AND timePoint.id:Iter1 AND assignee.id:ron

backlogwiki.gif

backlog.gif

Manage Project reports

Create a wiki page that displays items of type project report. The project report item contains personal judgement of the project manager about his project
In that way you can aggregate reports of different projects within one wiki page

Manage risks

Some requirements should be controlled via risks that are assigned to users for periodical review.
Create a risk page which embeds the risks sorted by different aspects

I hope the different scenarios gave you some ideas how that feature could be applied within your project.
Think about: News pages, project announcements, testplan reports, release notes, glossaries
Stay tuned for upcoming blogs.

Best
Tim