Wrap errors in digest package so they are consistent between platforms.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
This commit is contained in:
Daniel Nephin 2017-03-06 10:36:52 -05:00
parent 69d7362058
commit 7abeb08a8c
3 changed files with 22 additions and 17 deletions

View File

@ -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.

View File

@ -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) {

View File

@ -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) {