fix: align in-memory authentication semantics
This commit is contained in:
@@ -10,6 +10,7 @@ import (
|
||||
"path/filepath"
|
||||
"reflect"
|
||||
"strings"
|
||||
"sync"
|
||||
"testing"
|
||||
)
|
||||
|
||||
@@ -47,6 +48,31 @@ func TestNewClientWithAuthDataRejectsPartialData(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestNewClientWithAuthDataGeneratesMissingIdentityWithoutMutatingInput(t *testing.T) {
|
||||
input := completeAuthData()
|
||||
input.DeviceID = ""
|
||||
input.PassO = ""
|
||||
|
||||
client, err := NewClientWithAuthData(input)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if input.DeviceID != "" || input.PassO != "" {
|
||||
t.Fatalf("caller auth data mutated: %#v", input)
|
||||
}
|
||||
stored := client.AuthData()
|
||||
if stored.DeviceID == "" || stored.PassO == "" {
|
||||
t.Fatalf("stored identity not generated: %#v", stored)
|
||||
}
|
||||
}
|
||||
|
||||
func TestWithAuthDataChangedRejectsNil(t *testing.T) {
|
||||
_, err := NewClientWithAuthData(AuthData{}, WithAuthDataChanged(nil))
|
||||
if err == nil || !strings.Contains(err.Error(), "must not be nil") {
|
||||
t.Fatalf("error = %v, want nil callback error", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNewClientWithAuthDataDoesNotAccessFilesystem(t *testing.T) {
|
||||
home := filepath.Join(t.TempDir(), "must-not-exist")
|
||||
t.Setenv("HOME", home)
|
||||
@@ -110,6 +136,43 @@ func TestMemoryRefreshCallbackCanReadCurrentAuth(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestMemoryRefreshCallbackCanAcquireApplicationLock(t *testing.T) {
|
||||
var persistenceMu sync.Mutex
|
||||
client, _, server := newMemoryRefreshClient(t, func(AuthData) error {
|
||||
persistenceMu.Lock()
|
||||
defer persistenceMu.Unlock()
|
||||
return nil
|
||||
})
|
||||
defer server.Close()
|
||||
|
||||
if err := client.refreshToken(context.Background()); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMemoryRefreshPersistsGeneratedIdentity(t *testing.T) {
|
||||
initial := completeAuthData()
|
||||
initial.DeviceID = ""
|
||||
initial.PassO = ""
|
||||
var changed AuthData
|
||||
client, err := NewClientWithAuthData(initial, WithAuthDataChanged(func(authData AuthData) error {
|
||||
changed = authData.clone()
|
||||
return nil
|
||||
}))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
server := configureRefreshServer(t, client)
|
||||
defer server.Close()
|
||||
|
||||
if err := client.refreshToken(context.Background()); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if changed.DeviceID == "" || changed.PassO == "" {
|
||||
t.Fatalf("persisted identity not generated: %#v", changed)
|
||||
}
|
||||
}
|
||||
|
||||
func TestFreshMemoryClientQRLoginPersistsThroughCallback(t *testing.T) {
|
||||
var changed AuthData
|
||||
var server *httptest.Server
|
||||
|
||||
Reference in New Issue
Block a user