Skip to content

test(smoke): comprehensive AT-SPI, stability, and presence coverage for Dakota GNOME extensions - #808

Open
castrojo wants to merge 4 commits into
mainfrom
test/dakota-gnome-extensions
Open

test(smoke): comprehensive AT-SPI, stability, and presence coverage for Dakota GNOME extensions#808
castrojo wants to merge 4 commits into
mainfrom
test/dakota-gnome-extensions

Conversation

@castrojo

Copy link
Copy Markdown
Collaborator

Resolves #793 and #794.

Adds full BDD behave test coverage across all 18 GNOME Shell extensions packaged and shipped in projectbluefin/dakota (elements/bluefin/gnome-shell-extensions.bst):

1. Dakota Extension Presence & Dconf Overrides (tests/smoke/features/dakota_extensions.feature)

  • Validates the 11 default-enabled extensions:
    • appindicatorsupport@rgcjonas.gmail.com
    • bazaar-integration@kolunmi.github.io
    • blur-my-shell@aunetx
    • BudsLink-Companion@maniacx.github.com (+ level-indicator-color=0)
    • caffeine@patapon.info
    • custom-command-list@storageb.github.com (+ icon 'ublue-logo-symbolic' and options 2)
    • dash-to-dock@micxgx.gmail.com
    • fuzzy-application-search@mkhl.codeberg.page
    • gradia-integration@alexandervanhee.github.io
    • gsconnect@andyholmes.github.io
    • tilingshell@ferrarodomenico.com (+ show-indicator=false)
  • Validates installation and dconf configuration of the 7 opt-in / hardware & personal integrations:
    • copyous@boerdereinar.dev
    • power-status-color@projectbluefin.io
    • quick-settings-audio-panel@rayzeq.github.io
    • quicksettings-audio-devices-hider@marcinjahn.com
    • quicksettings-audio-devices-renamer@marcinjahn.com
    • syncthing-toggle@rehhouari.github.com (+ start-stop-only=true)
    • tailscale-gnome-qs@tailscale-qs.github.io

2. Newly Enabled Extension Stability & Stress (tests/smoke/features/bluefin_new_extensions.feature)

  • Copyous: AT-SPI popover interaction, rapid clipboard-change stress (plain, multiline, Unicode, large payload), shell accessibility and bounded memory usage.
  • Syncthing Toggle: Quick Settings "Sync Folder" toggle and header/pill labels, service start/stop.
  • Bluetooth Battery Meter: Panel icon rendering, symbolic color override, missing-device graceful handling.
  • Audio Device Hider/Renamer: Quick Settings audio menu populates cleanly.
  • Tiling Assistant: Keyboard shortcuts, gesture handling, shell responsiveness.
  • Tailscale Quick Settings: Status item presence and running/stopped/unavailable daemon handling.

3. Power Status Color Extension State Transitions (tests/smoke/features/power_status_color.feature)

  • Yellow alert on /run/reboot-required.
  • Red alert on uptime overdue with precedence over reboot flag.
  • Clean teardown and timer release on extension disable.

4. Verification

  • All 1,635 unit tests pass cleanly.
  • behave --dry-run passes for all feature files.
  • ruff check tests/ passes with 0 warnings.
  • python3 scripts/validate_docs.py and generate_skill_index.py --check pass.
  • Coverage snapshot refreshed.

mrbobbytables and others added 3 commits September 9, 2026 22:08
Adds tests/smoke/features/bluefin_new_extensions.feature covering the
seven curated GNOME Shell extensions newly enabled by default in
Bluefin/Dakota (projectbluefin/common#1087), complementing the
presence-only checks in bluefin_extensions.feature:

- copyous: AT-SPI clipboard history popover interaction, rapid
  clipboard-change stress with plain/multiline/Unicode/large payloads,
  and post-stress GNOME Shell accessibility + bounded-memory assertions
- syncthing-toggle: Quick Settings toggle/pill/header label, service
  start/stop, and start-stop-only gsettings check
- Bluetooth-Battery-Meter: panel icon presence, symbolic indicator
  color setting, and clean behavior with no paired devices
- quicksettings-audio-devices-hider/renamer: Quick Settings audio menu
  opens cleanly for each extension
- tiling-assistant: window-snapping keyboard shortcuts, gesture
  soft-pass (gestures cannot be synthesized in headless CI), and
  overall Shell responsiveness
- tailscale-gnome-qs: Quick Settings item presence and daemon
  running/stopped/unavailable state handling

All new steps build on the existing SSH/Shell.Eval/journalctl helper
conventions in steps.py and gnome_extensions_steps.py. Checks that
depend on unverifiable third-party extension internals (gsettings
schema ids, exact AT-SPI role names) degrade to a printed WARNING and
soft pass, while the core stability assertions (GNOME Shell stays
accessible, no new gnome-shell journal errors, no coredump) always run
and fail hard — preserving the crash-regression value described in the
issue even where extension-internal implementation details can't be
guessed reliably.

Adds tests/unit/test_bluefin_new_extensions_steps.py with unit coverage
for the new pure/host-command-construction helpers.

Fixes #793

Signed-off-by: mrbobbytables <mrbobbytables@users.noreply.github.com>
…s-color extension

Adds behave coverage for the power-status-color@projectbluefin.io GNOME
Shell extension (projectbluefin/bluefin-bling):

- Extension presence/enablement and journal error/warning hygiene.
- Reaction to /run/reboot-required (yellow 'power-status-reboot' style
  class), applied and cleared via the extension's real file monitor.
- Uptime-overdue alert ('power-status-overdue') precedence over the
  reboot alert, exercised through the extension's own _checkStatus()
  logic with only the uptime probe stubbed (30-day uptime cannot be
  reproduced in CI).
- Lifecycle/teardown hygiene: style classes and the live stateObj are
  gone after gnome-extensions disable.

Style-class assertions go through org.gnome.Shell.Eval since CSS style
classes on St actors are not exposed via AT-SPI.

Closes #794

Signed-off-by: mrbobbytables <mrbobbytables@users.noreply.github.com>
…ensions

- Cover all 18 GNOME Shell extensions shipped in projectbluefin/dakota:
  - Default-enabled extensions: appindicatorsupport, bazaar-integration, blur-my-shell,
    BudsLink-Companion, caffeine, custom-command-list, dash-to-dock,
    fuzzy-application-search, gradia-integration, gsconnect, tilingshell.
  - Curated opt-in / personal & hardware integrations: copyous, power-status-color,
    quick-settings-audio-panel, quicksettings-audio-devices-hider,
    quicksettings-audio-devices-renamer, syncthing-toggle, tailscale-gnome-qs.
- Validate dconf schema overrides for BudsLink level-indicator-color, custom-command-list
  icon/options, tilingshell indicator toggle, and syncthing-toggle start-stop-only.
- Implement reusable 'GNOME extension "{uuid}" is installed' and 'Dconf path "{path}" has value "{expected_value}"' steps.
- Add unit tests for new step helpers.
- Regenerate suite-map coverage snapshot.

Assisted-by: Gemini 3.8 Flash via GitHub Copilot
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@castrojo
castrojo enabled auto-merge September 10, 2026 02:12
@codecov-commenter

codecov-commenter commented Sep 10, 2026

Copy link
Copy Markdown

⚠️ Please install the 'codecov app svg image' to ensure uploads and comments are reliably processed by Codecov.

Codecov Report

❌ Patch coverage is 80.39033% with 211 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
...oke/features/steps/bluefin_new_extensions_steps.py 52.17% 143 Missing ⚠️
tests/smoke/features/steps/copyous_stress_steps.py 71.31% 37 Missing ⚠️
...s/smoke/features/steps/power_status_color_steps.py 75.42% 29 Missing ⚠️
tests/unit/test_power_status_color_steps.py 98.62% 2 Missing ⚠️

📢 Thoughts on this report? Let us know!

- Dedicated feature suite (tests/smoke/features/copyous_stress.feature) targeting known
  Copyous crash and freeze vectors (GDA database corruption, black screen GDM fallback,
  large/multiline payload memory exhaustion, null byte/SQL injection, rapid popover toggles).
- Scenarios:
  - Rapid 40-event clipboard churn with heterogeneous data and final payload retention.
  - Oversized payloads (1MB string, 5000 lines multiline, deep nested JSON) with
    strict 200MB memory ceiling assertion and 3-second Shell responsiveness check.
  - Rapid popover toggling (10x burst) asserting zero compositor freeze.
  - Extension lifecycle rapid disable/re-enable stress verifying clean teardown and GJS recovery.
  - Malformed payload injection (embedded null bytes, escape characters, SQL injection).
- Implement robust step definitions in copyous_stress_steps.py with Shell.Eval responsiveness probes,
  coredumpctl crash assertions, and journal error verification.
- Add unit coverage for new steps in tests/unit/test_copyous_stress_steps.py.
- Update suite-map coverage snapshot.

Assisted-by: Gemini 3.8 Flash via GitHub Copilot
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

@hanthor hanthor left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mechanically this is the healthiest of the three overlapping extension PRs

Test-merged onto main and ran the full PR gate set locally:

PR808 | snapshot=FRESH | ruff='All checks passed!' | pytest: 1645 passed

(the one failure I see on every branch is test_kde_faillog reacting to my sandbox running as root; main baseline is 1570 passed with the same result)

It also supersedes #798 and #799 outright — same filenames (bluefin_new_extensions.feature, bluefin_new_extensions_steps.py, power_status_color.feature, power_status_color_steps.py), same issues (#793/#794) — and unlike both of those it merges cleanly onto current main.

One thing to fix before merge: 34 new scenarios, all counted as active, many of which cannot fail

The snapshot delta this PR commits:

-| smoke | 196 | 151 | 0 | 45 |
+| smoke | 230 | 185 | 0 | 45 |

All 34 new scenarios land in the active column — the Pending/Future count for smoke is unchanged at 45. But the step implementations lean heavily on printed-warning soft passes:

tests/smoke/features/steps/bluefin_new_extensions_steps.py   18 × WARNING   (25 asserts, 562 lines)
tests/smoke/features/steps/copyous_stress_steps.py            2 × WARNING
tests/smoke/features/steps/power_status_color_steps.py        0 × WARNING

Tag audit across the four new feature files shows no @pending, @future or @hardware_blocked anywhere:

  18 @dakota_only @extensions
   6 @extensions
   3 @extensions @atspi @priority-high @stress
   2 @extensions @power_status
   ...

So the suite-map will report 34 additional scenarios of verified coverage, while a substantial share of those steps print WARNING: … and return green regardless of what the image does. That is the failure mode the snapshot exists to make visible.

Request: tag the scenarios whose assertions are soft (the third-party gsettings-schema and AT-SPI-role guesses called out in the sibling PR descriptions) as @pending with the blocking reason, regenerate the snapshot, and keep the hard crash-regression scenarios active. power_status_color_steps.py is a good model — zero soft passes.

Secondary: copyous_stress.feature and dakota_extensions.feature are new here and not in #798/#799. dakota_extensions.feature is 18 @dakota_only presence/dconf scenarios — worth confirming those actually run in a lane today rather than being skipped everywhere.


Generated by Claude Code

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.

[qa] Add AT-SPI smoke and crash-regression coverage for newly enabled GNOME extensions

4 participants