diff options
| author | Simen A. W. Olsen <hello@simenandre.no> | 2026-11-03 22:08:49 +0100 |
|---|---|---|
| committer | Simen A. W. Olsen <hello@simenandre.no> | 2026-11-03 22:08:49 +0100 |
| commit | bef3ccf4521d4ed431f3cdfc66e618c619ce28e4 (patch) | |
| tree | ef8e6ff90fed4b27d4f2cfd082106f2efdb38ca5 /fikenauth/source_test.go | |
| parent | a5491c9dccdf4678bf3b4380d208cf2562afeee4 (diff) | |
| download | fiken-0.4.0.tar.gz fiken-0.4.0.zip | |
fikenconfig keeps an OAuth app and a grant per account in ~/.config/fiken, and finds the account that reaches a company. Renewing a grant takes a lock, so programs sharing it take turns.
Diffstat (limited to 'fikenauth/source_test.go')
| -rw-r--r-- | fikenauth/source_test.go | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/fikenauth/source_test.go b/fikenauth/source_test.go index 1c960d6..24147e0 100644 --- a/fikenauth/source_test.go +++ b/fikenauth/source_test.go @@ -170,3 +170,34 @@ func TestLogoutWithoutATokenIsNoToken(t *testing.T) { t.Errorf("err = %v, want ErrNoToken", err) } } + +// Two programs sharing one grant: the second to find it expired must use what +// the first saved, because refresh-1 died when the first one renewed it. +func TestSourceRereadsAGrantAnotherProgramRenewed(t *testing.T) { + server := newAuthServer(t) + server.refreshOut = `{"access_token":"access-2","refresh_token":"refresh-2","expires_in":3600}` + store := tempStore(t) + if err := store.Save(Token{ + AccessToken: "expired", RefreshToken: "refresh-1", + ExpiresAt: fixedNow.Add(-time.Hour), + }); err != nil { + t.Fatal(err) + } + + late := NewSource(server.config(), NewStore(store.Path())) + if _, err := late.Current(); err != nil { + t.Fatal(err) + } + if _, err := NewSource(server.config(), store).Token(t.Context()); err != nil { + t.Fatalf("first program: %v", err) + } + + server.gotForm = nil + got, err := late.Token(t.Context()) + if err != nil { + t.Fatalf("second program: %v", err) + } + if got != "access-2" || server.gotForm != nil { + t.Errorf("Token = %q, refreshed again: %v; want the first program's grant", got, server.gotForm != nil) + } +} |
