status-go/tests-functional
shashankshampi 92ff5bf0b2 test_: Code Migration from status-cli-tests with cleanup 2024-10-30 21:26:36 +05:30
..
clients test_: Code Migration from status-cli-tests with review comments 2024-10-30 20:56:54 +05:30
schemas test_: Code Migration from status-cli-tests 2024-10-30 14:49:26 +05:30
src test_: Code Migration from status-cli-tests with review comments 2024-10-30 20:56:54 +05:30
tests test_: Code Migration from status-cli-tests with cleanup 2024-10-30 21:24:57 +05:30
validators test_: Code Migration from status-cli-tests with cleanup 2024-10-30 21:26:36 +05:30
.gitignore test_: Code Migration from status-cli-tests 2024-10-30 14:49:26 +05:30
Dockerfile chore_: rename integration tests to functional tests (#5908) 2024-10-03 14:51:51 +01:00
Dockerfile.tests-rpc chore_: rename integration tests to functional tests (#5908) 2024-10-03 14:51:51 +01:00
README.MD test_: Code Migration from status-cli-tests with review comments 2024-10-30 20:56:54 +05:30
config.json chore_: providers re-ordered 2024-10-21 17:30:51 +02:00
conftest.py test_: Code Migration from status-cli-tests 2024-10-30 14:49:26 +05:30
constants.py test_: Code Migration from status-cli-tests with review comments 2024-10-30 20:56:54 +05:30
docker-compose.anvil.yml chore_: rename integration tests to functional tests (#5908) 2024-10-03 14:51:51 +01:00
docker-compose.status-go.local.yml test_: added status-backend support, fixed signals 2024-10-08 15:27:48 +02:00
docker-compose.test.status-go.yml test_: Code Migration from status-cli-tests 2024-10-30 14:49:26 +05:30
entrypoint.sh chore_: rename integration tests to functional tests (#5908) 2024-10-03 14:51:51 +01:00
pytest.ini test_: Code Migration from status-cli-tests 2024-10-30 14:49:26 +05:30
requirements.txt test_: Code Migration from status-cli-tests with cleanup 2024-10-30 21:24:57 +05:30
schema_builder.py test_: a little bit of refactoring 2024-10-14 12:47:58 +02:00

README.MD

Overview

Functional tests for status-go

Table of Contents

How to Install

  1. Install Docker and Docker Compose
  2. Install Python 3.10.14
  3. Set up a virtual environment (recommended):
    • In ./tests-functional, run:
      python3 -m venv .venv
      source .venv/bin/activate
      pip install -r requirements.txt
      
    • Optional (for test development): Use Python virtual environment for better dependency management. You can follow the guide here

How to Run

Running dev RPC (Anvil with contracts)

In ./tests-functional:

docker compose -f docker-compose.anvil.yml up --remove-orphans --build

This command will:

  • Start an Anvil container with ChainID 31337, exposed on 0.0.0.0:8545
  • Deploy Status-im contracts to the Anvil network

Running Tests

To run the tests:

  1. In ./tests-functional, start the testing containers:

    docker compose -f docker-compose.anvil.yml -f docker-compose.test.status-go.yml -f docker-compose.status-go.local.yml up --build --remove-orphans
    

    This command will:

    • Create a container with status-go as daemon, exposing APIModules on 0.0.0.0:3333
    • Configure status-go to use Anvil as the RPCURL with ChainID 31337
    • Deploy all Status-im contracts to the Anvil network
  2. To execute tests:

    • Run all tests:
      pytest
      
    • Run tests marked as wallet:
      pytest -m wallet
      
    • Run a specific test:
      pytest -k "test_contact_request_baseline"
      

Implementation Details

  • Functional tests are implemented in ./tests-functional/tests using pytest.

  • Each test performs two types of verifications:

    • verify_is_valid_json_rpc_response(): Checks for a status code 200, a non-empty response, JSON-RPC structure, presence of the result field, and the expected ID.
    • jsonschema.validate(): Validates that the response contains expected data, including required fields and types. Schemas are stored in /schemas/wallet_MethodName.
  • Schema Generation:

    • New schemas can be generated with ./tests-functional/schema_builder.py by passing a response to the CustomSchemaBuilder(schema_name).create_schema(response.json()) method. This should be used only during test creation.
    • Search how to create schema: in test files for examples.

Build Status Backend

You can manually build the binary with the following command in the status-go root directory:

make status-backend

For further details on building and setting up status-go and status-backend, refer to the official documentation:

Location of the binary: cmd/status-backend/status-backend

In test build is automatically being build and placed in right path. If build already exists then new build is not generated.