aboutsummaryrefslogtreecommitdiffstats
path: root/fikenauth/source_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'fikenauth/source_test.go')
-rw-r--r--fikenauth/source_test.go31
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)
+ }
+}