Skip to content

ci: add emulator tests against dockerized Subsonic servers - #1094

Open
xsteadfastx wants to merge 1 commit into
eddyizm:developmentfrom
xsteadfastx:ci/emulator-tests
Open

xsteadfastx wants to merge 1 commit into
eddyizm:developmentfrom
xsteadfastx:ci/emulator-tests

Conversation

@xsteadfastx

Copy link
Copy Markdown

What this does

Adds a CI workflow that actually boots an Android emulator and runs a real instrumented test against a real Subsonic server. No more "it works on my machine" — the app now proves it can install, launch, connect to a server, and render the home screen, on every push.

How it works

The workflow spins up a dockerized Subsonic server, seeds a tiny test library (two sine-wave MP3s generated with ffmpeg), boots an emulator with KVM, and runs a smoke test that:

  1. launches the app
  2. waits for it to reach a usable state
  3. checks it actually connects to the server (not just that it opens)
  4. scrolls to the Discovery section and asserts a seeded song shows up

Coverage

It runs the same test across a small matrix:

Server Flavor
Navidrome tempus
Navidrome degoogled
gonic tempus
gonic degoogled

So we get both server implementations and both product flavors covered for free.

Why this matters

The existing unit tests are great, but they never touch a real server or a real device. This catches the kind of thing that only shows up when the app talks to an actual Subsonic API — wrong endpoints, auth issues, library parsing, that sort of thing. And since it runs on every push, regressions get caught early instead of at release time.

Notes

  • The smoke test is intentionally small. It proves the plumbing works (emulator + server + app + library), not every feature. Playback, downloads, bookmarks, etc. can be added as follow-ups.
  • The server password is passed to the test via an instrumentation argument, so each server in the matrix logs in with its own credentials.
  • gonic needed a couple of non-obvious settings to start in docker (it listens on port 80 by default and won't boot without a playlists dir) — that's all handled in the workflow.

Testing

All four matrix jobs pass on the ci/emulator-tests branch.

Boot a real Android emulator (API 34, KVM) and run an instrumented smoke
test against a dockerized Subsonic server. The test seeds a small library
with ffmpeg sine-wave MP3s, then asserts the app installs, launches,
connects to the server, and renders a seeded song on the home screen.

Runs across a matrix of servers (navidrome, gonic) and flavors (tempus,
degoogled), with the server password passed to the test via an
instrumentation argument.
@coderabbitai

coderabbitai Bot commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Advanced

Run ID: a7bd383a-90ef-4202-8bfe-ef7773def709

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

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