JT Harness Release Notes - Version 4.4.1

# Release Notes

## JT Harness Binary Distribution

#### Version 4.4.1
December 2011

Skip TOC

## Table of Contents

Introduction

Layout

Tutorial

Requirements

Run JT Harness

Security Note

About This Release

Security Exceptions With Java 7 on Windows

General Bugs Fixed in this Release

Fixed Bugs of Interest to Test Suite Architects

Known Bugs in this Release

Usage Notes

## Introduction

JT harness is based on Oracle's JavaTest harness. The JT harness is a general purpose, fully-featured, flexible, and configurable test harness very well suited for most types of unit testing. Originally developed as a test harness to run TCK test suites, it has since evolved into a general purpose test platform.

The JT harness:

- Is designed to configure, sequence, and run test suites that consist of many (100,000 or more) discrete, independent tests. It is especially good at testing APIs and compilers.
- Can be used to run tests on all of the Java platforms, from the Java Card platform, to the Java Platform, Enterprise Edition ("Java EE").
- Enables you to create test suites that are self-contained products that customers can easily configure and run.

We encourage you to try JT harness, participate in the community, and contribute to further development.

JT harness 4.4.1 is a maintenance release that fixes issues in many areas. For a detailed report, see Bugs Fixed in Release BUILD_VERSION. This binary release contains a built version of the JT harness (`lib/javatest.jar`) and a tutorial that introduces you to the JT harness graphical user interface.

Top

## Layout

The JT harness binary distribution installation directory is laid out as follows:

`legal/` | Contains the licenses and Oracle copyrights that apply to this open source product.
`lib` | Contains the JT harness binary `javatest.jar`, the JUnit binary `jt-junit.jar`, and support libraries.
`doc/` | Contains documentation that accompanies the JT harness product.
`examples/tutorial` | Contains the JT harness tutorial.

Top

## Tutorial

The JT harness tutorial includes an HTML tutorial that uses an example API and testsuite to introduce you to the JT harness graphical user interface. Follow these steps to run the tutorial:

1. Make `examples/tutorial` your current directory.
2. Open `tutorial.html` in your web browser and follow the step-by-step directions.

Top

## Requirements

The JT harness requires the technologies listed in the following table.

Technology | Where to Get It | Notes
--- | --- | ---
JDK™ version 1.6 or later | http://www.oracle.com/technetwork/java/javase/overview/index.html | See Security Exceptions With Java 7 on Windows for known issues with Java 7.

Top

## Run JT Harness

Run the JT harness using the following command:

`% java -jar javatest.jar`

Note: Typically, a user executes JT harness in the context of a test suite. Read the tutorial documentation for instructions about how to execute JT harness with the tutorial example test suite.

## Security Note

This section discusses potential security vulnerabilities in the harness deliverables.

It is extremely important to note that the JT Harness installation and runtime system is fundamentally a developer system that is not specifically designed to guard against any malicious attacks from outside intruders. If sample code or tests you author make a network call, you can expose the JT Harness operating environment during execution. For this reason, it is critically important to observe the precautions outlined in the following security guidelines when installing and running JT Harness.

The harness itself is self-contained in `javatest.jar`. The only external dependency is `jh.jar`, which should be placed either on the classpath or in the same directory as `javatest.jar`. If desired, the following optional parts of the binary distribution can be deleted:

- The examples in the `examples/` directory.
- Documentation in the `doc/` directory.
- `lib/jt-junit.jar` which is an optional binary component.

To maintain optimum network security, JT Harness can be installed and run in a "closed" network operating environment, meaning JT Harness is not connected directly to the Internet, or to a company Intranet environment that could introduce unwanted exposure to malicious intrusion. This is the ideal secure operating environment when it is possible.

JT Harness does not require an "Intranet" connection that supports network connections to systems outside the JT Harness architecture to intra-company resources, but, for example, some Java ME applications in a test suite might use an HTTP connection. If JT Harness or applications launched from JT Harness are open to any network access you must observe the following precautions to protect valuable resources from malicious intrusion:

- Install JT Harness behind a secure firewall that strictly limits unauthorized network access to the Java ME SDK file system and services. Limit access privileges to those that are required for JT Harness usage while allowing all the I-directional local network communications that are necessary for JT Harness functionality. The firewall configuration must support these requirements to run JT Harness while also addressing them from a security standpoint.

- Follow the principle of "least privilege" by assigning the minimum set of system access permissions required for installation and execution of JT Harness.

- Do not store any data sensitive information on the same file system that is hosting JT Harness.

- To maintain the maximum level of security, make sure the operating system patches are up-to-date on the JT Harness host machine.

#### Remote Agent Risks

The harness includes the JT Harness agent, a remote execution framework. Using the agent opens communication ports on your machine and on the agent machine, therefore care is required to ensure that the machine is protected against malicious attack.

For secure operation, both the host and the remote machine should be used in a protected intranet on a physically isolated network.

Top

## About This Release

This section describes specific features and behaviors in the current release.

Top

## Security Exceptions With Java 7 on Windows

When using Java 7 on Windows, the harness might experience problems executing particular parts of the Java 7 APIs because, by default, the harness security manager denies access to certain properties. The problem might manifest as one of the Known Exceptions reproduced below (see java.io.IOException and Socket Exception Error).

There are three ways to workaround the security exceptions:

1. Use the Java 6 runtime instead. Java 6 is the target execution platform for the harness and is also the minimum Java version supported by the harness.

2. Set the `javatest.security.allowPropertiesAccess` system property to `"true"` at startup. The harness security manager (JavaTestSecurityManager) is automatically installed at startup, and its default settings deny access to the System Properties object. You can manually allow access to harness properties as follows:

   `java -Djavatest.security.allowPropertiesAccess=true ...`

3. Enable and disable property access programatically. The following code temporarily allows properties access until after the code in the `try` block is executed. Beware of race conditions when using this code.

               SecurityManager sm = System.getSecurityManager();
               JavaTestSecurityManager jtSm = null;
               boolean prev = false;
               if (sm != null && sm instanceof JavaTestSecurityManager) {
                   jtSm = (JavaTestSecurityManager) sm;
                   prev = jtSm.setAllowPropertiesAccess(true);
               }
               try {
                   // execute exception causing actions here
               } finally {
                   if (jtSm != null) {
                       jtSm.setAllowPropertiesAccess(prev);
                   }
               }

Top

### Known Exceptions

The following exceptions might be seen if you use the harness with the Java 7 platform on the Windows operating system. Use one of the above workarounds to avoid these exceptions.

#### java.io.IOException

    java.io.IOException: The requested operation cannot be performed on a file with
    a user-mapped section open
            at sun.nio.ch.FileDispatcherImpl.truncate0(Native Method)
            at sun.nio.ch.FileDispatcherImpl.truncate(FileDispatcherImpl.java:xxx)
            at sun.nio.ch.FileChannelImpl.truncate(FileChannelImpl.java:xxx)

Top

#### Socket Creation Error

    java.lang.NoClassDefFoundError: Could not initialize class java.net.SocksSocketImpl
    	at java.net.ServerSocket.setImpl(ServerSocket.java:xxx)
    	at java.net.ServerSocket.<init>(ServerSocket.java:xxx)
    	at java.net.ServerSocket.<init>(ServerSocket.java:xxx)
    	at com.sun.jck.lib.multijvm.group.TaskManager.run(TaskManager.java:xxx)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:xxx)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:xxx)
    	at java.lang.Thread.run(Thread.java:xxx)
    or with the following exception:
    java.lang.ExceptionInInitializerError
    	at java.net.ServerSocket.setImpl(ServerSocket.java:xxx)
    	at java.net.ServerSocket.<init>(ServerSocket.java:xxx)
    	at java.net.ServerSocket.<init>(ServerSocket.java:xxx)
    	at com.sun.jck.lib.multijvm.group.TaskManager.run(TaskManager.java:xxx)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:xxx)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:xxx)
    	at java.lang.Thread.run(Thread.java:xxx
    )
    Caused by: java.lang.SecurityException: Action forbidden by JavaTest Harness: checkPropertiesAccess
    	at com.sun.javatest.JavaTestSecurityManager.checkPropertiesAccess(JavaTestSecurityManager.java:xxx)
    	at java.lang.System.getProperties(System.java:xxx)
    	at java.net.PlainSocketImpl$1.run(PlainSocketImpl.java:xxx)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.net.PlainSocketImpl.<clinit>(PlainSocketImpl.java:xxx)

Top

### Bugs Fixed in This Release

This release of the harness contains fixes for the following defects:

Bug ID | Description
--- | ---
6495417 | Improve usability of the "Report Converter" tool.
6497948 | Improve test selection GUI by employing check-box tree.
6513941 | Save view filter setting.
6540784 | Improve speed of loading the ResultCache file.
6767605 | Restoring state for slightly different test suites causes problem.
6793690 | Harness takes an unreasonably long time to start executing a large number of selected test names.
6901152 | Allow known test execution order.
6957357 | Configuration->Load Recent Configuration menu behavior is incorrect.
6942088 | Not possible to generate COF file for old results.
6867785 | COF generator doesn't use the platform of the host where the tests have been executed.
6974144 | COF generator should always add information on test cases to XML.
6974915 | COF file should be based on the JTI for providing info about tests which were not run.

Top

### Fixed Bugs Specifically of Interest to Test Suite Architects

The following bugs will be of interest to test suite architects.

Bug ID | Description
--- | ---
6909123 | ResourceTable class deadlocks if lock name is duplicated.
6994793 | Source file path name normalization in test description.
7024690 | Memory leak in test suite properties dialog.
7036583 | Invalid File to URL conversion in TestSuite.open0.
7060753 | Need an ability to show big amount of information in ErrorQuestion.
7085889 | Fix multiple issues with Architect's guide - updates, formatting, etcetera.
Multiple IDs | Protect against possible NPEs, initialization, synchrronization, invalid conversion and finalization problems.

Top

### Known Bugs in This Release

The following are known issues in this release.

Bug ID | Description
--- | ---
6434239 | A long name for template/configuration files cannot be fully displayed.
6446655 | There's a keyboard navigation problem in the Tests To Run tree.
6451875 | Log Viewer: Impossible to mark log text when live scrolling mode is ON.
6478125 | Some files remain locked after closing the working directory, preventing the deletion of the directory.
6488302 | Errors while opening write-protected working directory.
6518334 | Report Converter does not generate an error message for an existing report file.
6518375 | Resolving conflicts between two reports in the Report Converter is confusing.
6543609 | "Waiting to lock test result cache" is not interruptible.
6675884 | Tooltips in PropertiesQuestion are sometimes incorrect.
6796286 | Inconsistent style for editing numeric values in IntQuestion, FloatQuestion and PropertiesQuestion.

Top

### Changes Since JT Harness, Version 3.2

The JT Harness, Version 4.1 release provided basic changes in the following areas:

- Upgraded template support using `.jtm` file extension.
- Upgraded reporting system including an XML report type.
- New Report converter tool to merge or convert XML reports.
- New Current Template view filter.
- New command line option to write a configuration (`.jti` file).
- New command line control of filter used for generating reports.
- Updated rendering of some interview question types.
- New log viewer system allows browsing of debugging and tracing information.
- Additional capabilities in the Folder Pane test lists (a context menu and a second column of information)

Version 4.1.2 was a bug fix release.

Version 4.1.3 added support for test suites based on JUnit 3.8.x and 4.x and also addressed bug fixes.

Version 4.1.4 was a bug fix release.

Version 4.2 was a bug fix release.

Version 4.2.1 was a maintenance release. It included changes to enable the Test Panel to update as a test runs, and extended the Quick Pick execution to include Tests to Run settings in configurations. This behavior is controlled by preference settings.

Version 4.3 included the following major features:

- The tabbed window style is the only window mode. MDI and SDI window modes were removed.
- GUI colors became partially configurable in the Preferences dialog. Other settings are still available via command line.
- Service startup information was enhanced to show progress.
- Saving of previous desktop is now disabled by default (was enabled previous to this release).
- Usability was improved in the main test tree. Added selection and right-click actions to choose from a context menu.

Version 4.4 was a feature release. In addition to fixing bugs, it introduced Known Failures Lists and refined the exclude list feature to support case sensitivity.

Top

### Usage Notes

This section discusses features that are working properly but have limitations due to factors JT Harness can't control.

#### Printing Pages from the Online Help and Test Reports

Because of the method the Java SE platform uses to render fonts, when you print a document from the harness user interface, the fonts in the printed documents are larger than they are when rendered on the screen.

The JT Harness User's Guide has been provided in PDF form for your use in printing pages from the documents. While the online help viewer supports printing operations, in some cases you may be unable to use it to print a specific page. If this occurs, use the PDF version of the appropriate User's Guide to print the page. Printing of non-HTML report types is not supported. Users are informed of this when they attempt to print a non-HTML report type. Support will be added for this in a future release.

Top

#### Changing Status Colors in the GUI

JT Harness allows you to specify the status colors used in the GUI. See the online help for detailed information about changing the default status colors.

#### Agent Monitor Tool

The Agent Monitor tool may not apply to all test suites, even if the test suite uses an agent. See your test suite documentation for detailed information about the agent that it uses and its use of the Agent Monitor tool.

Top

Copyright © 2011, Oracle and/or its affiliates. All rights reserved. The JT Harness project is released under the GNU General Public License Version 2 (GPLv2).