-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add CI job to run system tests #761
Changes from 5 commits
06b439e
83fe567
e7c276d
21bf8f1
5390068
cdc667d
7071fed
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
on: | ||
workflow_call: | ||
|
||
env: | ||
# https://github.com/pytest-dev/pytest/issues/2042 | ||
PY_IGNORE_IMPORTMISMATCH: "1" | ||
|
||
jobs: | ||
run: | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v4 | ||
with: | ||
# Need this to get version number from last tag | ||
fetch-depth: 0 | ||
|
||
- name: Install python packages | ||
uses: ./.github/actions/install_requirements | ||
|
||
- name: Start RabbitMQ | ||
uses: namoshek/rabbitmq-github-action@v1 | ||
with: | ||
ports: "61613:61613" | ||
plugins: rabbitmq_stomp | ||
|
||
- name: Start Blueapi Server | ||
run: blueapi -c ${{ github.workspace }}/tests/unit_tests/example_yaml/valid_stomp_config.yaml serve & | ||
|
||
- name: Run tests | ||
run: tox -e system-test |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -5,6 +5,7 @@ | |||||||||||||||||||||||||||||||||||||
import pytest | ||||||||||||||||||||||||||||||||||||||
from bluesky_stomp.models import BasicAuthentication | ||||||||||||||||||||||||||||||||||||||
from pydantic import TypeAdapter | ||||||||||||||||||||||||||||||||||||||
from requests.exceptions import ConnectionError | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
from blueapi.client.client import ( | ||||||||||||||||||||||||||||||||||||||
BlueapiClient, | ||||||||||||||||||||||||||||||||||||||
|
@@ -43,7 +44,7 @@ | |||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
@pytest.fixture | ||||||||||||||||||||||||||||||||||||||
def client_without_auth(tmp_path) -> BlueapiClient: | ||||||||||||||||||||||||||||||||||||||
def client_without_auth(tmp_path: Path) -> BlueapiClient: | ||||||||||||||||||||||||||||||||||||||
return BlueapiClient.from_config(config=ApplicationConfig(auth_token_path=tmp_path)) | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
|
@@ -58,6 +59,22 @@ def client_with_stomp() -> BlueapiClient: | |||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
@pytest.fixture(scope="module", autouse=True) | ||||||||||||||||||||||||||||||||||||||
def wait_for_server(): | ||||||||||||||||||||||||||||||||||||||
client = BlueapiClient.from_config(config=ApplicationConfig()) | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
attempts_remaining = 20 | ||||||||||||||||||||||||||||||||||||||
while attempts_remaining > 0: | ||||||||||||||||||||||||||||||||||||||
try: | ||||||||||||||||||||||||||||||||||||||
client.get_environment() | ||||||||||||||||||||||||||||||||||||||
return | ||||||||||||||||||||||||||||||||||||||
except ConnectionError: | ||||||||||||||||||||||||||||||||||||||
... | ||||||||||||||||||||||||||||||||||||||
attempts_remaining -= 1 | ||||||||||||||||||||||||||||||||||||||
time.sleep(0.5) | ||||||||||||||||||||||||||||||||||||||
raise TimeoutError("No connection to the blueapi server") | ||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
nit: Why keep track when Python'll do it for ya mate There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Good shout, see also #763 |
||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
# This client will have auth enabled if it finds cached valid token | ||||||||||||||||||||||||||||||||||||||
@pytest.fixture | ||||||||||||||||||||||||||||||||||||||
def client() -> BlueapiClient: | ||||||||||||||||||||||||||||||||||||||
|
@@ -101,6 +118,7 @@ def clean_existing_tasks(client: BlueapiClient): | |||||||||||||||||||||||||||||||||||||
yield | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
@pytest.mark.xfail(reason="https://github.com/DiamondLightSource/blueapi/issues/676") | ||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
and then decorated with
This will help us to run the tests on the local system even if we are skipping them on the CI There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I like the longer message, will implement. I'm not a fan of having special steps to make the tests work, under this you would have to somehow know that you need to do |
||||||||||||||||||||||||||||||||||||||
def test_cannot_access_endpoints( | ||||||||||||||||||||||||||||||||||||||
client_without_auth: BlueapiClient, blueapi_client_get_methods: list[str] | ||||||||||||||||||||||||||||||||||||||
): | ||||||||||||||||||||||||||||||||||||||
|
@@ -112,6 +130,7 @@ def test_cannot_access_endpoints( | |||||||||||||||||||||||||||||||||||||
getattr(client_without_auth, get_method)() | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
@pytest.mark.xfail(reason="https://github.com/DiamondLightSource/blueapi/issues/676") | ||||||||||||||||||||||||||||||||||||||
def test_can_get_oidc_config_without_auth(client_without_auth: BlueapiClient): | ||||||||||||||||||||||||||||||||||||||
assert client_without_auth.get_oidc_config() == OIDCConfig( | ||||||||||||||||||||||||||||||||||||||
well_known_url="https://example.com/realms/master/.well-known/openid-configuration", | ||||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No longer running tests against ActiveMQ? Seems reasonable to me, given that the image is so deprecated, but we could replace it with Apache Artemis, just to make sure our Stomp interactions are generally valid.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We run the system tests of https://github.com/DiamondLightSource/bluesky-stomp/ against activemq and rabbitmq, which I think is sufficient