Tests

Integration Test

The integration test is already integrated to AWS CodePipeline pipelines.

Test data prepare

In order to support automated validation/integration tests against the exodus CDN, we need to create a set of reference testdata which can be deployed and used in each environment.

The test data prepare script located in the support/reftest/ directory. The support/reftest/reftest is used to prepare the test data, and the support/reftest/data.yml is used to specify the data which will be used.

The integration test use real testdata (real RHEL RPMs) but don’t check them into the exodus-lambda repo. Instead, the script support/reftest/reftest support fetching the RPMs from production CDN for test data. Then, create DB items in Amazon DynamoDB and push the fetched data to Amazon S3.

$ ./reftest prepare --table ... --bucket ... --cert ... --key ... --cacert ...
  • Parameters
    • table:

      The AWS DynamoDB table name.

    • bucket:

      The AWS S3 bucket name.

    • cert:

      The client certificate file and password.

    • key:

      The private key file name.

    • cacert:

      The CA certificate to verify peer against.

Note

If there are testdata paths which have unstable content and no stable alternatives, then the checksum field is not needed in data.yml and the checksum-verify step will be skipped.

Running the test locally

The test code is located in the tests/integration/ directory. The test tests/integration/test_exodus.py covers all major implemented behaviors from exodus CDN.

  • origin path alias

  • rhui path alias

  • Digest/Want-Digest

  • Cache-Control

  • Content-Type

# specify the CloudFormation stack for lambdafunction creation
$ export STACK_NAME=...
$ tox -e integration-tests

# or you can directly use pytest and specify the CDN url
$ pytest tests/integration/ --cdn-test-url ...