tree: 1f7b3a646f77b5f9af99bef266405730e662c350 [path history] [tgz]
  1. __files/
  2. mappings/
  3. .gitignore
  4. __init__.py
  5. README.md
  6. test_common.py
  7. test_interactive.py
  8. test_noninteractive.py
  9. wiremock.py
components/org.apache.stratos.cli/src/test/python/README.md

CLI Integration Tests

Running the tests

The CLI integration tests can be run from maven using:

mvn -P cli-test integration-test

You will need python installed and be running a unix like operating system

Creating new tests

Run ‘mvn -P cli-test integration-test’ to download the test dependencies.

Set the environment variables CLI_JAR, PYTHONPATH and WIREMOCK_JAR, WIREMOCK_HTTP_PORT, WIREMOCK_HTTPS_PORT. For example:

# the stratos CLI_JAR
export CLI_JAR=~/stratos/components/org.apache.stratos.cli/target/org.apache.stratos.cli-4.0.0-SNAPSHOT.jar

# set the PYTHONPATH to include pexpect
export PYTHONPATH=$PYTHONPATH:~/stratos/components/org.apache.stratos.cli/target/pexpect-3.2

# the wiremock application
export WIREMOCK_JAR=~/stratos/components/org.apache.stratos.cli/target/dependency/wiremock-1.46-standalone.jar

# wiremock's http port 
export WIREMOCK_HTTP_PORT=8080

# wiremock's https port 
export WIREMOCK_HTTPS_PORT=9443

The tests are split into three areas:

  • test_common.py : tests that are common to interactive and non-interactive CLI usage
  • test_interactive.py : tests for CLI in interactive mode
  • test_noninteractive.py : tests for CLI in non-interactive mode

After setting the above environment variables, the tests can be executed like this:

./test_common.py

The tests have class methods that start wiremock at the start of the tests (setUpClass) and stop it at the end of the test (tearDownClass).

The tests use pexpect to execute the CLI and interact with the CLI's input and output. See the existing tests for examples of pexpect.

The tests depend on wiremock (www.wiremock.org) for simulating the Statos REST services.

The python class wiremock.py is a simple wrapper to start/stop wiremock and provides utility methods so the tests can call wiremock's APIs to retrieve information about the requests that wiremock received.

The response that wiremock chooses to return for a particular request is defined in the ‘mappings’ folder. A mapping usually has a response body that can be found in the ‘__files’ folder

Wiremock REST recording

Wiremock can record REST requests and responses between the CLI and Stratos. To setup recording, run wiremock wth the following command line:

java -jar $WIREMOCK_JAR --record-mappings --proxy-all="https://stratos_address:stratos_port" --port 8181 --https-port 9441

Choose values for the http and https ports that are free on your system.

Set the STRATOS_URL:

export STRATOS_URL="https://localhost:9441"  # use the https-port you ran wiremock with

Then run the CLI, and perform the action that you want wiremock to record:

java -jar $CLI_JAR

Wiremock will have recorded the requests and responses from the CLI to Stratos in the ‘mappings’ and ‘__files’ folders.

You can stop wiremock on the command line and create a test case using pexpect.