Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between pages "WTP Build Process and Procedures" and "Eclipse/Testing/Session Tests"

(Difference between pages)
m (Build mechanics)
 
 
Line 1: Line 1:
This page is to collect general information and references about the WTP build process and procedures. The idea is that any WTP committer can update it, pretty much "on the fly" or "as you go", or "as needed", so that there will often be a bit of a disorganized, stream of consciousness flavor to it. Hopefully, occasionally, some kind-hearted committer will stop and organize all the miscellaneous notes and tips and references that are provided, into fun-to-read treasure that you  just can't put down.  
+
Session tests in Eclipse are tests that require that a new Eclipse session
 +
be launched for every test case run. Thus, they have additional requirements
 +
regarding controling the environment test cases are run (VM, set of plug-ins
 +
available, configuration, instance location, command line parameters) and  
 +
how results are communicated back to the test runner. This FAQ-like document describes
 +
how the Platform/Core implemented support for running session tests in the
 +
hopes of encouraging adoption of this framework not only by all the Platform/Core
 +
team members but also by members of other Eclipse teams interested in developing
 +
their own session tests.
  
Note: since only committers can edit these pages, if anyone from the community has contributions or suggestions for additions, please open a [[https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Web%20Tools;component=releng feature request]] on our releng component.  
+
<ol>
 +
  <li>
 +
    <p><strong>What is a session test?</strong></p>
 +
    <p>It is a test case that needs to be run isolated in a separate VM instance.  
 +
      Technical details: The VM running a set of test cases (the <em>controller
 +
      VM</em>) will spawn a second instance (the <em>target VM</em>) for each
 +
      session test case to be run. The test results are collected (by using a
 +
      socket) and presented to the test runner as if the test had run in the same
 +
      VM.</p>
  
Thanks, [[User:David williams|David Williams]] 01:42, 2 February 2006 (EST)
+
  </li>
 +
  <li>
 +
    <p><strong>Where can I get the framework?</strong></p>
 +
    <p> Check out the <code>org.eclipse.core.tests.harness</code> project from
 +
      dev.eclipse.org. The infrastructure for session tests is in the <code>org.eclipse.core.tests.session</code>
 +
      package. It does not hurt mentioning that besides requiring this plug-in,  
 +
      you should have <code>org.junit</code> as a pre-requisite as well.</p>
  
== Build Schedules ==
+
  </li>
 +
  <li>
 +
    <p><strong>What it is the easiest way to transform my regular plug-in tests
 +
      into session tests?</strong></p>
 +
    <p> Change the test suite creation to use <code>org.eclipse.core.tests.session.SessionTestSuite</code>
 +
      instead of <code>junit.framework.TestSuite</code>. Like this:</p>
 +
    <p>Before:</p>
  
As of February 1, 2006
+
    <pre>
 +
public class MyTestCase extends TestCase {
 +
...
 +
public void test1() {
 +
...
 +
}
 +
...
 +
public static Test suite() {
 +
return new TestSuite(MyTestCase.class);
 +
}
 +
}
 +
  </pre>
 +
    <p>After:</p>
 +
    <pre>
 +
public class MyTestCase extends TestCase {
 +
...
 +
public void test1() {
 +
...
 +
}
 +
...
 +
public static Test suite() {
 +
return new SessionTestSuite("org.myplugin.tests", MyTestCase.class);
 +
}
 +
}
 +
  </pre>
 +
    <p>The plug-in id is necessary so the plug-in which the class containing the
 +
      test case should be loaded from can be determined. Note hat it is possible
 +
      to build an empty suite and then manually add test cases and/or test suites.
 +
      When running your tests again, every test case in the suite (included those
 +
      in nested test suites) will be run in a separate Eclipse session. Note also
 +
      that if a session test suite contains another session test suite (or any
 +
      other special types of test suite), the outer session test suite will rule.</p>
 +
  </li>
 +
  <li><strong>Why do I get a <em>&quot;...SetupException: No setup descriptions
 +
    found. Ensure you are specifying the path for an existing setup file...</em>&quot;?</strong>
 +
    <p> You are running your session test suite as a regular <em>JUnit test</em>
 +
      instead of as a <em>Plug-in JUnit test</em>. A default setup (in other words,
 +
      command line) for launching new Eclipse sessions when running session tests
 +
      can be computed when running the test suite as a plug-in test, so no further
 +
      configuration is necessary. It basically contains the same parameters as
 +
      the ones used to launch the controller instance, with a different instance
 +
      location (the -data parameter). When launching the controller instance as
 +
      a regular JUnit test suite, the setup for running session tests has to be
 +
      configured manually. The framework looks for a <code>default-setup.xml</code>
 +
      file in the current directory, but a different file name and location can
 +
      be specified by using the <code>setup.file</code> system property. If not
 +
      running in Eclipse, and no setup file can be found, the execution fails
 +
      with this exception. See also next FAQ.</p>
  
Our WTP 1.0.1 contributions are due by EOD on Monday's, we smoke test that build on Tuesday's, and plan to declare it by Wednesday's at noon (eastern time).  
+
  </li>
 +
  <li>
 +
    <p><strong>Should I run my tests using a JUnit or PDE Junit launch configuration?</strong></p>
 +
    <p>Running with a PDE Junit launch configuration will allow you to test code
 +
      in your workspace. Also, launching with PDE JUnit frees you from having
 +
      to provide configuration parameters, since reasonable defaults will be obtained
 +
      from the controlling Eclipse. If you are still interested in running your
 +
      tests as a JUnit launch configuration, see the next FAQ.</p>
 +
  </li>
 +
  <li>
 +
    <p><strong>How do I run session tests from a JUnit (not PDE JUnit) launch
 +
      configuration?</strong> </p>
 +
    <p>Ensure you provide a valid set of setup files. Setup files describe option
 +
      sets that can be used when launching Eclipse. See question about options
 +
      supported by the framework.</p>
 +
  </li>
 +
  <li>
 +
    <p><strong>How do I run UI-oriented tests?</strong> </p>
 +
    <p>Make sure you also set the application when launching the target instance
 +
      to be <code>SessionTestSuite.UI_TEST_APPLICATION</code>:</p>
 +
    <pre>SessionTestSuite suite = new SessionTestSuite("org.myplugin.tests", MyTestCase.class);
 +
suite.setApplicationId(SessionTestSuite.UI_TEST_APPLICATION);</pre>
 +
  </li>
  
Our WTP 1.5 contributions are due by EOD Wednesday's, we smoke test that build on Thursday's, and plan to declare it by Friday's at noon (eastern time).  
+
  <li><strong>How can I see the command-line used for the Eclipse instance where my session test runs?</strong>
 +
<p>Use the <code>setup.debug</code> boolean system property (check the question about supported options).</p>
 +
</li>
 +
  <li><strong>How do I debug a failing test case?</strong>
 +
    <p><strong>The easy way:</strong> run the failing test case in isolation as
 +
      a regular JUnit plug-in test. Ensure the command-line matches the one built
 +
      by the session test framework when running it as a session test.</p>
  
 +
    <p><strong>The hard way:</strong> you can configure the session test to launch the target VM in debug mode using the following
 +
    VM argument:</p>
 +
    <tt>-Dsetup.override.vmArgs=Xdebug;Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y</tt>
 +
    <p>If you are using the setup.files mechanism (see below), then use these VM arguments intead:</p>
 +
    <tt>-Dsetup.files=default-setup.xml -Dsetup.options=remote_debug</tt>
 +
    <p>When the target VM is launched in debug mode, you must connect the debugger to each test individually:
 +
    <ol>
 +
      <li>From the "Run" menu, select "Debug..."</li>
 +
      <li>Select the "Remote Java Application" category on the left hand side</li>
 +
      <li>Click the "New" button to create a new launch configuration</li>
 +
      <li>Leave all settings as default and click "Debug"</li>
 +
    </ol></p>
 +
  </li>
 +
  <li><strong>How do I run performance session tests?</strong>
 +
    <p>Use the <code>PerformanceSessionTestSuite</code> instead.</p>
 +
  </li>
 +
  <li><strong>How do I run session tests that have private instance locations?</strong>
 +
    <p>Use the <code>WorkspaceSessionTestSuite</code> instead. Every test suite
 +
      has its own instance location (workspace), all test cases are run on separate
 +
      sessions on the same workspace. After the last test case is run, that location
 +
      is deleted.</p>
 +
  </li>
 +
  <li><strong>I just want to try out some examples. Any pointers?</strong>
 +
    <p>The <code>org.eclipse.core.tests.session.samples</code> package has some
 +
      examples. If you load the org.eclipse.core.tests.runtime and org.eclipse.core.tests.resources
 +
      projects, you will find real-world examples of how to use this framework.
 +
      Just look for the subclasses of <code>SessionTestSuite</code>.</p>
  
== Build mechanics ==
+
  </li>
 +
  <li><strong>What are all supported options and how to use them?</strong>
 +
    <p>The options for the session test framework are specified in the form of
 +
      system properties. <em>You only have to use these options if running with
 +
      the default settings (the currently target JRE and Eclipse and default command
 +
      line options) are not appropriate.</em></p>
 +
    <ul>
 +
      <li><strong>setup.options</strong> - only valid when setup files are available.
 +
        Setup files describe option sets, which are collections of command-line
 +
        options that can be used while running Eclipse. Examples:
 +
        <p><code>-Dsetup.options=sun_1.5,eclipse_3.1_M1,big_memory</code></p>
 +
        <p>would run Eclipse 3.1 M1 using Sun JRE 1.5 with whatever amount of
 +
          memory the <code>big_memory</code> option set specifies. While:</p>
  
The platform's releng tool should be used to "release" projects to the map files.  
+
        <p><code>-Dsetup.options=ibm_1.4,eclipse_3.0,no_jit</code></p>
Be sure to have the appropriate branch of releng project (which has the map files)  
+
        <p>would run Eclipse 3.0 on IBM JRE 1.4 with Just-in-Time compilation
loaded in your workspace.  
+
          disabled</p>
R1_0_maintenance for 1.0.x builds, and HEAD for 1.5 builds.  
+
        <p>The meaning of every option set must be specified in setup files (see
 +
          below).</p>
 +
      </li>
 +
      <li><strong>setup.files</strong> - setup files provide option set definitions
 +
        for running the session tests. Setup files can be chained, so a more general
 +
        setup file (used by the whole team) can be customized with a user specific
 +
        setup file. This is useful since option sets must specify file system
 +
        locations, and every user has its own layout for JRE and Eclipse installs.  
 +
        The expected use of this option is:
 +
        <p><code>-Dsetup.files=/tmp/default-setup.xml,~/user-setup.xml</code></p>
  
As projects are versioned, please use the "standard" format, in UTC time, following
+
        <p>Here, the <code>default-setup.xml</code> file is shared by the whole
vYYYYMMDDHHMM.  
+
          team and defines all option sets that the team may use. The <code>user-setup.xml</code>
This is important as these cvs tags become the qualifier field of the plugin's version.
+
          merely overrides location sensitive options to adapt them to the user
 +
          specific file system layout. Look [http://eclipse.org/eclipse/platform-core/documents/default-setup.xml here]
 +
          for an example of a default setup file and [http://http://eclipse.org/eclipse/platform-core/documents/user-setup.xml  here] for an example of a user custom setup file. These examples are intended
 +
          to be self-explanatory and are actually useful as they are (the user-specifc
 +
          setup file has to be tweaked to support your specific file system layout.</p>
 +
      </li>
  
Note: do NOT use underscores in the CVS version, as there are some issues with Eclispe tooling when it finds an underscore in a plugin or version qualifier, see [[https://bugs.eclipse.org/bugs/show_bug.cgi?id=89428 89428]].
+
      <li><strong>setup.override.eclipseArgs</strong> - allows the user to manually
 +
        override command-line options corresponding to Eclipse arguments. Example:
 +
        <p><code>-Dsetup.override.eclipseArgs=data=c:/workspace;debug;showlocation</code></p>
 +
      </li>
 +
      <li><strong>setup.override.vmArgs</strong> - allows the user to manually
 +
        override command-line options corresponding to VM arguments (other than
 +
        system properties). Example:
 +
        <p><code>-Dsetup.override.vmArgs=Xint;Xmx256m;hotspot;cp=startup.jar</code></p>
 +
      </li>
 +
      <li><strong>setup.override.systemProperties</strong> - allows the user to
 +
        manually override command-line options corresponding to system properties.
 +
        Example:
 +
        <p><code>-Dsetup.override.systemProperties=osgi.checkConfiguration;osgi.locking=none</code></p>
  
== Background and Further Reading References ==
+
      </li>
 +
      <li><strong>setup.debug</strong> - enables the session test framework debug
 +
        mode. In this mode, among other things, the command-line for every session
 +
        launched is dumped to the console, so it is useful to verify which option
 +
        sets are being selected and how they map to the command line.</li>
 +
    </ul>
 +
    <p></p>
 +
  </li>
 +
  <li><strong>What if I find problems using the session test framework or would
 +
    like to request/propose an enhancement?</strong>
 +
    <p>Please report them in Bugzilla against the Platform/Runtime component.</p>
  
We in WTP following the basic process and recommendations for versioning as the base Eclipse platform.
+
  </li>
[http://www.eclipse.org/equinox/documents/plugin-versioning.html Plugin Versioning]
+
</ol>
 
+
Very helpful guide to builds and automatic testing.
+
[http://www.eclipse.org/articles/Article-PDE-Automation/automation.html Build and Test Automation for plug-ins and features]
+
 
+
Good step-by-step on how to do updates. [http://www.eclipse.org/articles/Article-Update/keeping-up-to-date.html How To Keep Up To Date]
+
 
+
We base our builds on the Eclipse platform's "basebuilder".
+
[http://wiki.eclipse.org/index.php/Platform-releng Platform-releng]
+
 
+
With our WTP specific needs addressed in the WTP project called releng.wtpbuilder.
+
While slightly out of date, see the [[https://bugs.eclipse.org/bugs/attachment.cgi?id=26584 attachment]] to [[https://bugs.eclipse.org/bugs/show_bug.cgi?id=108259 bug 108259]]
+
 
+
Our basic server configuration and cruise control triggers is handled by the WTP project called releng.builder (see especially the tools/cruise directory in that project).
+
 
+
And ... never forget [http://help.eclipse.org/help31/index.jsp Eclipse Help] ... search for things related to update manager, PDE, features, site.xml, etc.
+

Revision as of 15:33, 6 February 2006

Session tests in Eclipse are tests that require that a new Eclipse session be launched for every test case run. Thus, they have additional requirements regarding controling the environment test cases are run (VM, set of plug-ins available, configuration, instance location, command line parameters) and how results are communicated back to the test runner. This FAQ-like document describes how the Platform/Core implemented support for running session tests in the hopes of encouraging adoption of this framework not only by all the Platform/Core team members but also by members of other Eclipse teams interested in developing their own session tests.

  1. What is a session test?

    It is a test case that needs to be run isolated in a separate VM instance. Technical details: The VM running a set of test cases (the controller VM) will spawn a second instance (the target VM) for each session test case to be run. The test results are collected (by using a socket) and presented to the test runner as if the test had run in the same VM.

  2. Where can I get the framework?

    Check out the org.eclipse.core.tests.harness project from dev.eclipse.org. The infrastructure for session tests is in the org.eclipse.core.tests.session package. It does not hurt mentioning that besides requiring this plug-in, you should have org.junit as a pre-requisite as well.

  3. What it is the easiest way to transform my regular plug-in tests into session tests?

    Change the test suite creation to use org.eclipse.core.tests.session.SessionTestSuite instead of junit.framework.TestSuite. Like this:

    Before:

    public class MyTestCase extends TestCase {
    	...
    	public void test1() {
    		...
    	}
    	...
    	public static Test suite() {
    		return new TestSuite(MyTestCase.class);
    	}
    }
    	  

    After:

    public class MyTestCase extends TestCase {
    	...
    	public void test1() {
    		...
    	}
    	...
    	public static Test suite() {
    		return new SessionTestSuite("org.myplugin.tests", MyTestCase.class);
    	}
    }
    	  

    The plug-in id is necessary so the plug-in which the class containing the test case should be loaded from can be determined. Note hat it is possible to build an empty suite and then manually add test cases and/or test suites. When running your tests again, every test case in the suite (included those in nested test suites) will be run in a separate Eclipse session. Note also that if a session test suite contains another session test suite (or any other special types of test suite), the outer session test suite will rule.

  4. Why do I get a "...SetupException: No setup descriptions found. Ensure you are specifying the path for an existing setup file..."?

    You are running your session test suite as a regular JUnit test instead of as a Plug-in JUnit test. A default setup (in other words, command line) for launching new Eclipse sessions when running session tests can be computed when running the test suite as a plug-in test, so no further configuration is necessary. It basically contains the same parameters as the ones used to launch the controller instance, with a different instance location (the -data parameter). When launching the controller instance as a regular JUnit test suite, the setup for running session tests has to be configured manually. The framework looks for a default-setup.xml file in the current directory, but a different file name and location can be specified by using the setup.file system property. If not running in Eclipse, and no setup file can be found, the execution fails with this exception. See also next FAQ.

  5. Should I run my tests using a JUnit or PDE Junit launch configuration?

    Running with a PDE Junit launch configuration will allow you to test code in your workspace. Also, launching with PDE JUnit frees you from having to provide configuration parameters, since reasonable defaults will be obtained from the controlling Eclipse. If you are still interested in running your tests as a JUnit launch configuration, see the next FAQ.

  6. How do I run session tests from a JUnit (not PDE JUnit) launch configuration?

    Ensure you provide a valid set of setup files. Setup files describe option sets that can be used when launching Eclipse. See question about options supported by the framework.

  7. How do I run UI-oriented tests?

    Make sure you also set the application when launching the target instance to be SessionTestSuite.UI_TEST_APPLICATION:

    SessionTestSuite suite = new SessionTestSuite("org.myplugin.tests", MyTestCase.class);
    suite.setApplicationId(SessionTestSuite.UI_TEST_APPLICATION);
  8. How can I see the command-line used for the Eclipse instance where my session test runs?

    Use the setup.debug boolean system property (check the question about supported options).

  9. How do I debug a failing test case?

    The easy way: run the failing test case in isolation as a regular JUnit plug-in test. Ensure the command-line matches the one built by the session test framework when running it as a session test.

    The hard way: you can configure the session test to launch the target VM in debug mode using the following VM argument:

       -Dsetup.override.vmArgs=Xdebug;Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y
    

    If you are using the setup.files mechanism (see below), then use these VM arguments intead:

       -Dsetup.files=default-setup.xml -Dsetup.options=remote_debug
    

    When the target VM is launched in debug mode, you must connect the debugger to each test individually:

    1. From the "Run" menu, select "Debug..."
    2. Select the "Remote Java Application" category on the left hand side
    3. Click the "New" button to create a new launch configuration
    4. Leave all settings as default and click "Debug"

  10. How do I run performance session tests?

    Use the PerformanceSessionTestSuite instead.

  11. How do I run session tests that have private instance locations?

    Use the WorkspaceSessionTestSuite instead. Every test suite has its own instance location (workspace), all test cases are run on separate sessions on the same workspace. After the last test case is run, that location is deleted.

  12. I just want to try out some examples. Any pointers?

    The org.eclipse.core.tests.session.samples package has some examples. If you load the org.eclipse.core.tests.runtime and org.eclipse.core.tests.resources projects, you will find real-world examples of how to use this framework. Just look for the subclasses of SessionTestSuite.

  13. What are all supported options and how to use them?

    The options for the session test framework are specified in the form of system properties. You only have to use these options if running with the default settings (the currently target JRE and Eclipse and default command line options) are not appropriate.

    • setup.options - only valid when setup files are available. Setup files describe option sets, which are collections of command-line options that can be used while running Eclipse. Examples:

      -Dsetup.options=sun_1.5,eclipse_3.1_M1,big_memory

      would run Eclipse 3.1 M1 using Sun JRE 1.5 with whatever amount of memory the big_memory option set specifies. While:

      -Dsetup.options=ibm_1.4,eclipse_3.0,no_jit

      would run Eclipse 3.0 on IBM JRE 1.4 with Just-in-Time compilation disabled

      The meaning of every option set must be specified in setup files (see below).

    • setup.files - setup files provide option set definitions for running the session tests. Setup files can be chained, so a more general setup file (used by the whole team) can be customized with a user specific setup file. This is useful since option sets must specify file system locations, and every user has its own layout for JRE and Eclipse installs. The expected use of this option is:

      -Dsetup.files=/tmp/default-setup.xml,~/user-setup.xml

      Here, the default-setup.xml file is shared by the whole team and defines all option sets that the team may use. The user-setup.xml merely overrides location sensitive options to adapt them to the user specific file system layout. Look here for an example of a default setup file and here for an example of a user custom setup file. These examples are intended to be self-explanatory and are actually useful as they are (the user-specifc setup file has to be tweaked to support your specific file system layout.

    • setup.override.eclipseArgs - allows the user to manually override command-line options corresponding to Eclipse arguments. Example:

      -Dsetup.override.eclipseArgs=data=c:/workspace;debug;showlocation

    • setup.override.vmArgs - allows the user to manually override command-line options corresponding to VM arguments (other than system properties). Example:

      -Dsetup.override.vmArgs=Xint;Xmx256m;hotspot;cp=startup.jar

    • setup.override.systemProperties - allows the user to manually override command-line options corresponding to system properties. Example:

      -Dsetup.override.systemProperties=osgi.checkConfiguration;osgi.locking=none

    • setup.debug - enables the session test framework debug mode. In this mode, among other things, the command-line for every session launched is dumped to the console, so it is useful to verify which option sets are being selected and how they map to the command line.

  14. What if I find problems using the session test framework or would like to request/propose an enhancement?

    Please report them in Bugzilla against the Platform/Runtime component.

Back to the top