Skip to content

Commit

Permalink
Fix test to workaround docker credstore symlink fault
Browse files Browse the repository at this point in the history
As described in containerd#3413 there seems to be a fault
in docker credentials store that makes relative symlinks resolve to pwd instead of where they are.
This in turn will break our test if the current working directory is read-only (typical with Lima).
This changeset does Chdir to the parent temp directory so we can workaround that problem.

Signed-off-by: apostasie <[email protected]>
  • Loading branch information
apostasie committed Sep 22, 2024
1 parent c333638 commit 7ea6446
Showing 1 changed file with 21 additions and 7 deletions.
28 changes: 21 additions & 7 deletions pkg/imgutil/dockerconfigresolver/credentialsstore_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -168,27 +168,41 @@ func TestBrokenCredentialsStore(t *testing.T) {
},
}

t.Run("Broken Docker Config testing", func(t *testing.T) {
t.Run("Docker Config testing with a variety of filesystem situations", func(t *testing.T) {
// Do NOT parallelize this test, as it relies on Chdir, which would have side effects for other tests.
registryURL, err := Parse("registry")
if err != nil {
t.Fatal(err)
}

for _, tc := range testCases {
t.Run(tc.description, func(t *testing.T) {
for _, testCase := range testCases {
tc := testCase
t.Run(tc.description, func(tt *testing.T) {
// See https://github.com/containerd/nerdctl/issues/3413
var oldpwd string
directory := tc.setup()
cs, err := NewCredentialsStore(directory)
assert.ErrorIs(t, err, tc.errorNew)
oldpwd, err = os.Getwd()
assert.NilError(tt, err)
// Ignore the error, as the destination may not be a directory
_ = os.Chdir(directory)
tt.Cleanup(func() {
err = os.Chdir(oldpwd)
assert.NilError(tt, err)
})

var cs *CredentialsStore
cs, err = NewCredentialsStore(directory)
assert.ErrorIs(tt, err, tc.errorNew)
if err != nil {
return
}

var af *Credentials
af, err = cs.Retrieve(registryURL, true)
assert.ErrorIs(t, err, tc.errorRead)
assert.ErrorIs(tt, err, tc.errorRead)

err = cs.Store(registryURL, af)
assert.ErrorIs(t, err, tc.errorWrite)
assert.ErrorIs(tt, err, tc.errorWrite)
})
}
})
Expand Down

0 comments on commit 7ea6446

Please sign in to comment.