Return-Path: X-Original-To: apmail-sling-commits-archive@www.apache.org Delivered-To: apmail-sling-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 18EF710358 for ; Thu, 4 Apr 2013 12:39:33 +0000 (UTC) Received: (qmail 20275 invoked by uid 500); 4 Apr 2013 12:39:33 -0000 Delivered-To: apmail-sling-commits-archive@sling.apache.org Received: (qmail 20241 invoked by uid 500); 4 Apr 2013 12:39:32 -0000 Mailing-List: contact commits-help@sling.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@sling.apache.org Delivered-To: mailing list commits@sling.apache.org Received: (qmail 20233 invoked by uid 99); 4 Apr 2013 12:39:32 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 04 Apr 2013 12:39:32 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 04 Apr 2013 12:39:30 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id CD33C2388A32 for ; Thu, 4 Apr 2013 12:39:10 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r857264 - in /websites/staging/sling/trunk/content: ./ documentation/development/sling-testing-tools.html Date: Thu, 04 Apr 2013 12:39:10 -0000 To: commits@sling.apache.org From: buildbot@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20130404123910.CD33C2388A32@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: buildbot Date: Thu Apr 4 12:39:10 2013 New Revision: 857264 Log: Staging update by buildbot for sling Modified: websites/staging/sling/trunk/content/ (props changed) websites/staging/sling/trunk/content/documentation/development/sling-testing-tools.html Propchange: websites/staging/sling/trunk/content/ ------------------------------------------------------------------------------ --- cms:source-revision (original) +++ cms:source-revision Thu Apr 4 12:39:10 2013 @@ -1 +1 @@ -1464501 +1464504 Modified: websites/staging/sling/trunk/content/documentation/development/sling-testing-tools.html ============================================================================== --- websites/staging/sling/trunk/content/documentation/development/sling-testing-tools.html (original) +++ websites/staging/sling/trunk/content/documentation/development/sling-testing-tools.html Thu Apr 4 12:39:10 2013 @@ -93,11 +93,11 @@
  • Run integration tests via HTTP against a Sling instance that is started during the Maven build cycle, or independently.
  • This page describes those tools, and points to the bundles that implement them.

    -

    The testing/samples/integration-tests module demonstrates these tools, and is also meant as a sample project to show how to run integration tests for Sling-based applications.

    -

    The main Sling integration tests at launchpad/integration-tests were created before this testing framework, and do not use it yet (as of March 2011). The new testing tools are simpler to use, but the "old" tests (all 400 of them as I write this) fulfill their validation role for testing Sling itself, there's no real need to modify them to use the new tools.

    +

    The testing/samples/integration-tests module demonstrates these tools, and is also meant as a sample project to show how to run integration tests for Sling-based applications.

    +

    The main Sling integration tests at launchpad/integration-tests were created before this testing framework, and do not use it yet (as of March 2011). The new testing tools are simpler to use, but the "old" tests (all 400 of them as I write this) fulfill their validation role for testing Sling itself, there's no real need to modify them to use the new tools.

    See also Testing Sling-based applications which discusses testing in general.

    Server-side JUnit tests contributed by bundles

    -

    The services provided by the org.apache.sling.junit.core bundle allow bundles to register JUnit tests, which are executed server-side by the JUnitServlet registered by default at /system/sling/junit. This bundle is not dependent on Sling, it should work in other OSGi environments.

    +

    The services provided by the org.apache.sling.junit.core bundle allow bundles to register JUnit tests, which are executed server-side by the JUnitServlet registered by default at /system/sling/junit. This bundle is not dependent on Sling, it should work in other OSGi environments.

    Note that the JUnitServlet does not require authentication, so it would allow any client to run tests. The servlet can be disabled by configuration if needed, but in general the `/system` path should not be accessible to website visitors anyway.
    @@ -106,13 +106,13 @@ Note that the JUnitServlet does not requ For tighter integration with Sling, the alternate `SlingJUnitServlet` is registered with the `sling/junit/testing` resource type and `.junit` selector, if the bundle is running in a Sling system. Using this servlet instead of the plain JUnitServlet also allows Sling authentication to be used for running the tests, and the standard Sling request processing is used, including servlet filters for example. -

    To try the JUnitServlet interactively, install the org.apache.sling.testing.samples.sampletests bundle.

    +

    To try the JUnitServlet interactively, install the org.apache.sling.testing.samples.sampletests bundle.

    This bundle contains a number of test classes, which are registered with the org.apache.sling.junit.core services by way of the Sling-Test-Regexp=.*Test bundle header, defined in the bundle's pom.xml. The JUnit core services use this regular expression to select which classes of the test bundle should be executed as JUnit tests.

    To list the available tests, open http://localhost:8080/system/sling/junit/ . The servlet shows available tests, and allows you to execute them via a POST request.

    Adding a path allows you to select a specific subset of tests, as in http://localhost:8080/system/sling/junit/org.apache.sling.junit.remote.html - the example integration tests described below use this to selectively execute server-side tests. The JUnitServlet provides various output formats, including in particular JSON, see http://localhost:8080/system/sling/junit/.json for example.

    To supply tests from your own bundles, simply export the tests classes and add the Sling-Test-Regexp header to the bundle so that the Sling JUnit core services register them as tests.

    Injection of OSGi services

    -

    The @TestReference annotation is used to inject OSGi services in tests that are executed server side.The BundleContext can also be injected in this way, see the OsgiAwareTest for an example.

    +

    The @TestReference annotation is used to inject OSGi services in tests that are executed server side.The BundleContext can also be injected in this way, see the OsgiAwareTest for an example.

    Curl examples

    Here's an example executing a few tests using curl:

    $ curl -X POST http://localhost:8080/system/sling/junit/org.apache.sling.testing.samples.sampletests.JUnit.json
    @@ -133,22 +133,22 @@ For tighter integration with Sling, the 
     

    And another example with a test that fails: $ curl -X POST http://localhost:8080/system/sling/junit/org.apache.sling.testing.samples.failingtests.JUnit4FailingTest.json

    Scriptable server-side tests

    -

    If the org.apache.sling.junit.scriptable bundle is active in a Sling system, (in addition to the org.apache.sling.junit.core bundle), scriptable tests can be executed by the JUnitServlet according to the following rules:

    +

    If the org.apache.sling.junit.scriptable bundle is active in a Sling system, (in addition to the org.apache.sling.junit.core bundle), scriptable tests can be executed by the JUnitServlet according to the following rules:

    • A node that has the sling:Test mixin is a scriptable test node.
    • For security reasons, scriptable test nodes are only executed as tests if they are found under /libs or /apps, or more precisely under a path that's part of Sling's ResourceResolver search path.
    • To execute a test, the scriptable tests provider makes an HTTP requests to the test node's path, with a .test.txt selector and extension, and expects the output to contain only the string TEST_PASSED. Empty lines and comment lines starting with a hash sign (#) are ignored in the output, and other lines are reported as failures.
    -

    The ScriptableTestsTest class, from the integration test samples module described below, sets up such a test node and its accompanying script, and calls the JUnitServlet to execute the test. It can be used as a detailed example of how this works.

    +

    The ScriptableTestsTest class, from the integration test samples module described below, sets up such a test node and its accompanying script, and calls the JUnitServlet to execute the test. It can be used as a detailed example of how this works.

    Integration tests example

    -

    The testing/samples/integration-tests module runs some simple integration tests against a Sling Launchpad instance that's setup from scratch before running the tests.

    +

    The testing/samples/integration-tests module runs some simple integration tests against a Sling Launchpad instance that's setup from scratch before running the tests.

    This module's pom and Java code can be used as examples to setup your own integration testing modules for Sling-based apps - or for any other runnable jar that provides an http service.

    Besides serving as examples, some of the tests in this module are used to validate the testing tools. They run as part of the full Sling continuous integration build, so they're guaranteed to be correct examples if that build is successful.

    -

    The sample uses the testing/tools to make the test code simpler. See the [OsgiConsoleTest|https://svn.apache.org/repos/asf/sling/trunk/testing/samples/integration-tests/src/test/java/org/apache/sling/testing/samples/integrationtests/http/OsgiConsoleTest.java] class for an example of a test that's very readable and requires no test setup or boilerplate code.

    +

    The sample uses the testing/tools to make the test code simpler. See the [OsgiConsoleTest|https://svn.apache.org/repos/asf/sling/trunk/testing/samples/integration-tests/src/test/java/org/apache/sling/testing/samples/integrationtests/http/OsgiConsoleTest.java] class for an example of a test that's very readable and requires no test setup or boilerplate code.

    The following steps are executed in the integration-test phase of this module's Maven build: 1. A random port number for the Sling server is selected by the Maven build helper plugin, unless explicitely set (see pom.xml for such options). 1. Additional bundles, defined in the module's pom, are downloaded from the Maven repository in the target/sling/additional-bundles folder. -1. The first test that inherits from the SlingTestBase class causes the Sling runnable jar (defined as a dependency in the module's pom) to be started. +1. The first test that inherits from the SlingTestBase class causes the Sling runnable jar (defined as a dependency in the module's pom) to be started. 1. # The SlingTestBase class waits for the Sling server to be ready, based on URLs and expected responses defined in the pom. 1. # The SlingTestBase class installs and starts the bundles found in the target/sling/additional-bundles folder. 1. The test can now either test Sling directly via its http interface, or use the JUnitServlet to execute server-side tests contributed by bundles or scripts, as described above. @@ -158,13 +158,13 @@ For tighter integration with Sling, the

    Remote test execution

    The testing tools support two types of remote test execution.

    SlingRemoteTestRunner

    -

    The SlingRemoteTestRunner is used to run tests using the JUnitServlet described above. In this case, the client-side JUnit test only defines which tests to run and some optional assertions. Checking the number of tests executed, for example, can be useful to make sure all test bundles have been activated as expected, to avoid ignoring missing test bundles.

    -

    See the ServerSideSampleTest class for an example.

    +

    The SlingRemoteTestRunner is used to run tests using the JUnitServlet described above. In this case, the client-side JUnit test only defines which tests to run and some optional assertions. Checking the number of tests executed, for example, can be useful to make sure all test bundles have been activated as expected, to avoid ignoring missing test bundles.

    +

    See the ServerSideSampleTest class for an example.

    SlingRemoteExecutionRule

    -

    The SlingRemoteExecutionRule is a JUnit Rule that allows tests to be executed remotely in a Sling instance from an IDE, assuming the test is available on both sides.

    -

    The ExampleRemoteTest class demonstrates this. To run it from your IDE, set the sling.remote.test.url in the IDE to the URL of the JUnitServlet, like http://localhost:8080/system/sling/junit for example.

    +

    The SlingRemoteExecutionRule is a JUnit Rule that allows tests to be executed remotely in a Sling instance from an IDE, assuming the test is available on both sides.

    +

    The ExampleRemoteTest class demonstrates this. To run it from your IDE, set the sling.remote.test.url in the IDE to the URL of the JUnitServlet, like http://localhost:8080/system/sling/junit for example.

    - Rev. 1464501 by bdelacretaz on Thu, 4 Apr 2013 12:33:04 +0000 + Rev. 1464504 by bdelacretaz on Thu, 4 Apr 2013 12:39:04 +0000
    Apache Sling, Sling, Apache, the Apache feather logo, and the Apache Sling project