Wrap errors in digest package so they are consistent between platforms.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
This commit is contained in:
parent
69d7362058
commit
7abeb08a8c
3 changed files with 22 additions and 17 deletions
15
image/fs.go
15
image/fs.go
|
@ -10,6 +10,7 @@ import (
|
|||
"github.com/Sirupsen/logrus"
|
||||
"github.com/docker/docker/pkg/ioutils"
|
||||
"github.com/opencontainers/go-digest"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
// DigestWalkFunc is function called by StoreBackend.Walk
|
||||
|
@ -47,10 +48,10 @@ func newFSStore(root string) (*fs, error) {
|
|||
root: root,
|
||||
}
|
||||
if err := os.MkdirAll(filepath.Join(root, contentDirName, string(digest.Canonical)), 0700); err != nil {
|
||||
return nil, err
|
||||
return nil, errors.Wrap(err, "failed to create storage backend")
|
||||
}
|
||||
if err := os.MkdirAll(filepath.Join(root, metadataDirName, string(digest.Canonical)), 0700); err != nil {
|
||||
return nil, err
|
||||
return nil, errors.Wrap(err, "failed to create storage backend")
|
||||
}
|
||||
return s, nil
|
||||
}
|
||||
|
@ -96,7 +97,7 @@ func (s *fs) Get(dgst digest.Digest) ([]byte, error) {
|
|||
func (s *fs) get(dgst digest.Digest) ([]byte, error) {
|
||||
content, err := ioutil.ReadFile(s.contentFile(dgst))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, errors.Wrapf(err, "failed to get digest %s", dgst)
|
||||
}
|
||||
|
||||
// todo: maybe optional
|
||||
|
@ -118,7 +119,7 @@ func (s *fs) Set(data []byte) (digest.Digest, error) {
|
|||
|
||||
dgst := digest.FromBytes(data)
|
||||
if err := ioutils.AtomicWriteFile(s.contentFile(dgst), data, 0600); err != nil {
|
||||
return "", err
|
||||
return "", errors.Wrap(err, "failed to write digest data")
|
||||
}
|
||||
|
||||
return dgst, nil
|
||||
|
@ -161,7 +162,11 @@ func (s *fs) GetMetadata(dgst digest.Digest, key string) ([]byte, error) {
|
|||
if _, err := s.get(dgst); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return ioutil.ReadFile(filepath.Join(s.metadataDir(dgst), key))
|
||||
bytes, err := ioutil.ReadFile(filepath.Join(s.metadataDir(dgst), key))
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "failed to read metadata")
|
||||
}
|
||||
return bytes, nil
|
||||
}
|
||||
|
||||
// DeleteMetadata removes the metadata associated with a digest.
|
||||
|
|
|
@ -50,7 +50,7 @@ func TestFSInvalidSet(t *testing.T) {
|
|||
assert.NilError(t, err)
|
||||
|
||||
_, err = store.Set([]byte("foobar"))
|
||||
assert.Error(t, err, "is a directory")
|
||||
assert.Error(t, err, "failed to write digest data")
|
||||
}
|
||||
|
||||
func TestFSInvalidRoot(t *testing.T) {
|
||||
|
@ -73,11 +73,11 @@ func TestFSInvalidRoot(t *testing.T) {
|
|||
assert.NilError(t, err)
|
||||
|
||||
f, err := os.Create(filePath)
|
||||
defer f.Close()
|
||||
assert.NilError(t, err)
|
||||
f.Close()
|
||||
|
||||
_, err = NewFSStoreBackend(root)
|
||||
assert.Error(t, err, "not a directory")
|
||||
assert.Error(t, err, "failed to create storage backend")
|
||||
|
||||
os.RemoveAll(root)
|
||||
}
|
||||
|
@ -117,14 +117,14 @@ func TestFSMetadataGetSet(t *testing.T) {
|
|||
}
|
||||
|
||||
_, err = store.GetMetadata(id2, "tkey2")
|
||||
assert.Error(t, err, "no such file or directory")
|
||||
assert.Error(t, err, "failed to read metadata")
|
||||
|
||||
id3 := digest.FromBytes([]byte("baz"))
|
||||
err = store.SetMetadata(id3, "tkey", []byte("tval"))
|
||||
assert.Error(t, err, "no such file or directory")
|
||||
assert.Error(t, err, "failed to get digest")
|
||||
|
||||
_, err = store.GetMetadata(id3, "tkey")
|
||||
assert.Error(t, err, "no such file or directory")
|
||||
assert.Error(t, err, "failed to get digest")
|
||||
}
|
||||
|
||||
func TestFSInvalidWalker(t *testing.T) {
|
||||
|
@ -194,7 +194,7 @@ func TestFSGetUnsetKey(t *testing.T) {
|
|||
|
||||
for _, key := range []digest.Digest{"foobar:abc", "sha256:abc", "sha256:c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2a"} {
|
||||
_, err := store.Get(key)
|
||||
assert.Error(t, err, "no such file or directory")
|
||||
assert.Error(t, err, "failed to get digest")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -222,7 +222,7 @@ func TestFSDelete(t *testing.T) {
|
|||
assert.NilError(t, err)
|
||||
|
||||
_, err = store.Get(id)
|
||||
assert.Error(t, err, "no such file or directory")
|
||||
assert.Error(t, err, "failed to get digest")
|
||||
|
||||
_, err = store.Get(id2)
|
||||
assert.NilError(t, err)
|
||||
|
@ -231,7 +231,7 @@ func TestFSDelete(t *testing.T) {
|
|||
assert.NilError(t, err)
|
||||
|
||||
_, err = store.Get(id2)
|
||||
assert.Error(t, err, "no such file or directory")
|
||||
assert.Error(t, err, "failed to get digest")
|
||||
}
|
||||
|
||||
func TestFSWalker(t *testing.T) {
|
||||
|
|
|
@ -40,7 +40,7 @@ func TestRestore(t *testing.T) {
|
|||
assert.Equal(t, img2.Comment, "def")
|
||||
|
||||
p, err := is.GetParent(ID(id1))
|
||||
assert.Error(t, err, "no such file")
|
||||
assert.Error(t, err, "failed to read metadata")
|
||||
|
||||
p, err = is.GetParent(ID(id2))
|
||||
assert.NilError(t, err)
|
||||
|
@ -90,13 +90,13 @@ func TestAddDelete(t *testing.T) {
|
|||
assert.NilError(t, err)
|
||||
|
||||
_, err = is.Get(id1)
|
||||
assert.Error(t, err, "no such file or directory")
|
||||
assert.Error(t, err, "failed to get digest")
|
||||
|
||||
_, err = is.Get(id2)
|
||||
assert.NilError(t, err)
|
||||
|
||||
_, err = is.GetParent(id2)
|
||||
assert.Error(t, err, "no such file or directory")
|
||||
assert.Error(t, err, "failed to read metadata")
|
||||
}
|
||||
|
||||
func TestSearchAfterDelete(t *testing.T) {
|
||||
|
|
Loading…
Add table
Reference in a new issue