Sfoglia il codice sorgente

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

Signed-off-by: Daniel Nephin <dnephin@docker.com>
Daniel Nephin 8 anni fa
parent
commit
7abeb08a8c
3 ha cambiato i file con 22 aggiunte e 17 eliminazioni
  1. 10 5
      image/fs.go
  2. 9 9
      image/fs_test.go
  3. 3 3
      image/store_test.go

+ 10 - 5
image/fs.go

@@ -10,6 +10,7 @@ import (
 	"github.com/Sirupsen/logrus"
 	"github.com/Sirupsen/logrus"
 	"github.com/docker/docker/pkg/ioutils"
 	"github.com/docker/docker/pkg/ioutils"
 	"github.com/opencontainers/go-digest"
 	"github.com/opencontainers/go-digest"
+	"github.com/pkg/errors"
 )
 )
 
 
 // DigestWalkFunc is function called by StoreBackend.Walk
 // DigestWalkFunc is function called by StoreBackend.Walk
@@ -47,10 +48,10 @@ func newFSStore(root string) (*fs, error) {
 		root: root,
 		root: root,
 	}
 	}
 	if err := os.MkdirAll(filepath.Join(root, contentDirName, string(digest.Canonical)), 0700); err != nil {
 	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 {
 	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
 	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) {
 func (s *fs) get(dgst digest.Digest) ([]byte, error) {
 	content, err := ioutil.ReadFile(s.contentFile(dgst))
 	content, err := ioutil.ReadFile(s.contentFile(dgst))
 	if err != nil {
 	if err != nil {
-		return nil, err
+		return nil, errors.Wrapf(err, "failed to get digest %s", dgst)
 	}
 	}
 
 
 	// todo: maybe optional
 	// todo: maybe optional
@@ -118,7 +119,7 @@ func (s *fs) Set(data []byte) (digest.Digest, error) {
 
 
 	dgst := digest.FromBytes(data)
 	dgst := digest.FromBytes(data)
 	if err := ioutils.AtomicWriteFile(s.contentFile(dgst), data, 0600); err != nil {
 	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
 	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 {
 	if _, err := s.get(dgst); err != nil {
 		return nil, err
 		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.
 // DeleteMetadata removes the metadata associated with a digest.

+ 9 - 9
image/fs_test.go

@@ -50,7 +50,7 @@ func TestFSInvalidSet(t *testing.T) {
 	assert.NilError(t, err)
 	assert.NilError(t, err)
 
 
 	_, err = store.Set([]byte("foobar"))
 	_, 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) {
 func TestFSInvalidRoot(t *testing.T) {
@@ -73,11 +73,11 @@ func TestFSInvalidRoot(t *testing.T) {
 		assert.NilError(t, err)
 		assert.NilError(t, err)
 
 
 		f, err := os.Create(filePath)
 		f, err := os.Create(filePath)
-		defer f.Close()
 		assert.NilError(t, err)
 		assert.NilError(t, err)
+		f.Close()
 
 
 		_, err = NewFSStoreBackend(root)
 		_, err = NewFSStoreBackend(root)
-		assert.Error(t, err, "not a directory")
+		assert.Error(t, err, "failed to create storage backend")
 
 
 		os.RemoveAll(root)
 		os.RemoveAll(root)
 	}
 	}
@@ -117,14 +117,14 @@ func TestFSMetadataGetSet(t *testing.T) {
 	}
 	}
 
 
 	_, err = store.GetMetadata(id2, "tkey2")
 	_, 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"))
 	id3 := digest.FromBytes([]byte("baz"))
 	err = store.SetMetadata(id3, "tkey", []byte("tval"))
 	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")
 	_, 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) {
 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"} {
 	for _, key := range []digest.Digest{"foobar:abc", "sha256:abc", "sha256:c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2a"} {
 		_, err := store.Get(key)
 		_, 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)
 	assert.NilError(t, err)
 
 
 	_, err = store.Get(id)
 	_, 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)
 	_, err = store.Get(id2)
 	assert.NilError(t, err)
 	assert.NilError(t, err)
@@ -231,7 +231,7 @@ func TestFSDelete(t *testing.T) {
 	assert.NilError(t, err)
 	assert.NilError(t, err)
 
 
 	_, err = store.Get(id2)
 	_, 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) {
 func TestFSWalker(t *testing.T) {

+ 3 - 3
image/store_test.go

@@ -40,7 +40,7 @@ func TestRestore(t *testing.T) {
 	assert.Equal(t, img2.Comment, "def")
 	assert.Equal(t, img2.Comment, "def")
 
 
 	p, err := is.GetParent(ID(id1))
 	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))
 	p, err = is.GetParent(ID(id2))
 	assert.NilError(t, err)
 	assert.NilError(t, err)
@@ -90,13 +90,13 @@ func TestAddDelete(t *testing.T) {
 	assert.NilError(t, err)
 	assert.NilError(t, err)
 
 
 	_, err = is.Get(id1)
 	_, 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)
 	_, err = is.Get(id2)
 	assert.NilError(t, err)
 	assert.NilError(t, err)
 
 
 	_, err = is.GetParent(id2)
 	_, 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) {
 func TestSearchAfterDelete(t *testing.T) {