|
4 | 4 | "fmt" |
5 | 5 | "io/ioutil" |
6 | 6 | "os" |
| 7 | + "path/filepath" |
7 | 8 | "testing" |
8 | 9 |
|
9 | 10 | "github.com/docker/cli/cli/config/credentials" |
@@ -417,11 +418,41 @@ func TestCheckKubernetesConfigurationRaiseAnErrorOnInvalidValue(t *testing.T) { |
417 | 418 | } |
418 | 419 |
|
419 | 420 | 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 |
423 | 438 | 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) |
425 | 443 | assert.NilError(t, err) |
426 | 444 | 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")) |
427 | 458 | } |
0 commit comments