Skip to content
This repository was archived by the owner on Apr 7, 2024. It is now read-only.

Commit bf5244c

Browse files
authored
refactor!: rename DetectDefaultCredsStore to DetectDefaultNativeStore (#75)
**BREAKING CHANGE**: `StoreOptions.DetectDefaultCredsStore` is renamed to `StoreOptions.DetectDefaultNativeStore` --------- Signed-off-by: Sylvia Lei <lixlei@microsoft.com>
1 parent b60b11b commit bf5244c

File tree

2 files changed

+106
-20
lines changed

2 files changed

+106
-20
lines changed

store.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -61,27 +61,27 @@ type StoreOptions struct {
6161
// plaintext in the config file when native store is not available.
6262
AllowPlaintextPut bool
6363

64-
// DetectDefaultCredsStore enables detecting the platform-default
64+
// DetectDefaultNativeStore enables detecting the platform-default native
6565
// credentials store when the config file has no authentication information.
6666
//
67-
// If DetectDefaultCredsStore is set to true, the store will detect and set
68-
// the default credentials store in the "credsStore" field of the config
69-
// file.
67+
// If DetectDefaultNativeStore is set to true, the store will detect and set
68+
// the default native credentials store in the "credsStore" field of the
69+
// config file.
7070
// - Windows: "wincred"
7171
// - Linux: "pass" or "secretservice"
7272
// - macOS: "osxkeychain"
7373
//
7474
// References:
7575
// - https://docs.docker.com/engine/reference/commandline/login/#credentials-store
7676
// - https://docs.docker.com/engine/reference/commandline/cli/#docker-cli-configuration-file-configjson-properties
77-
DetectDefaultCredsStore bool
77+
DetectDefaultNativeStore bool
7878
}
7979

8080
// NewStore returns a Store based on the given configuration file.
8181
//
8282
// For Get(), Put() and Delete(), the returned Store will dynamically determine
8383
// which underlying credentials store to use for the given server address.
84-
// The underlying credentials store is determined in the following order:
84+
// The underlying credentials store is determined in the following order:
8585
// 1. Native server-specific credential helper
8686
// 2. Native credentials store
8787
// 3. The plain-text config file itself
@@ -98,7 +98,7 @@ func NewStore(configPath string, opts StoreOptions) (*DynamicStore, error) {
9898
config: cfg,
9999
options: opts,
100100
}
101-
if opts.DetectDefaultCredsStore && !cfg.IsAuthConfigured() {
101+
if opts.DetectDefaultNativeStore && !cfg.IsAuthConfigured() {
102102
// no authentication configured, detect the default credentials store
103103
ds.detectedCredsStore = getDefaultHelperSuffix()
104104
}

store_test.go

+99-13
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,90 @@ func Test_DynamicStore_authConfigured(t *testing.T) {
217217
if err := ds.Put(ctx, serverAddr, cred); err != nil {
218218
t.Fatal("DynamicStore.Get() error =", err)
219219
}
220+
// Put() should not set detected store back to config
221+
if got := ds.detectedCredsStore; got != "" {
222+
t.Errorf("ds.detectedCredsStore = %v, want empty", got)
223+
}
224+
if got := ds.config.CredentialsStore(); got != "" {
225+
t.Errorf("ds.config.CredentialsStore() = %v, want empty", got)
226+
}
227+
228+
// test get
229+
got, err := ds.Get(ctx, serverAddr)
230+
if err != nil {
231+
t.Fatal("DynamicStore.Get() error =", err)
232+
}
233+
if want := cred; got != want {
234+
t.Errorf("DynamicStore.Get() = %v, want %v", got, want)
235+
}
236+
237+
// test delete
238+
err = ds.Delete(ctx, serverAddr)
239+
if err != nil {
240+
t.Fatal("DynamicStore.Delete() error =", err)
241+
}
242+
243+
// verify delete
244+
got, err = ds.Get(ctx, serverAddr)
245+
if err != nil {
246+
t.Fatal("DynamicStore.Get() error =", err)
247+
}
248+
if want := auth.EmptyCredential; got != want {
249+
t.Errorf("DynamicStore.Get() = %v, want %v", got, want)
250+
}
251+
}
252+
253+
func Test_DynamicStore_authConfigured_DetectDefaultNativeStore(t *testing.T) {
254+
// prepare test content
255+
tempDir := t.TempDir()
256+
configPath := filepath.Join(tempDir, "auth_configured.json")
257+
config := configtest.Config{
258+
AuthConfigs: map[string]configtest.AuthConfig{
259+
"xxx": {},
260+
},
261+
SomeConfigField: 123,
262+
}
263+
jsonStr, err := json.Marshal(config)
264+
if err != nil {
265+
t.Fatalf("failed to marshal config: %v", err)
266+
}
267+
if err := os.WriteFile(configPath, jsonStr, 0666); err != nil {
268+
t.Fatalf("failed to write config file: %v", err)
269+
}
270+
271+
opts := StoreOptions{
272+
AllowPlaintextPut: true,
273+
DetectDefaultNativeStore: true,
274+
}
275+
ds, err := NewStore(configPath, opts)
276+
if err != nil {
277+
t.Fatal("NewStore() error =", err)
278+
}
279+
280+
// test IsAuthConfigured
281+
authConfigured := ds.IsAuthConfigured()
282+
if want := true; authConfigured != want {
283+
t.Errorf("DynamicStore.IsAuthConfigured() = %v, want %v", authConfigured, want)
284+
}
285+
286+
serverAddr := "test.example.com"
287+
cred := auth.Credential{
288+
Username: "username",
289+
Password: "password",
290+
}
291+
ctx := context.Background()
292+
293+
// test put
294+
if err := ds.Put(ctx, serverAddr, cred); err != nil {
295+
t.Fatal("DynamicStore.Get() error =", err)
296+
}
297+
// Put() should not set detected store back to config
298+
if got := ds.detectedCredsStore; got != "" {
299+
t.Errorf("ds.detectedCredsStore = %v, want empty", got)
300+
}
301+
if got := ds.config.CredentialsStore(); got != "" {
302+
t.Errorf("ds.config.CredentialsStore() = %v, want empty", got)
303+
}
220304

221305
// test get
222306
got, err := ds.Get(ctx, serverAddr)
@@ -280,16 +364,15 @@ func Test_DynamicStore_noAuthConfigured(t *testing.T) {
280364
if _, err := ds.Get(ctx, serverAddr); err != nil {
281365
t.Fatal("DynamicStore.Get() error =", err)
282366
}
283-
if got := ds.config.CredentialsStore(); got != "" {
284-
t.Errorf("ds.config.CredentialsStore() = %v, want empty", got)
285-
}
286367

287368
// test put
288369
if err := ds.Put(ctx, serverAddr, cred); err != nil {
289370
t.Fatal("DynamicStore.Put() error =", err)
290371
}
291-
292372
// Put() should not set detected store back to config
373+
if got := ds.detectedCredsStore; got != "" {
374+
t.Errorf("ds.detectedCredsStore = %v, want empty", got)
375+
}
293376
if got := ds.config.CredentialsStore(); got != "" {
294377
t.Errorf("ds.config.CredentialsStore() = %v, want empty", got)
295378
}
@@ -319,7 +402,7 @@ func Test_DynamicStore_noAuthConfigured(t *testing.T) {
319402
}
320403
}
321404

322-
func Test_DynamicStore_noAuthConfigured_DetectDefaultStore(t *testing.T) {
405+
func Test_DynamicStore_noAuthConfigured_DetectDefaultNativeStore(t *testing.T) {
323406
// prepare test content
324407
tempDir := t.TempDir()
325408
configPath := filepath.Join(tempDir, "no_auth_configured.json")
@@ -335,8 +418,8 @@ func Test_DynamicStore_noAuthConfigured_DetectDefaultStore(t *testing.T) {
335418
}
336419

337420
opts := StoreOptions{
338-
AllowPlaintextPut: true,
339-
DetectDefaultCredsStore: true,
421+
AllowPlaintextPut: true,
422+
DetectDefaultNativeStore: true,
340423
}
341424
ds, err := NewStore(configPath, opts)
342425
if err != nil {
@@ -356,10 +439,15 @@ func Test_DynamicStore_noAuthConfigured_DetectDefaultStore(t *testing.T) {
356439
}
357440
ctx := context.Background()
358441

359-
// Get() should not set detected store back to config
442+
// Get() should set detectedCredsStore only, but should not save it back to config
360443
if _, err := ds.Get(ctx, serverAddr); err != nil {
361444
t.Fatal("DynamicStore.Get() error =", err)
362445
}
446+
if defaultStore := getDefaultHelperSuffix(); defaultStore != "" {
447+
if got := ds.detectedCredsStore; got != defaultStore {
448+
t.Errorf("ds.detectedCredsStore = %v, want %v", got, defaultStore)
449+
}
450+
}
363451
if got := ds.config.CredentialsStore(); got != "" {
364452
t.Errorf("ds.config.CredentialsStore() = %v, want empty", got)
365453
}
@@ -369,11 +457,9 @@ func Test_DynamicStore_noAuthConfigured_DetectDefaultStore(t *testing.T) {
369457
t.Fatal("DynamicStore.Put() error =", err)
370458
}
371459

372-
// Put() should set detected store back to config
373-
if defaultStore := getDefaultHelperSuffix(); defaultStore != "" {
374-
if got := ds.config.CredentialsStore(); got != defaultStore {
375-
t.Errorf("ds.config.CredentialsStore() = %v, want %v", got, defaultStore)
376-
}
460+
// Put() should set the detected store back to config
461+
if got := ds.config.CredentialsStore(); got != ds.detectedCredsStore {
462+
t.Errorf("ds.config.CredentialsStore() = %v, want %v", got, ds.detectedCredsStore)
377463
}
378464

379465
// test get

0 commit comments

Comments
 (0)