mirror of
https://git.sr.ht/~tsileo/microblog.pub
synced 2024-11-15 03:04:28 +00:00
Add basic "federation" tests and some bugfixes
This commit is contained in:
parent
6eb5d24f3e
commit
fe46cb4317
7 changed files with 60 additions and 9 deletions
|
@ -21,4 +21,7 @@ script:
|
||||||
- docker-compose -p instance1 -f docker-compose-tests.yml ps
|
- docker-compose -p instance1 -f docker-compose-tests.yml ps
|
||||||
- WEB_PORT=5007 CONFIG_DIR=./tests/fixtures/instance2/config docker-compose -p instance2 -f docker-compose-tests.yml up -d
|
- WEB_PORT=5007 CONFIG_DIR=./tests/fixtures/instance2/config docker-compose -p instance2 -f docker-compose-tests.yml up -d
|
||||||
- docker-compose -p instance2 -f docker-compose-tests.yml ps
|
- docker-compose -p instance2 -f docker-compose-tests.yml ps
|
||||||
- pytest -v --ignore data
|
# Integration tests first
|
||||||
|
- pytest -v --ignore data -k integration
|
||||||
|
# Federation tests (with two local instances)
|
||||||
|
- pytest -v -s --ignore data -k federation
|
||||||
|
|
4
app.py
4
app.py
|
@ -760,6 +760,8 @@ def api_upload():
|
||||||
@api_required
|
@api_required
|
||||||
def api_new_note():
|
def api_new_note():
|
||||||
source = request.args.get('content')
|
source = request.args.get('content')
|
||||||
|
if not source:
|
||||||
|
raise ValueError('missing content')
|
||||||
content, tags = parse_markdown(source)
|
content, tags = parse_markdown(source)
|
||||||
to = request.args.get('to')
|
to = request.args.get('to')
|
||||||
cc = [ID+'/followers']
|
cc = [ID+'/followers']
|
||||||
|
@ -792,6 +794,8 @@ def api_stream():
|
||||||
@api_required
|
@api_required
|
||||||
def api_follow():
|
def api_follow():
|
||||||
actor = request.args.get('actor')
|
actor = request.args.get('actor')
|
||||||
|
if not actor:
|
||||||
|
raise ValueError('missing actor')
|
||||||
if DB.following.find({'remote_actor': actor}).count() > 0:
|
if DB.following.find({'remote_actor': actor}).count() > 0:
|
||||||
return Response(status=201)
|
return Response(status=201)
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ with open('config/me.yml') as f:
|
||||||
SUMMARY = conf['summary']
|
SUMMARY = conf['summary']
|
||||||
ICON_URL = conf['icon_url']
|
ICON_URL = conf['icon_url']
|
||||||
PASS = conf['pass']
|
PASS = conf['pass']
|
||||||
PUBLIC_INSTANCES = conf.get('public_instances')
|
PUBLIC_INSTANCES = conf.get('public_instances', [])
|
||||||
# TODO(tsileo): choose dark/light style
|
# TODO(tsileo): choose dark/light style
|
||||||
THEME_COLOR = conf.get('theme_color')
|
THEME_COLOR = conf.get('theme_color')
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
version: '3'
|
version: '3.5'
|
||||||
services:
|
services:
|
||||||
web:
|
web:
|
||||||
build: .
|
build: .
|
||||||
|
@ -31,3 +31,6 @@ services:
|
||||||
environment:
|
environment:
|
||||||
- RABBITMQ_ERLANG_COOKIE=secretrabbit
|
- RABBITMQ_ERLANG_COOKIE=secretrabbit
|
||||||
- RABBITMQ_NODENAME=rabbit@my-rabbit
|
- RABBITMQ_NODENAME=rabbit@my-rabbit
|
||||||
|
networks:
|
||||||
|
default:
|
||||||
|
name: microblogpubfede
|
||||||
|
|
41
tests/federation_test.py
Normal file
41
tests/federation_test.py
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
import os
|
||||||
|
|
||||||
|
import requests
|
||||||
|
from html2text import html2text
|
||||||
|
|
||||||
|
|
||||||
|
def resp2plaintext(resp):
|
||||||
|
"""Convert the body of a requests reponse to plain text in order to make basic assertions."""
|
||||||
|
return html2text(resp.text)
|
||||||
|
|
||||||
|
|
||||||
|
def test_federation():
|
||||||
|
"""Ensure the homepage is accessible."""
|
||||||
|
resp = requests.get('http://localhost:5006')
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.status_code == 200
|
||||||
|
|
||||||
|
resp = requests.get('http://localhost:5007')
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.status_code == 200
|
||||||
|
|
||||||
|
# Keep one session per instance
|
||||||
|
|
||||||
|
# Login
|
||||||
|
session1 = requests.Session()
|
||||||
|
resp = session1.post('http://localhost:5006/login', data={'pass': 'hello'})
|
||||||
|
assert resp.status_code == 200
|
||||||
|
|
||||||
|
# Login
|
||||||
|
session2 = requests.Session()
|
||||||
|
resp = session2.post('http://localhost:5007/login', data={'pass': 'hello'})
|
||||||
|
assert resp.status_code == 200
|
||||||
|
|
||||||
|
# Instance1 follows instance2
|
||||||
|
resp = session1.get('http://localhost:5006/api/follow', params={'actor': 'http://instance2_web_1:5005'})
|
||||||
|
assert resp.status_code == 201
|
||||||
|
|
||||||
|
resp = requests.get('http://localhost:5007/followers', headers={'Accept': 'application/activity+json'})
|
||||||
|
resp.raise_for_status()
|
||||||
|
|
||||||
|
assert resp.json()['first']['orderedItems'] == ['http://instance1_web_1:5005']
|
4
tests/fixtures/instance1/config/me.yml
vendored
4
tests/fixtures/instance1/config/me.yml
vendored
|
@ -1,7 +1,7 @@
|
||||||
username: 'instance_1'
|
username: 'instance1'
|
||||||
name: 'Instance 1'
|
name: 'Instance 1'
|
||||||
icon_url: 'https://sos-ch-dk-2.exo.io/microblogpub/microblobpub.png'
|
icon_url: 'https://sos-ch-dk-2.exo.io/microblogpub/microblobpub.png'
|
||||||
domain: 'localhost:5006'
|
domain: 'instance1_web_1:5005'
|
||||||
summary: 'instance1 summary'
|
summary: 'instance1 summary'
|
||||||
pass: '$2b$12$nEgJMgaYbXSPOvgnqM4jSeYnleKhXqsFgv/o3hg12x79uEdsR4cUy' # hello
|
pass: '$2b$12$nEgJMgaYbXSPOvgnqM4jSeYnleKhXqsFgv/o3hg12x79uEdsR4cUy' # hello
|
||||||
https: false
|
https: false
|
||||||
|
|
4
tests/fixtures/instance2/config/me.yml
vendored
4
tests/fixtures/instance2/config/me.yml
vendored
|
@ -1,7 +1,7 @@
|
||||||
username: 'instance_2'
|
username: 'instance2'
|
||||||
name: 'Instance 2'
|
name: 'Instance 2'
|
||||||
icon_url: 'https://sos-ch-dk-2.exo.io/microblogpub/microblobpub.png'
|
icon_url: 'https://sos-ch-dk-2.exo.io/microblogpub/microblobpub.png'
|
||||||
domain: 'localhost:5007'
|
domain: 'instance2_web_1:5005'
|
||||||
summary: 'instance2 summary'
|
summary: 'instance2 summary'
|
||||||
pass: '$2b$12$nEgJMgaYbXSPOvgnqM4jSeYnleKhXqsFgv/o3hg12x79uEdsR4cUy' # hello
|
pass: '$2b$12$nEgJMgaYbXSPOvgnqM4jSeYnleKhXqsFgv/o3hg12x79uEdsR4cUy' # hello
|
||||||
https: false
|
https: false
|
||||||
|
|
Loading…
Reference in a new issue