From ba6f0ab16addc3f3b37dcf04e0e3b88b57b1e703 Mon Sep 17 00:00:00 2001 From: Simon Koudijs Date: Tue, 6 Oct 2026 10:15:42 +0000 Subject: [PATCH] test: run Room Pass's QR login against Room Pass 2.1.0 The e2e fixture pins Room Pass 2.1.0's image by digest and its CRDs from the same tag. 2.1.0 only adds the optional Room spec.appearance; the join, cookie and logout contract the suite checks is unchanged. Room Pass's deploy/dex now keeps Dex's state in Kubernetes; the fixture keeps SQLite on a volume, and says so where it claims to follow deploy/dex. Co-Authored-By: Claude Opus 5.5 --- docs/room-pass.md | 4 +- test/e2e/cluster/room-pass.sh | 6 +-- test/e2e/cluster/room-pass/crds.yaml | 60 +++++++++++++++++++++-- test/e2e/cluster/room-pass/room-pass.yaml | 6 ++- test/e2e/room_pass_test.go | 2 +- 5 files changed, 66 insertions(+), 12 deletions(-) diff --git a/docs/room-pass.md b/docs/room-pass.md index ffec32b..94a1898 100644 --- a/docs/room-pass.md +++ b/docs/room-pass.md @@ -6,8 +6,8 @@ name, and arrive signed in. Voter asked for this in the [implementer feedback](implementer-feedback.md) (entry 2), as the release evidence its audience-release plan requires before switching to krm-foyer. -**Status: run end to end (2026-10-06)** against Room Pass 2.0.0's released image -(`ghcr.io/sunib/room-pass:2.0.0`, revision `2185782`, pinned by digest) and its CRDs, +**Status: run end to end (2026-10-06)** against Room Pass 2.1.0's released image +(`ghcr.io/sunib/room-pass:2.1.0`, revision `df2070d`, pinned by digest) and its CRDs, behind its own Dex, in the e2e fixture, by a real Chromium ([room_pass_test.go](../test/e2e/room_pass_test.go), fixture in [room-pass.sh](../test/e2e/cluster/room-pass.sh)). [What runs](#what-the-e2e-suite-runs) diff --git a/test/e2e/cluster/room-pass.sh b/test/e2e/cluster/room-pass.sh index 02b01b4..1953689 100755 --- a/test/e2e/cluster/room-pass.sh +++ b/test/e2e/cluster/room-pass.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Room Pass's QR login in the e2e fixture (docs/room-pass.md): Room Pass 2.0.0 and the +# Room Pass's QR login in the e2e fixture (docs/room-pass.md): Room Pass 2.1.0 and the # Dex behind it (room-pass/room-pass.yaml), its CRDs and a Room, a test application with # the QR entry point (room-pass/room-app.yaml), the two hosts' routes in Traefik # (room-pass/routes.yaml), and a third krm-foyer on the application's host @@ -11,9 +11,9 @@ # Writes E2E_DIR/room-env: where the suite finds it. set -euo pipefail -# Room Pass 2.0.0 (2185782f6f349731909eafdb290007bc3feb168c), the release +# Room Pass 2.1.0 (df2070d0ed55ba110e9716efd76479b2db4a922b), the release # room-pass/crds.yaml is from. -ROOM_PASS_IMAGE="ghcr.io/sunib/room-pass:2.0.0@sha256:eb5fee5161e52eb6de3983c811ddc883838cbee1dfea33fb013374696e189416" +ROOM_PASS_IMAGE="ghcr.io/sunib/room-pass:2.1.0@sha256:346b4422278dc7b2f6f2f20d52bee59874916e3021fb477321c0aacca19e58de" # The same Dex and nginx as start-cluster.sh. DEX_IMAGE="ghcr.io/dexidp/dex:v2.45.1@sha256:8499afd690c437f52301efd2b05b2455da5bd2dfc20332cd697dc9937f808462" NGINX_IMAGE="nginx:1.31.6-alpine@sha256:df221db836e1754089190208cee7eeda94f233197056426eda74a43ab1abeac2" diff --git a/test/e2e/cluster/room-pass/crds.yaml b/test/e2e/cluster/room-pass/crds.yaml index 2c4eaf6..2f068ab 100644 --- a/test/e2e/cluster/room-pass/crds.yaml +++ b/test/e2e/cluster/room-pass/crds.yaml @@ -1,6 +1,6 @@ -# Room Pass's CRDs, as released in v2.0.0 (2185782f6f349731909eafdb290007bc3feb168c, -# config/crd/), the release whose image room-pass.yaml pins. Copied unchanged; replace -# both together. +# Room Pass's CRDs, as released in v2.1.0 (df2070d0ed55ba110e9716efd76479b2db4a922b, +# config/crd/bases/), the release whose image room-pass.yaml pins. Copied unchanged; +# replace both together. --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition @@ -67,6 +67,59 @@ spec: x-kubernetes-validations: - message: allowedReturnURLs is immutable rule: self == oldSelf + appearance: + description: |- + Appearance dresses the join page for this event. Empty, the page looks + as it always has. + + Pictures are paths on the join host, because the join page admits images + from its own origin only. Serve them there without a login: participants + have not signed in yet. + + Like any spec change, editing it starts a fresh join-code epoch, which + invalidates the code on screen. Set it before the event. + properties: + accentColor: + description: |- + AccentColor fills the buttons and outlines focused fields, as #rrggbb. + The button text is white or near-black, whichever contrasts more. + pattern: ^#[0-9a-fA-F]{6}$ + type: string + backgroundColor: + description: |- + BackgroundColor is the page behind the form, as #rrggbb. Setting it, or + BackgroundImage, puts the form on a white card so it stays readable. + pattern: ^#[0-9a-fA-F]{6}$ + type: string + backgroundImage: + description: |- + BackgroundImage covers the page behind the form, as a path on the join + host. BackgroundColor shows until it arrives. The whole room loads it at + once over the venue's network, so keep it small. + maxLength: 512 + pattern: ^/[A-Za-z0-9._~%!$&+,;=:@?-][A-Za-z0-9._~%!$&+,;=:@/?-]*$ + type: string + picture: + description: |- + Picture is shown above the title, as a path on the join host such as + /talks/my-talk/logo.png. + maxLength: 512 + pattern: ^/[A-Za-z0-9._~%!$&+,;=:@?-][A-Za-z0-9._~%!$&+,;=:@/?-]*$ + type: string + pictureAlt: + description: |- + PictureAlt is what a screen reader says for the picture. Empty marks it + decorative. + maxLength: 120 + pattern: ^[^<>\x00-\x1f\x7f]*$ + type: string + tagline: + description: 'Tagline is one line under the title: the event, + the room, the time.' + maxLength: 120 + pattern: ^[^<>\x00-\x1f\x7f]*$ + type: string + type: object attributionNote: description: |- AttributionNote is the operator's one sentence about what the issued @@ -285,7 +338,6 @@ spec: subresources: status: {} --- ---- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: diff --git a/test/e2e/cluster/room-pass/room-pass.yaml b/test/e2e/cluster/room-pass/room-pass.yaml index 952cbbb..6ddca65 100644 --- a/test/e2e/cluster/room-pass/room-pass.yaml +++ b/test/e2e/cluster/room-pass/room-pass.yaml @@ -1,4 +1,4 @@ -# Room Pass 2.0.0 and the Dex behind it, as Room Pass's own reference deployment +# Room Pass 2.1.0 and the Dex behind it, as Room Pass's own reference deployment # (deploy/base, deploy/dex) has them, with the fixture's names. room-pass.sh fills in # the images, the hosts and the configuration hash, and creates the ConfigMap `dex` and # the Secret `room-pass-cookie`. @@ -134,7 +134,9 @@ spec: targetPort: http --- # Dex as Room Pass's issuer, from deploy/dex: one replica on SQLite, so its signing keys -# outlive a restart of the pod. +# outlive a restart of the pod. Room Pass 2.1.0's deploy/dex keeps that state in +# Kubernetes instead (dex.coreos.com resources, CRDs in deploy/dex-crds); the fixture +# keeps the volume, which needs no CRDs vendored to match the Dex image. apiVersion: v1 kind: PersistentVolumeClaim metadata: diff --git a/test/e2e/room_pass_test.go b/test/e2e/room_pass_test.go index 0eb10c8..e106252 100644 --- a/test/e2e/room_pass_test.go +++ b/test/e2e/room_pass_test.go @@ -28,7 +28,7 @@ import ( ) // Room Pass's QR login through krm-foyer (docs/room-pass.md), in a real browser, against -// Room Pass 2.0.0 and the Dex behind it (test/e2e/cluster/room-pass.sh): a participant +// Room Pass 2.1.0 and the Dex behind it (test/e2e/cluster/room-pass.sh): a participant // scans the code on the presenter's screen, types a display name, and is signed in to // the application through krm-foyer, with Kubernetes naming them as Room Pass's rules // say. Three programs share the application's host, room.localhost: krm-foyer-room,