No description
Find a file
Renovate Bot 5f818759c2
All checks were successful
ci/woodpecker/pr/woodpecker Pipeline was successful
chore(deps): update dependency xmltodict to v0.14.1
2024-10-09 19:34:17 +00:00
.reuse feat: init 2023-10-02 17:43:02 +05:30
features fix: success flag 2023-10-02 18:12:29 +05:30
LICENSES feat: init 2023-10-02 17:43:02 +05:30
.dockerignore fix: build ftest_common from source till it is uploaded to PyPi 2023-10-02 17:52:22 +05:30
.env_sample feat: init 2023-10-02 17:43:02 +05:30
.gitignore feat: init 2023-10-02 17:43:02 +05:30
.woodpecker.yml feat: pkg Docker 2023-10-02 17:45:10 +05:30
Dockerfile fix: build ftest_common from source till it is uploaded to PyPi 2023-10-02 17:52:22 +05:30
Makefile feat: pkg Docker 2023-10-02 17:45:10 +05:30
README.md feat: init 2023-10-02 17:43:02 +05:30
renovate.json Add renovate.json 2024-06-02 13:46:01 +00:00
requirements.txt chore(deps): update dependency xmltodict to v0.14.1 2024-10-09 19:34:17 +00:00

status-badge status-badge


Host Meta tests for ForgeFlux/ftest

TODO

  • Write code to upload to ftest server
  • Package Docker container
  • Upload to Docker Hub

Environment Variables

Please see .env_sample

NAME Purpose Example
FTEST_AUTH Authorization token for uploading test results to ftest server a random-generated string that will be provided by ftest server
FTEST_HOST The URL of the ftest's instance to which tests results should be uploaded http://localhost:5000, if an ftest implementation is running on localhost at port 5000
FTEST_TARGET_HOST The URL of the implementation's instance against which tests will be run http://localhost:3000, if Forgejo or any other ActivityPub implementation is running on localhost at port 3000
FTEST_USER address of the actor against which ActivityPub tests will be run john@localhost:3000. User john should exist on the instance

Usage

cp .env_sample .env # edit and populate .env with the right values
source .env
python run.py

Docker

cp .env_sample .env # edit and populate .env with the right values
source .env
docker run \
 -e FTEST_AUTH=$FTEST_AUTH \
 -e FTEST_TARGET_HOST=$FTEST_TARGET_HOST \
 -e FTEST_HOST=$FTEST_HOST \
 -e FTEST_USER=$FTEST_USER forgeflux/host-meta-test

Demo

Successful run:

Please open to see logs
17:22 (venv) atm@lab host-meta ±|master ✗|→ behave
2023-10-02 17:22:23,120 - ap - INFO - Environment: FTEST_AUTH: foobar
2023-10-02 17:22:23,120 - ap - INFO - Environment: FTEST_HOST: http://localhost:9000
2023-10-02 17:22:23,120 - ap - INFO - Environment: FTEST_USER: realaravinth@batsense.net
2023-10-02 17:22:23,120 - ap - INFO - Environment: FTEST_TARGET_HOST: https://gts.batsense.net
Feature: Host Meta # features/host_meta.feature:1
  As defined in https://www.rfc-editor.org/rfc/rfc6415.html
  Scenario:                                                                                             # features/host_meta.feature:4
    Given A Fediverse server                                                                            # features/steps/host_meta.py:43 0.000s
    When Querying /.well-known/host-meta                                                                # features/steps/host_meta.py:48
2023-10-02 17:22:23,134 - ap - DEBUG - host-meta response:

STATUS: 404

HEADERS:
 {'Server': 'nginx/1.18.0', 'Date': 'Mon, 02 Oct 2023 11:52:23 GMT', 'Content-Type': 'text/html', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Content-Encoding': 'gzip'}

RESPONSE PAYLOAD:
b'<html>\r\n<head><title>404 Not Found</title></head>\r\n<body>\r\n<center><h1>404 Not Found</h1></center>\r\n<hr><center>nginx/1.18.0</center>\r\n</body>\r\n</html>\r\n'
2023-10-02 17:22:23,167 - ap - DEBUG - host-meta response:

STATUS: 200

HEADERS:
 {'Server': 'nginx/1.18.0', 'Date': 'Mon, 02 Oct 2023 11:52:23 GMT', 'Content-Type': 'application/xrd+xml', 'Content-Length': '206', 'Connection': 'keep-alive', 'Cache-Control': 'public, max-age=120', 'Content-Encoding': 'gzip', 'Content-Security-Policy': "default-src 'self'; object-src 'none'; img-src 'self' blob:; media-src 'self'", 'Permissions-Policy': 'browsing-topics=(), interest-cohort=()', 'Vary': 'Accept-Encoding', 'X-Ratelimit-Limit': '300', 'X-Ratelimit-Remaining': '296', 'X-Ratelimit-Reset': '1696247748', 'X-Request-Id': 'fhtkqw4a04000cj8v2a0'}

RESPONSE PAYLOAD:
b'<?xml version="1.0" encoding="UTF-8"?>\n<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd    When Querying /.well-known/host-meta                                                                # features/steps/host_meta.py:48 0.045s
    Then The page must resolve at port 80 or 443                                                        # features/steps/host_meta.py:68
2023-10-02 17:22:23,178 - ap - DEBUG - host-meta response:

STATUS: 404

HEADERS:
 {'Server': 'nginx/1.18.0', 'Date': 'Mon, 02 Oct 2023 11:52:23 GMT', 'Content-Type': 'text/html', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Content-Encoding': 'gzip'}

RESPONSE PAYLOAD:
b'<html>\r\n<head><title>404 Not Found</title></head>\r\n<body>\r\n<center><h1>404 Not Foun    Then The page must resolve at port 80 or 443                                                        # features/steps/host_meta.py:68 0.011se}
    And If both port 80 _and_ 443 work, then they SHOULD return same document                           # features/steps/host_meta.py:91 0.000s
    And The document SHOULD be served with "application/xrd+xml" media type                             # features/steps/host_meta.py:99 0.000s
    And The host-meta document root MUST be an "XRD" element                                            # features/steps/host_meta.py:120 0.000s
    And The document SHOULD NOT include a "Subject" element                                             # features/steps/host_meta.py:133 0.000s
    And The document SHOULD include "Link" element                                                      # features/steps/host_meta.py:147 0.000s
    And The document's "Link" element should include either "template" or "href" attributes             # features/steps/host_meta.py:161 0.000s
    And The document should have at least on 'lrdd' document                                            # features/steps/host_meta.py:187 0.000s
    And Fediverse specific: The lrdd document must include template containing WebFinger well-known URI # features/steps/host_meta.py:214 0.000s



===============
Partial success. 8 out of 9 tests passed
Summary:

Successful tests:

[OK] Page must resolve at port 80

[OK] The document SHOULD be served with "application/xrd+xml" media type

[OK] The host-meta document root MUST be an "XRD" element

[OK] The document SHOULD NOT include a "Subject" element

[OK] The document SHOULD include "Link" element

[OK] The document's "Link" element should include either "template" or "href" attributes

[OK] The document should have at least on 'lrdd' document

[OK] Fediverse specific: The lrdd document must include template containing WebFinger well-known URI

2023-10-02 17:22:23,181 - ap - INFO - Uploading logs to ftest server http://localhost:9000/api/v1/foobar/results
<Response [401]>
1 feature passed, 0 failed, 0 skipped
1 scenario passed, 0 failed, 0 skipped
11 steps passed, 0 failed, 0 skipped, 0 undefined
Took 0m0.056s