Skip to content
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

ILAB API unit testing #155

Draft
wants to merge 5 commits into
base: main
Choose a base branch
from
Draft

Conversation

dbutenhof
Copy link
Collaborator

@dbutenhof dbutenhof commented Jan 16, 2025

Type of change

  • Refactor
  • New feature
  • Bug fix
  • Optimization
  • Documentation Update

Description

This covers 100% of the ilab.py API module using FastAPI's TestClient.

This proved ... interesting ... as the FastAPI and Starlette versions we use are incompatible with the underlying httpx version ... TestClient init fails in a way that can't be worked around. (Starlette passes an unknown keyword parameter.)

After some experimentation, I ended up "unlocking" all the API-related packages in project.toml to "*" and letting poetry update resolve them, then "re-locked" them to those versions. The resulting combination of modules works for unit testing, and appears to work in a real ./local-compose.sh deployment as well.

This is chained from #122 (Crucible service) -> #140 (unit test framework) -> #146 (crucible unit tests) -> #123 (ilab API) -> #155 (API unit tests)

Related Tickets & Documents

PANDA-679 API unit test coverage

Checklist before requesting a review

  • I have performed a self-review of my code.
  • If it is a core feature, I have added thorough tests.

Testing

Unit testing using tox -e unit -- -vv; although I also deployed local containers with local-compose.sh in order to (lightly) test the new combination of package versions.

@dbutenhof dbutenhof self-assigned this Jan 16, 2025
This encapsulates substantial logic to encapsulate interpretation of the
Crucible Common Data Model OpenSearch schema for the use of CPT dashboard API
components. By itself, it does nothing.
This uses `black`, `isort` and `flake8` to check code quality, although
failure is ignored until we've cleaned it up (which has begin in
PR cloud-bulldozer#139 against the `revamp` branch).

Minimal unit testing is introduced, generating a code coverage report.
The text summary is added to the Action summary page, and the more
detailed HTML report is stored as an artifact for download.

NOTE: The GitHub Action environment is unhappy with `uvicorn` 0.15;
upgrading to the latest 0.32.x seems to work and hasn't obviously
broken anything else.
`crucible_svc.py` test coverage is now at 97%. While the remaining 3% is
worth some effort later, the law of diminishing returns will require A
significant additional effort; and since subsequent ILAB PRs will change
some of the service code anyway it's good enough for now.
Provide the `api/v1/ilab` API endpoint to allow a client to query
collected data on a Crucible CDM OpenSearch instance through the
`crucible_svc` service layer. It is backed by the Crucible layer added
in cloud-bulldozer#122, so only the final commit represents changes in this PR.
This covers 100% of the ilab.py API module using `FastAPI`'s `TestClient`.

This proved ... interesting ... as the FastAPI and Starlette versions we use
are incompatible with the underlying httpx version ... TestClient init fails
in a way that can't be worked around. (Starlette passes an unknown keyword
parameter.)

After some experimentation, I ended up "unlocking" all the API-related
packages in `project.toml` to `"*"` and letting `poetry update` resolve them,
then "re-locked" them to those versions. The resulting combination of modules
works for unit testing, and appears to work in a real `./local-compose.sh`
deployment as well.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant