| index b7b2e81..1f10c94 100644 |
| --- a/internal/meet/home_router_test.go |
| +++ b/internal/meet/home_router_test.go |
| @@ -267,3 +267,37 @@ func TestHomePublicJoinResolvesExistingMember(t *testing.T) { |
| t.Fatal("removed Home member acquired grant", n) |
| } |
| } |
| +func TestHomeRemovedMemberSigninIsRefusedWithoutServiceError(t *testing.T) { |
| + f := newHomeRouterFixture(t) |
| + f.link(t) |
| + homeRedirect(t, f.do("POST", "/signout", "")) |
| + f.app.cfg.allow = allowlist{} |
| + start := homeRedirect(t, f.do("GET", "/signin", "")) |
| + if w := f.exchange(t, start, "opaque-home-alice"); w.Code != 403 { |
| + t.Fatal("removed member should be unknown, not unavailable", w.Code) |
| + } |
| +} |
| +func TestHomeLookupDatabaseFailureKeepsSession(t *testing.T) { |
| + f := newHomeRouterFixture(t) |
| + f.link(t) |
| + var before int |
| + f.app.db.Writer().QueryRow("SELECT count(*) FROM sessions").Scan(&before) |
| + if _, err := f.app.db.Writer().Exec("ALTER TABLE persons RENAME TO temporarily_unavailable_persons"); err != nil { |
| + t.Fatal(err) |
| + } |
| + w := f.do("GET", "/", "") |
| + if w.Code == 200 { |
| + t.Fatal("database failure admitted") |
| + } |
| + var after int |
| + f.app.db.Writer().QueryRow("SELECT count(*) FROM sessions").Scan(&after) |
| + if before != after { |
| + t.Fatal("transient lookup failure revoked session") |
| + } |
| + if _, err := f.app.db.Writer().Exec("ALTER TABLE temporarily_unavailable_persons RENAME TO persons"); err != nil { |
| + t.Fatal(err) |
| + } |
| + if w = f.do("GET", "/", ""); w.Code != 200 { |
| + t.Fatal("recovered lookup did not preserve session", w.Code) |
| + } |
| +} |