Skip to content

Commit 1b4be80

Browse files
committed
chore: spiking testcontainers
1 parent 01e4ec4 commit 1b4be80

File tree

8 files changed

+51
-94
lines changed

8 files changed

+51
-94
lines changed

Makefile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ define E2E
3636
pip install -r requirements.txt
3737
pip install -e ../../
3838
./run_pytest.sh
39-
./verify_pact.sh
4039
endef
4140
export E2E
4241

examples/e2e/requirements.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
Flask==1.1.1
22
pytest==5.4.1
3-
requests==2.23.0
3+
requests==2.23.0
4+
testcontainers==3.3.0

examples/e2e/run_pytest.sh

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,19 @@
11
#!/bin/bash
22
set -o pipefail
33

4+
FLASK_APP=pact_provider.py python -m flask run -p 5001 & &>/dev/null
45

5-
6-
FLASK_APP=pact_provider.py python -m flask run -p 1235 & &>/dev/null
7-
8-
# python pact_provider.py & &>/dev/null
96
FLASK_PID=$!
107

11-
function teardown {
12-
echo "Tearing down Flask server ${FLASK_PID}"
13-
14-
kill -9 $FLASK_PID
15-
}
8+
teardown() {
9+
echo "Tearing down Flask server ${FLASK_PID}";
10+
kill -9 $FLASK_PID;
11+
};
1612
trap teardown EXIT
1713

1814
sleep 3
1915

20-
pytest
16+
pytest --publish-pact 1
17+
18+
teardown
2119

22-
teardown()

examples/e2e/tests/broker_container.py

Whitespace-only changes.

examples/e2e/tests/conftest.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11

2+
from testcontainers.compose import DockerCompose
3+
4+
import pytest
5+
26
def pytest_addoption(parser):
37
parser.addoption(
48
"--publish-pact", type=str, action="store",
@@ -9,3 +13,25 @@ def pytest_addoption(parser):
913
"--provider-url", type=str, action="store",
1014
help="The url to our provider."
1115
)
16+
17+
18+
@pytest.fixture(scope='session', autouse=True)
19+
def broker(request):
20+
version = request.config.getoption('--publish-pact')
21+
publish = True if version else False
22+
23+
# yield
24+
if not publish:
25+
yield
26+
return
27+
28+
print('Starting broker')
29+
with DockerCompose("../broker",
30+
compose_file_name=["docker-compose.yml"],
31+
pull=True) as compose:
32+
33+
stdout, stderr = compose.get_logs()
34+
if stderr:
35+
print("Errors\\n:{}".format(stderr))
36+
print(stdout)
37+
yield

examples/e2e/tests/consumer/test_user_consumer.py

Lines changed: 2 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@
22

33
import logging
44
import os
5-
import atexit
6-
7-
from testcontainers.compose import DockerCompose
85

96
import pytest
107
from pact import Consumer, Like, Provider, Term, Format
@@ -32,27 +29,8 @@ def consumer():
3229
.format(host=PACT_MOCK_HOST, port=PACT_MOCK_PORT)
3330
)
3431

35-
@pytest.fixture(scope='session')
36-
def broker(request):
37-
version = request.config.getoption('--publish-pact')
38-
publish = True if version else False
39-
40-
if not publish:
41-
return
42-
43-
print('Starting broker')
44-
with DockerCompose("../broker",
45-
compose_file_name=["docker-compose.yml"],
46-
pull=True) as compose:
47-
48-
stdout, stderr = compose.get_logs()
49-
if stderr:
50-
print("Errors\\n:{}".format(stderr))
51-
print(stdout)
52-
yield
53-
5432

55-
@pytest.fixture(scope='session')
33+
@pytest.fixture(scope='class')
5634
def pact(request):
5735
version = request.config.getoption('--publish-pact')
5836
publish = True if version else False
@@ -103,4 +81,4 @@ def test_get_non_existing_user(broker, pact, consumer):
10381
with pact:
10482
user = consumer.get_user('UserA')
10583
assert user is None
106-
# pact.verify()
84+
pact.verify()

examples/e2e/tests/consumer/userserviceclient-userservice.json

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -6,43 +6,6 @@
66
"name": "UserService"
77
},
88
"interactions": [
9-
{
10-
"description": "a request for UserA",
11-
"providerState": "UserA exists and is not an administrator",
12-
"request": {
13-
"method": "get",
14-
"path": "/users/UserA"
15-
},
16-
"response": {
17-
"status": 200,
18-
"headers": {
19-
},
20-
"body": {
21-
"name": "UserA",
22-
"id": "fc763eba-0905-41c5-a27f-3934ab26786c",
23-
"created_on": "2016-12-15T20:16:01",
24-
"ip_address": "127.0.0.1",
25-
"admin": false
26-
},
27-
"matchingRules": {
28-
"$.body": {
29-
"match": "type"
30-
},
31-
"$.body.id": {
32-
"match": "regex",
33-
"regex": "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"
34-
},
35-
"$.body.created_on": {
36-
"match": "regex",
37-
"regex": "\\d+-\\d+-\\d+T\\d+:\\d+:\\d+"
38-
},
39-
"$.body.ip_address": {
40-
"match": "regex",
41-
"regex": "(\\d{1,3}\\.)+\\d{1,3}"
42-
}
43-
}
44-
}
45-
},
469
{
4710
"description": "a request for UserA",
4811
"providerState": "UserA does not exist",

examples/e2e/tests/provider/test_provider.py

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import logging
44
import os
5-
from testcontainers.compose import DockerCompose
65

76
from pact import Verifier
87
import pytest
@@ -21,31 +20,25 @@
2120
PACT_BROKER_PASSWORD = "pactbroker"
2221

2322
PACT_MOCK_HOST = 'localhost'
24-
PACT_MOCK_PORT = 1235
23+
PACT_MOCK_PORT = 5001
2524
PACT_URL = "http://{}:{}".format(PACT_MOCK_HOST, PACT_MOCK_PORT)
2625
PACT_DIR = os.path.dirname(os.path.realpath(__file__))
2726

27+
@pytest.fixture
28+
def default_opts():
29+
return {
30+
'broker_username': PACT_BROKER_USERNAME,
31+
'broker_password': PACT_BROKER_PASSWORD,
32+
'broker_url': PACT_BROKER_URL
33+
}
2834

29-
def test_get_user_non_admin():
35+
36+
def test_get_user_non_admin(default_opts):
3037
verifier = Verifier(provider='UserService',
3138
provider_base_url=PACT_URL)
3239

33-
output, logs = verifier.verify_pacts('./userserviceclient-userservice.json',
34-
verbose=False,
35-
provider_states_setup_url="{}/_pact/provider_states".format(PACT_URL))
40+
output, logs = verifier.verify_with_broker(**default_opts,
41+
verbose=True,
42+
provider_states_setup_url="{}/_pact/provider_states".format(PACT_URL))
3643

3744
assert (output == 0)
38-
39-
40-
# @pytest.fixture(scope='session')
41-
# def broker():
42-
# print('Starting broker')
43-
# with DockerCompose("../broker",
44-
# compose_file_name=["docker-compose.yml"],
45-
# pull=True) as compose:
46-
47-
# stdout, stderr = compose.get_logs()
48-
# if stderr:
49-
# print("Errors\\n:{}".format(stderr))
50-
# print(stdout)
51-
# yield

0 commit comments

Comments
 (0)