feat: bootstrap ftest docs
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
parent
3bd7ef3ce9
commit
31975e0496
7 changed files with 247 additions and 0 deletions
6
content/ftest/_index.md
Normal file
6
content/ftest/_index.md
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
+++
|
||||||
|
title = "ftest"
|
||||||
|
insert_anchor_links = "right"
|
||||||
|
weight = 1
|
||||||
|
sort_by = "weight"
|
||||||
|
+++
|
20
content/ftest/about.md
Normal file
20
content/ftest/about.md
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
+++
|
||||||
|
title = "About ftest"
|
||||||
|
insert_anchor_links = "right"
|
||||||
|
weight = 1
|
||||||
|
+++
|
||||||
|
|
||||||
|
- [Source code](https://git.batsense.net/ForgeFlux/ftest)
|
||||||
|
- Status: Usable
|
||||||
|
- Description: Compliance checker/test runner for [ActivityPub](https://activitypub.rocks) and by
|
||||||
|
extension, [ForgeFed](https://forgefed.org)
|
||||||
|
|
||||||
|
`ftest` is a compliance checking tool that is similar to
|
||||||
|
[matrix-org/sytest](https://github.com/matrix-org/sytest) but for ActivityPub and ForgeFed.
|
||||||
|
|
||||||
|
An instance (will be) is hosted by ForgeFlux, that is run on renewable
|
||||||
|
energy.
|
||||||
|
|
||||||
|
## Quick links
|
||||||
|
|
||||||
|
- [Add new specimen to ftest](@/ftest/tutorial-new-specimen.md)
|
53
content/ftest/ftest.toml.md
Normal file
53
content/ftest/ftest.toml.md
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
+++
|
||||||
|
title = "ftest.toml"
|
||||||
|
insert_anchor_links = "right"
|
||||||
|
weight = 5
|
||||||
|
+++
|
||||||
|
|
||||||
|
## `fest.toml` or Job Manifest
|
||||||
|
|
||||||
|
Job manifest is defined in `ftest.toml` file in the specimen's
|
||||||
|
subdirectory.
|
||||||
|
|
||||||
|
## ftest.toml contents:
|
||||||
|
|
||||||
|
It can contain information on:
|
||||||
|
|
||||||
|
### 1. Initialization code
|
||||||
|
|
||||||
|
The code that needs to be run to prepare the test environment. ftest
|
||||||
|
runs Docker containers to initialize test environments.
|
||||||
|
|
||||||
|
#### Example
|
||||||
|
|
||||||
|
[forgejo-init-script](https://git.batsense.net/ForgeFlux/forgejo-init-script) performs the following operations in a sequence:
|
||||||
|
|
||||||
|
1. Install Forgejo (the binary starts with a web installer that accepts
|
||||||
|
configuration parameters for database, mailer, etc.)
|
||||||
|
2. Create accounts
|
||||||
|
3. Create repositories
|
||||||
|
4. Create issues
|
||||||
|
5. Create access tokens
|
||||||
|
|
||||||
|
NOTE: Some of these operations are irrelevant, as I (@realaravinth) had nicked them from
|
||||||
|
another project of mine and was too lazy to modify ;)
|
||||||
|
|
||||||
|
### 2. Test Suite
|
||||||
|
|
||||||
|
A test suite is a collection of tests. For instance, ActivityPub is a
|
||||||
|
test suite that could include tests for the WebFinger protocol and the
|
||||||
|
Nodeinfo protocol.
|
||||||
|
|
||||||
|
### 3. Tests
|
||||||
|
|
||||||
|
A test is a docker container that tests the
|
||||||
|
[specimen](@/ftest/terminology.md#specimen) for a specific protocol or
|
||||||
|
feature.
|
||||||
|
|
||||||
|
#### Example
|
||||||
|
|
||||||
|
[Nodeinfo test](https://git.batsense.net/nodeinfo-test) is the simplest
|
||||||
|
test available within ftest at the moment. It tests the specimen's
|
||||||
|
Nodeinfo implementation against the [Nodeinfo specification](https://nodeinfo.diaspora.software/protocol.html).
|
||||||
|
|
||||||
|
Please see [here](/ftest/tests.md) for developing new tests.
|
26
content/ftest/quick-links.md
Normal file
26
content/ftest/quick-links.md
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
+++
|
||||||
|
title = "Quick Links"
|
||||||
|
insert_anchor_links = "right"
|
||||||
|
weight = 3
|
||||||
|
+++
|
||||||
|
|
||||||
|
# Quick Links
|
||||||
|
|
||||||
|
## Repositories
|
||||||
|
|
||||||
|
- [Source code](https://git.batsense.net/ForgeFlux/ftest)
|
||||||
|
- [Control repository](https://git.batsense.net/ForgeFlux/ftest-control)
|
||||||
|
- [Results repository](https://git.batsense.net/ForgeFlux/ftest-results)
|
||||||
|
- [Forgejo-init-script (Initialization code)](https://git.batsense.net/ForgeFlux/forgejo-init-script)
|
||||||
|
|
||||||
|
## Test suites
|
||||||
|
|
||||||
|
- [WebFinger](https://git.batsense.net/ForgeFlux/webfinger-test)
|
||||||
|
- [Nodeinfo](https://git.batsense.net/ForgeFlux/nodeinfo-test)
|
||||||
|
- [ActivityPub (WIP)](https://git.batsense.net/ForgeFlux/nodeinfo-test)
|
||||||
|
|
||||||
|
## Container Images
|
||||||
|
|
||||||
|
- [WebFinger](https://hub.docker.com/r/forgeflux/webfinger-test/)
|
||||||
|
- [Nodeinfo](https://hub.docker.com/r/forgeflux/nodeinfo-test/)
|
||||||
|
- [ActivityPub](https://hub.docker.com/r/forgeflux/ap-test/)
|
52
content/ftest/terminology.md
Normal file
52
content/ftest/terminology.md
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
+++
|
||||||
|
title = "Terminology"
|
||||||
|
insert_anchor_links = "right"
|
||||||
|
weight = 2
|
||||||
|
+++
|
||||||
|
|
||||||
|
## Specimen
|
||||||
|
|
||||||
|
A specimen is an ActityPub or a ForgeFed instance that has to be tested
|
||||||
|
on ftest.
|
||||||
|
|
||||||
|
## Job Manifest
|
||||||
|
|
||||||
|
or `ftest.toml`
|
||||||
|
|
||||||
|
Contains information on the test environment, initialization code and
|
||||||
|
the test suites that has to be run on the [specimen](/ftest/terminology.md#specimen)
|
||||||
|
|
||||||
|
## Control Repository
|
||||||
|
|
||||||
|
- Flagship instance: [git.batsense.net/ForgeFlux/ftest-control](https://forgeflux.org/ForgeFlux/ftest-control)
|
||||||
|
|
||||||
|
A Repository that houses [job manifests](@/ftest/terminology.md#job-manifest), and Infrastructure-as-Code
|
||||||
|
(docker-compose, currently) to spin up a test environment containing the
|
||||||
|
[specimen](@/ftest/terminology.md#specimen).
|
||||||
|
|
||||||
|
### Directory structure
|
||||||
|
|
||||||
|
Each specimen has it's own directory in the control repository:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
23:50 atm@lab ftest-control ±|gotosocial ✗|→ tree
|
||||||
|
|
||||||
|
└── targets
|
||||||
|
├── forgejo
|
||||||
|
│ ├── conf
|
||||||
|
│ │ └── app.ini
|
||||||
|
│ ├── docker-compose.yml
|
||||||
|
│ └── ftest.toml
|
||||||
|
└── gotosocial
|
||||||
|
├── data
|
||||||
|
│ └── config
|
||||||
|
│ └── config.yaml
|
||||||
|
├── docker-compose.yaml
|
||||||
|
└── Dockerfile
|
||||||
|
```
|
||||||
|
|
||||||
|
### specimen docker-compose.yml
|
||||||
|
|
||||||
|
The control repository _MUST_ contain a `docker-compose.yml` to spin up
|
||||||
|
the specimen. It may include configuration files in the same directory,
|
||||||
|
which to docker-compose file can rely on using bind mounts within the container.
|
50
content/ftest/tests.md
Normal file
50
content/ftest/tests.md
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
+++
|
||||||
|
title = "Tests"
|
||||||
|
insert_anchor_links = "right"
|
||||||
|
weight = 6
|
||||||
|
+++
|
||||||
|
|
||||||
|
Tests are Docker containers that test
|
||||||
|
[specimens](@/ftest/terminology.md#specimen) a very specific protocol
|
||||||
|
or a feature. They integrate with ftest by accepting configuration
|
||||||
|
parameters through environment variables and uploading results through a
|
||||||
|
REST API.
|
||||||
|
|
||||||
|
## Configuration (Environment Variables)
|
||||||
|
|
||||||
|
### Auto-generated
|
||||||
|
|
||||||
|
Some environment variables are automatically generated by ftest
|
||||||
|
|
||||||
|
| Name | Purpose |
|
||||||
|
| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
|
| `FTEST_AUTH` | Authentication token that should be used when uploading results to ftest server. It is ephemeral, and randomly generated for each test. |
|
||||||
|
| `FTEST_HOST` | The hostname of the ftest server. Results must be uploaded to here. Will be in format http://ftest:9000 |
|
||||||
|
| `FTEST_TARGET_HOST` | The hostname of the specimen server. Tests must be run against this hostname. Will be in format http://specimen:8080 |
|
||||||
|
|
||||||
|
### User provided
|
||||||
|
|
||||||
|
There's option to fetch custom environment variables also. Please
|
||||||
|
specify them in your test's documentation clearly. The README file of
|
||||||
|
the test is recommended.
|
||||||
|
|
||||||
|
## Results API:
|
||||||
|
|
||||||
|
A formal OpenAPI specification for the ftest server is yet to be
|
||||||
|
created. For now, this command should upload test results to the ftest
|
||||||
|
server:
|
||||||
|
|
||||||
|
```python
|
||||||
|
def upload_logs_to_ftest(auth, success: bool, logs: str):
|
||||||
|
ftest = f"http://ftest.example.org/api/v1/{auth}/results"
|
||||||
|
payload = {"success": success, "logs": logs}
|
||||||
|
res = requests.post(
|
||||||
|
ftest, json=payload, headers={"Origin": "http://example.org"}
|
||||||
|
)
|
||||||
|
if res.status_code == 200:
|
||||||
|
logger.info("Upload successful")
|
||||||
|
else:
|
||||||
|
print(res)
|
||||||
|
|
||||||
|
upload_logs_to_ftest("supersecretauthtoekn_provided_by_ftest", True, "")
|
||||||
|
```
|
40
content/ftest/tutorial-new-specimen.md
Normal file
40
content/ftest/tutorial-new-specimen.md
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
+++
|
||||||
|
title = "[Tutorial] Add new specimen"
|
||||||
|
insert_anchor_links = "right"
|
||||||
|
weight = 7
|
||||||
|
+++
|
||||||
|
|
||||||
|
## How to add new specimen
|
||||||
|
|
||||||
|
### 1. Fork the [control repository](@/ftest/terminology.md#control-repository).
|
||||||
|
|
||||||
|
```
|
||||||
|
git clone https://git.batsense.net/ForgeFlux/ftest-control
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Create specimen subdirectory
|
||||||
|
|
||||||
|
If [specimen](@/ftest/terminology.md#specimen) doesn't exist within `targets/` directory, then create subdirectory for it:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir targets/<insert-specimen-name>
|
||||||
|
cd targets/<insert-specimen-name>
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Create docker-compose.yml:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
touch docker-compose.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
Populate docker-compose.yml with instructions to spin up a test
|
||||||
|
environment for the specimen. The specimen's upstream sources
|
||||||
|
will include a reference docker-compose file should be fine in most cases.
|
||||||
|
|
||||||
|
### 4. Create job manifest
|
||||||
|
|
||||||
|
Job manifest is defined in `ftest.toml` file in the specimen's
|
||||||
|
subdirectory. It can contain information on:
|
||||||
|
|
||||||
|
#### Initialization code
|
||||||
|
needs to be run to prepare the test environment.
|
Loading…
Reference in a new issue