54 lines
2.8 KiB
Gherkin
54 lines
2.8 KiB
Gherkin
Feature: Database URL sanitisation — credentials must never be exposed
|
|
|
|
As a CleverAgents operator
|
|
I want database URLs in CLI output to have their credentials masked
|
|
So that running ``agents info`` never leaks passwords or API tokens
|
|
|
|
@tdd_bug_8395
|
|
Scenario Outline: PostgreSQL URL with user and password — all are masked
|
|
Given the database url is "<url>"
|
|
When I run sanitise_db_url
|
|
Then the sanitised database url should be "<expected>"
|
|
|
|
Examples:
|
|
| url | expected |
|
|
| postgresql://user:secret@localhost/mydb | postgresql://***:***@localhost/mydb |
|
|
| postgresql://admin:p%40ssw0rd@db.example.com:5432/agents | postgresql://***:***@db.example.com:5432/agents |
|
|
| postgresql://readonly:r0ad_only@pg.cluster.internal:5433/production | postgresql://***:***@pg.cluster.internal:5433/production |
|
|
|
|
Scenario Outline: MySQL URL with credentials — all are masked
|
|
Given the database url is "<url>"
|
|
When I run sanitise_db_url
|
|
Then the sanitised database url should be "<expected>"
|
|
|
|
Examples:
|
|
| url | expected |
|
|
| mysql://app:s3cret@mysql.internal:3306/agents | mysql://***:***@mysql.internal:3306/agents |
|
|
| mysql+pymysql://root:toor@localhost/testdb | mysql+pymysql://***:***@localhost/testdb |
|
|
|
|
Scenario Outline: SQLite URLs — remain unchanged (no credentials)
|
|
Given the database url is "<url>"
|
|
When I run sanitise_db_url
|
|
Then the sanitised database url should be "<expected>"
|
|
|
|
Examples:
|
|
| url | expected |
|
|
| sqlite:///data/cleveragents.db | sqlite:///data/cleveragents.db |
|
|
| sqlite:////absolute/path/to/db.sqlite | sqlite:////absolute/path/to/db.sqlite |
|
|
| memory | memory |
|
|
|
|
Scenario: Username-only URL — password is still masked
|
|
Given the database url is "postgres://deploy@db.example.com/prod"
|
|
When I run sanitise_db_url
|
|
Then the sanitised database url should be "postgres://***:***@db.example.com/prod"
|
|
|
|
Scenario: SQLite URL without credentials remains unchanged
|
|
Given the database url is "sqlite:///test.db"
|
|
When I run sanitise_db_url
|
|
Then the sanitised database url should be "sqlite:///test.db"
|
|
|
|
Scenario: build_info_data returns sanitised database URL
|
|
Given a mock settings object with database url "postgresql://admin:supersecret@host.example.com:5432/mydb"
|
|
When I call build_info_data
|
|
Then the database field in info data should be "postgresql://***:***@host.example.com:5432/mydb"
|