Browse code

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

Signed-off-by: Daniel Nephin <dnephin@docker.com>

Daniel Nephin authored on 2017/03/07 00:36:52
Showing 3 changed files
... ...
@@ -10,6 +10,7 @@ import (
10 10
 	"github.com/Sirupsen/logrus"
11 11
 	"github.com/docker/docker/pkg/ioutils"
12 12
 	"github.com/opencontainers/go-digest"
13
+	"github.com/pkg/errors"
13 14
 )
14 15
 
15 16
 // DigestWalkFunc is function called by StoreBackend.Walk
... ...
@@ -47,10 +48,10 @@ func newFSStore(root string) (*fs, error) {
47 47
 		root: root,
48 48
 	}
49 49
 	if err := os.MkdirAll(filepath.Join(root, contentDirName, string(digest.Canonical)), 0700); err != nil {
50
-		return nil, err
50
+		return nil, errors.Wrap(err, "failed to create storage backend")
51 51
 	}
52 52
 	if err := os.MkdirAll(filepath.Join(root, metadataDirName, string(digest.Canonical)), 0700); err != nil {
53
-		return nil, err
53
+		return nil, errors.Wrap(err, "failed to create storage backend")
54 54
 	}
55 55
 	return s, nil
56 56
 }
... ...
@@ -96,7 +97,7 @@ func (s *fs) Get(dgst digest.Digest) ([]byte, error) {
96 96
 func (s *fs) get(dgst digest.Digest) ([]byte, error) {
97 97
 	content, err := ioutil.ReadFile(s.contentFile(dgst))
98 98
 	if err != nil {
99
-		return nil, err
99
+		return nil, errors.Wrapf(err, "failed to get digest %s", dgst)
100 100
 	}
101 101
 
102 102
 	// todo: maybe optional
... ...
@@ -118,7 +119,7 @@ func (s *fs) Set(data []byte) (digest.Digest, error) {
118 118
 
119 119
 	dgst := digest.FromBytes(data)
120 120
 	if err := ioutils.AtomicWriteFile(s.contentFile(dgst), data, 0600); err != nil {
121
-		return "", err
121
+		return "", errors.Wrap(err, "failed to write digest data")
122 122
 	}
123 123
 
124 124
 	return dgst, nil
... ...
@@ -161,7 +162,11 @@ func (s *fs) GetMetadata(dgst digest.Digest, key string) ([]byte, error) {
161 161
 	if _, err := s.get(dgst); err != nil {
162 162
 		return nil, err
163 163
 	}
164
-	return ioutil.ReadFile(filepath.Join(s.metadataDir(dgst), key))
164
+	bytes, err := ioutil.ReadFile(filepath.Join(s.metadataDir(dgst), key))
165
+	if err != nil {
166
+		return nil, errors.Wrap(err, "failed to read metadata")
167
+	}
168
+	return bytes, nil
165 169
 }
166 170
 
167 171
 // DeleteMetadata removes the metadata associated with a digest.
... ...
@@ -50,7 +50,7 @@ func TestFSInvalidSet(t *testing.T) {
50 50
 	assert.NilError(t, err)
51 51
 
52 52
 	_, err = store.Set([]byte("foobar"))
53
-	assert.Error(t, err, "is a directory")
53
+	assert.Error(t, err, "failed to write digest data")
54 54
 }
55 55
 
56 56
 func TestFSInvalidRoot(t *testing.T) {
... ...
@@ -73,11 +73,11 @@ func TestFSInvalidRoot(t *testing.T) {
73 73
 		assert.NilError(t, err)
74 74
 
75 75
 		f, err := os.Create(filePath)
76
-		defer f.Close()
77 76
 		assert.NilError(t, err)
77
+		f.Close()
78 78
 
79 79
 		_, err = NewFSStoreBackend(root)
80
-		assert.Error(t, err, "not a directory")
80
+		assert.Error(t, err, "failed to create storage backend")
81 81
 
82 82
 		os.RemoveAll(root)
83 83
 	}
... ...
@@ -117,14 +117,14 @@ func TestFSMetadataGetSet(t *testing.T) {
117 117
 	}
118 118
 
119 119
 	_, err = store.GetMetadata(id2, "tkey2")
120
-	assert.Error(t, err, "no such file or directory")
120
+	assert.Error(t, err, "failed to read metadata")
121 121
 
122 122
 	id3 := digest.FromBytes([]byte("baz"))
123 123
 	err = store.SetMetadata(id3, "tkey", []byte("tval"))
124
-	assert.Error(t, err, "no such file or directory")
124
+	assert.Error(t, err, "failed to get digest")
125 125
 
126 126
 	_, err = store.GetMetadata(id3, "tkey")
127
-	assert.Error(t, err, "no such file or directory")
127
+	assert.Error(t, err, "failed to get digest")
128 128
 }
129 129
 
130 130
 func TestFSInvalidWalker(t *testing.T) {
... ...
@@ -194,7 +194,7 @@ func TestFSGetUnsetKey(t *testing.T) {
194 194
 
195 195
 	for _, key := range []digest.Digest{"foobar:abc", "sha256:abc", "sha256:c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2a"} {
196 196
 		_, err := store.Get(key)
197
-		assert.Error(t, err, "no such file or directory")
197
+		assert.Error(t, err, "failed to get digest")
198 198
 	}
199 199
 }
200 200
 
... ...
@@ -222,7 +222,7 @@ func TestFSDelete(t *testing.T) {
222 222
 	assert.NilError(t, err)
223 223
 
224 224
 	_, err = store.Get(id)
225
-	assert.Error(t, err, "no such file or directory")
225
+	assert.Error(t, err, "failed to get digest")
226 226
 
227 227
 	_, err = store.Get(id2)
228 228
 	assert.NilError(t, err)
... ...
@@ -231,7 +231,7 @@ func TestFSDelete(t *testing.T) {
231 231
 	assert.NilError(t, err)
232 232
 
233 233
 	_, err = store.Get(id2)
234
-	assert.Error(t, err, "no such file or directory")
234
+	assert.Error(t, err, "failed to get digest")
235 235
 }
236 236
 
237 237
 func TestFSWalker(t *testing.T) {
... ...
@@ -40,7 +40,7 @@ func TestRestore(t *testing.T) {
40 40
 	assert.Equal(t, img2.Comment, "def")
41 41
 
42 42
 	p, err := is.GetParent(ID(id1))
43
-	assert.Error(t, err, "no such file")
43
+	assert.Error(t, err, "failed to read metadata")
44 44
 
45 45
 	p, err = is.GetParent(ID(id2))
46 46
 	assert.NilError(t, err)
... ...
@@ -90,13 +90,13 @@ func TestAddDelete(t *testing.T) {
90 90
 	assert.NilError(t, err)
91 91
 
92 92
 	_, err = is.Get(id1)
93
-	assert.Error(t, err, "no such file or directory")
93
+	assert.Error(t, err, "failed to get digest")
94 94
 
95 95
 	_, err = is.Get(id2)
96 96
 	assert.NilError(t, err)
97 97
 
98 98
 	_, err = is.GetParent(id2)
99
-	assert.Error(t, err, "no such file or directory")
99
+	assert.Error(t, err, "failed to read metadata")
100 100
 }
101 101
 
102 102
 func TestSearchAfterDelete(t *testing.T) {