103 lines
3.8 KiB
Markdown
103 lines
3.8 KiB
Markdown
Here’s the updated README with the additional prerequisites and instructions:
|
||
|
||
---
|
||
|
||
## Overview
|
||
|
||
Functional tests for `status-go`
|
||
|
||
## Table of Contents
|
||
|
||
- [Overview](#overview)
|
||
- [How to Install](#how-to-install)
|
||
- [How to Run](#how-to-run)
|
||
- [Running Tests](#running-tests)
|
||
- [Implementation Details](#implementation-details)
|
||
- [Build Status Backend](#build-status-backend)
|
||
|
||
## How to Install
|
||
|
||
1. Install [Docker](https://docs.docker.com/engine/install/) and [Docker Compose](https://docs.docker.com/compose/install/)
|
||
2. Install [Python 3.10.14](https://www.python.org/downloads/)
|
||
3. **Set up a virtual environment (recommended):**
|
||
- In `./tests-functional`, run:
|
||
```bash
|
||
python -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](https://akrabat.com/creating-virtual-environments-with-pyenv/)
|
||
4. Install pre-commit hooks (optional):
|
||
```bash
|
||
pre-commit install
|
||
```
|
||
|
||
## How to Run
|
||
|
||
### Running dev RPC (Anvil with contracts)
|
||
|
||
In `./tests-functional`:
|
||
```bash
|
||
docker compose -f docker-compose.anvil.yml up --remove-orphans --build
|
||
```
|
||
|
||
This command will:
|
||
- Start an [Anvil](https://book.getfoundry.sh/reference/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:
|
||
```bash
|
||
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](https://github.com/status-im/status-go/issues/5175), exposing `APIModules` on `0.0.0.0:3333`
|
||
- Configure `status-go` to use [Anvil](https://book.getfoundry.sh/reference/anvil/) as the `RPCURL` with ChainID `31337`
|
||
- Deploy all Status-im contracts to the Anvil network
|
||
|
||
2. To execute tests:
|
||
- Run all tests:
|
||
```bash
|
||
pytest
|
||
```
|
||
- Run tests marked as `wallet`:
|
||
```bash
|
||
pytest -m wallet
|
||
```
|
||
- Run a specific test:
|
||
```bash
|
||
pytest -k "test_contact_request_baseline"
|
||
```
|
||
|
||
## Implementation Details
|
||
|
||
- Functional tests are implemented in `./tests-functional/tests` using [pytest](https://docs.pytest.org/en/8.2.x/).
|
||
- 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 build the binary with the following command in the `status-go` root directory:
|
||
|
||
```bash
|
||
make status-backend
|
||
```
|
||
|
||
For further details on building and setting up `status-go` and `status-backend`, refer to the official documentation:
|
||
- [status-backend README](https://github.com/status-im/status-go/blob/develop/cmd/status-backend/README.md)
|
||
- [status-go cmd directory](https://github.com/status-im/status-go/tree/develop/cmd/status-backend)
|
||
|
||
Location of the binary: `cmd/status-backend/status-backend`
|
||
|
||
---
|
||
|
||
This README should cover your additional setup, installation, and testing instructions with clear steps for users. Let me know if there are any further modifications needed! |