Repository navigation
Test: Integration stack for HTCondor - #34
Draft
Alexander-Auer wants to merge 79 commits into
Draft
Alexander-Auer wants to merge 79 commits into
Alexander-Auer wants to merge 79 commits into
Conversation
… have them link to each other
…ede into feat/core-contract
…a consumer should choose to use it or not
* feat: Models the core contract needs * Feat: Protocols and Exceptions added for the core contract * Feat: Private protocols for the BatchBackend * feat: a fake backend to run unit tests against * fix: some code cleanup in the helper functions * feat: setup for the unit test suite * chore: style fix * chore: styling, unit test fixture * chore: single letter var `h` refering to hanlde changed to `handle` * fix: unused parameter in `test_injected_failure_is_reported_per_job()` removed * feat: Models the core contract needs * Feat: Protocols and Exceptions added for the core contract * Feat: Private protocols for the BatchBackend * feat: a fake backend to run unit tests against * fix: some code cleanup in the helper functions * feat: setup for the unit test suite * chore: style fix * chore: styling, unit test fixture * chore: single letter var `h` refering to hanlde changed to `handle` * fix: unused parameter in `test_injected_failure_is_reported_per_job()` removed * fix: made the OutputSpec optional as it is not suppoerted by all and a consumer should choose to use it or not --------- Co-authored-by: alexander <alexander.auer@cern.ch>
added 18 commits
October 26, 2026 09:53
- Google-style docstrings with Args, Returns and Raises for resolve() and every registry and configuration helper, and docstrings for the settings classes; ruff now checks docstrings against the Google convention. - Remove vm_max_lifetime_s: removing VMs after a lifetime is the consumer's policy, not interCEde's. - Import Callable from collections.abc, like the rest of the code.
A verb says that the call builds something, and get_backend() no longer reads like the backend itself.
ARCConfig, HTCondorCEConfig, CloudConfig, BatchLocalConfig and BatchSSHConfig replace the flat BackendConfig, which is now their union, chosen by kind (and by transport for batch). A consumer can still pass a plain mapping, such as a TOML table. - Every field is declared once, on the model of its kind: the internal settings classes, the hand-kept field lists and resolve() are gone, so a configuration is validated once instead of twice. - validate_config() checks a configuration and returns its model; registry.get_backend() uses it. A model is checked again, so one changed with model_copy() cannot carry fields of another transport to a backend. - Errors never repeat a value they were given, since it may be a secret, and name the expected fields when a field does not belong to the kind. - The configuration tests use the public API only. The SSH auth mode is now one value (auth = "key") instead of a list.
griffe-pydantic renders every field of each configuration model, inherited ones included, with its type, default and description, so the reference cannot drift from the code like the hand-written table could.
The merge of stack/registry kept a helper and a section header from the old test_config.py; the helper referred to resolve() and BackendConfig.model_validate(), which no longer exist.
Brings in the per-kind configuration models of stack/registry, and moves the credential code onto them: - credential_requirements(config, scopes) in _backends/credentials.py replaces the methods on the removed internal settings classes, with the same rules: a CE asks for its endpoint with the configured token and/or proxy, SSH for user@host:port unless an SSH agent holds the key, and a local batch system for nothing. - registry.get_backend(config, credentials) checks the provider and passes it to the parts that authenticate: single-class backends and transports. - The credential requirement tests move from test_config.py to test_credentials.py and build their configurations through validate_config().
Two tests had moved without changing, which only made the diff harder to read.
# Conflicts: # src/intercede/_backends/fake.py # src/intercede/registry.py # tests/unit/conftest.py # tests/unit/test_registry.py
…, squash-merged as DIRACGrid#29)
A value given by mistake, such as a misspelled field or plain data in a CredentialSet, may be the secret itself. Validation errors now hide their input, as the configuration models already do.
The message comes from the consumer's code and may hold a token or a secret URL. The AuthenticationError names only its type; the exception itself is still available as __cause__.
The fields were described in comments, which the generated reference does not show. They now use attribute docstrings, as the configuration models do.
Name every argument and the return value, and drop the blank lines before closing quotes.
…only allow one credential type instead of combinations
…n, and removed auth value from config as it was not used
Moves test_fake_backend.py to tests/unit/backends/fake/, ready for the HTCondor tests that follow. The tests themselves do not change. Part of DIRACGrid#23.
Renders a submit description from a plan: one process per copy, per-copy values indexed by ProcId, quoting, and refusing what a description cannot hold. It sets no policy on the job except keeping finished jobs until they are purged, so output can be collected again. Shared with the HTCondor scheduler to come (DIRACGrid#21), so it knows nothing about any backend. Expected values were checked against HTCondor 25. Part of DIRACGrid#23.
Builds the tools' command lines and reads what they print: condor_submit -terse, condor_rm, and the job ads of condor_q and condor_history, mapped to the common JobStatus. A finished job's result comes from its exit, a removed job keeps the result it had, and any hold that interCEde did not cause counts as aborted. Part of DIRACGrid#23.
interCEde no longer supports proxies, so a description has nothing to say about one.
A stack's tests run with pytest-xdist (stacks.yml `workers`, default 4), and `-rs --no-fold-skipped` makes the log name every skipped test and why. The workflow also runs when src/ changes, since that is what it exists to test. Part of DIRACGrid#23.
An HTCondor-CE in front of a one-machine HTCondor pool. The image refuses package mirrors below 1 MB/s and caches its slow installs per version. No test selects this stack yet, so its CI job only shows that the stack starts (pytest exit 5 is tolerated). The shared suite lands later. Part of DIRACGrid#23.
Alexander-Auer
force-pushed
the
stack/htcondor-2-integration-stack
branch
from
November 6, 2026 13:11
3198fa6 to
6a58e1b
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
test: the htcondor stack, and running integration tests side by side
Part of #23, related to #5. PR 2 of 6 for the HTCondor-CE backend.
No dependencies: this changes nothing in
src/, applies directly tomain, and can merge at any time.What's added
stacks/_images/htcondor-ce): AlmaLinux 9 with an HTCondor-CE in front of a one-machine pool, both in one container. It buildslatestorlts, following the stack'sversions.stacks/htcondor): publishes the CE on127.0.0.1:9619, with abasicconfiguration.workerssetting instacks.yml(default 4).-rs --no-fold-skippedmakes the log name every skipped test and why.src/changes.What to expect from CI
No test selects this stack yet, so its job only shows that the stack builds and starts (pytest exit 5 is tolerated). The suite arrives in PR 6.
Testing
1 new manifest test for
workers. The same image and stack passed the full suite on bothltsandlateston my fork (eb0fec6).