Skip to content

Commit e426c15

Browse files
committed
cli/config/configfile: Add some test cases for saving the config.
Signed-off-by: Benoit Sigoure <tsunanet@gmail.com>
1 parent 6bb039d commit e426c15

1 file changed

Lines changed: 35 additions & 4 deletions

File tree

cli/config/configfile/file_test.go

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"fmt"
55
"io/ioutil"
66
"os"
7+
"path/filepath"
78
"testing"
89

910
"github.com/docker/cli/cli/config/credentials"
@@ -417,11 +418,41 @@ func TestCheckKubernetesConfigurationRaiseAnErrorOnInvalidValue(t *testing.T) {
417418
}
418419

419420
func TestSave(t *testing.T) {
420-
configFile := New("test-save")
421-
defer os.Remove("test-save")
422-
err := configFile.Save()
421+
err := New("").Save()
422+
assert.ErrorContains(t, err, "empty filename")
423+
424+
configDir, err := ioutil.TempDir(".", "test-save")
425+
assert.NilError(t, err)
426+
defer os.RemoveAll(configDir)
427+
defer os.Chmod(configDir, 0700)
428+
429+
// MkdirAll fails due to the parent directory being read-only.
430+
err = os.Chmod(configDir, 0500) // read-only
431+
assert.NilError(t, err)
432+
configFile := New(filepath.Join(configDir, "foo", "test-save"))
433+
err = configFile.Save()
434+
assert.Check(t, os.IsPermission(err))
435+
436+
// Successfully write an empty config.
437+
err = os.Chmod(configDir, 0700) // writeable again
423438
assert.NilError(t, err)
424-
cfg, err := ioutil.ReadFile("test-save")
439+
configFile = New(filepath.Join(configDir, "test-save"))
440+
err = configFile.Save()
441+
assert.NilError(t, err)
442+
cfg, err := ioutil.ReadFile(configFile.Filename)
425443
assert.NilError(t, err)
426444
assert.Check(t, is.Equal(string(cfg), "{\n \"auths\": {}\n}"))
445+
446+
// Create a permission denied error on the parent directory.
447+
err = os.Chmod(configDir, 0500) // read-only
448+
assert.NilError(t, err)
449+
err = configFile.Save()
450+
assert.Check(t, os.IsPermission(err))
451+
452+
// Ensure we didn't leave anything temp file behind in our configDir and
453+
// still only have "test-save" in there.
454+
files, err := ioutil.ReadDir(configDir)
455+
assert.NilError(t, err)
456+
assert.Check(t, is.Equal(len(files), 1))
457+
assert.Check(t, is.Equal(files[0].Name(), "test-save"))
427458
}

0 commit comments

Comments
 (0)