Skip to content

Commit 14baaa5

Browse files
tsunathaJeztah
authored andcommitted
cli/config/configfile: Add some test cases for saving the config.
Signed-off-by: Benoit Sigoure <tsunanet@gmail.com> Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
1 parent 98f1464 commit 14baaa5

1 file changed

Lines changed: 36 additions & 4 deletions

File tree

cli/config/configfile/file_test.go

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"encoding/json"
66
"errors"
77
"os"
8+
"path/filepath"
89
"testing"
910

1011
"github.com/docker/cli/cli/config/credentials"
@@ -609,15 +610,46 @@ func TestParseEnvConfig(t *testing.T) {
609610
}
610611

611612
func TestSave(t *testing.T) {
612-
configFile := New("test-save")
613-
defer os.Remove("test-save")
614-
err := configFile.Save()
613+
err := New("").Save()
614+
assert.ErrorContains(t, err, "empty filename")
615+
616+
configDir := t.TempDir()
617+
618+
// MkdirAll fails due to the parent directory being read-only.
619+
err = os.Chmod(configDir, 0o500) // read-only
615620
assert.NilError(t, err)
616-
cfg, err := os.ReadFile("test-save")
621+
t.Cleanup(func() {
622+
_ = os.Chmod(configDir, 0o755)
623+
})
624+
625+
configFile := New(filepath.Join(configDir, "foo", "test-save"))
626+
err = configFile.Save()
627+
assert.Check(t, os.IsPermission(err))
628+
629+
// Successfully write an empty config.
630+
err = os.Chmod(configDir, 0o700) // writeable again
631+
assert.NilError(t, err)
632+
configFile = New(filepath.Join(configDir, "test-save"))
633+
err = configFile.Save()
634+
assert.NilError(t, err)
635+
cfg, err := os.ReadFile(configFile.Filename)
617636
assert.NilError(t, err)
618637
assert.Equal(t, string(cfg), `{
619638
"auths": {}
620639
}`)
640+
641+
// Create a permission denied error on the parent directory.
642+
err = os.Chmod(configDir, 0o500) // read-only
643+
assert.NilError(t, err)
644+
err = configFile.Save()
645+
assert.Check(t, os.IsPermission(err))
646+
647+
// Ensure we didn't leave anything temp file behind in our configDir and
648+
// still only have "test-save" in there.
649+
files, err := os.ReadDir(configDir)
650+
assert.NilError(t, err)
651+
assert.Check(t, is.Equal(len(files), 1))
652+
assert.Check(t, is.Equal(files[0].Name(), "test-save"))
621653
}
622654

623655
func TestSaveCustomHTTPHeaders(t *testing.T) {

0 commit comments

Comments
 (0)