c2d84c6f09
Make server_connect config persistence all-or-nothing by snapshotting ~/.cleveragents/config.toml before the three set_value calls and restoring the exact prior bytes on any exception. This preserves existing config-change audit events on success while preventing partially written server URL/namespace/TLS state after mid-sequence failures.\n\nAlso promote the #993 TDD feature from expected-fail to active regression coverage and tighten a flaky resource DAG Robot scenario by using a shared session with explicit commits to keep integration gates stable under parallel execution. ISSUES CLOSED: #993
44 lines
2.4 KiB
Gherkin
44 lines
2.4 KiB
Gherkin
@tdd_issue @tdd_issue_993
|
|
Feature: TDD Issue #993 — server_connect writes three config values non-atomically
|
|
As a developer
|
|
I want to verify that server_connect writes all three config values atomically
|
|
So that a partial failure does not leave the configuration in a half-written state
|
|
|
|
# This test captures bug #993: server_connect in server.py makes three
|
|
# sequential set_value() calls (server.url, server.namespace, server.tls-verify)
|
|
# with no try/except, no transaction, and no rollback. If the second call
|
|
# fails (e.g. disk full, permissions error), server.url is already persisted
|
|
# but server.namespace and server.tls-verify retain their old values. The
|
|
# config is left in a half-written state.
|
|
#
|
|
# Expected behavior: all three config values are written atomically — either
|
|
# all succeed or all fail (rollback to original state).
|
|
#
|
|
# This scenario now runs as a normal regression test after the fix for #993.
|
|
|
|
Scenario: Config remains unchanged when second set_value fails during server_connect
|
|
Given a fresh config directory for atomic write test
|
|
And the config has pre-existing server values
|
|
When I invoke server_connect but set_value fails on the second call
|
|
Then an error should have been raised during server_connect
|
|
And the config should have rolled back server.url to its original value
|
|
And the config should still have the original server.namespace
|
|
And the config should still have the original server.tls-verify
|
|
And the config event trail should include a compensating rollback for server.url
|
|
|
|
Scenario: Config remains unchanged when third set_value fails during server_connect
|
|
Given a fresh config directory for atomic write test
|
|
And the config has pre-existing server values
|
|
When I invoke server_connect but set_value fails on the third call
|
|
Then an error should have been raised during server_connect
|
|
And the config should have rolled back server.url to its original value
|
|
And the config should have rolled back server.namespace to its original value
|
|
And the config should still have the original server.tls-verify
|
|
|
|
Scenario: No partial server.url persisted when namespace write raises
|
|
Given a fresh config directory for atomic write test
|
|
And the config has no server values
|
|
When I invoke server_connect but set_value fails on the second call
|
|
Then an error should have been raised during server_connect
|
|
And the config should not contain a server.url value
|