content: break up into multiple files

Break up the content store prototype into a few logical files. We have a
file for the store, the writer and helpers.

Also, the writer has been modified to remove write and exec permissions
on blobs in the store.

Signed-off-by: Stephen J Day <stephen.day@docker.com>
This commit is contained in:
Stephen J Day 2016-11-03 17:02:34 -07:00
parent efed5a918e
commit 3469905bbb
No known key found for this signature in database
GPG key ID: FB5F6B2905D7ECF3
4 changed files with 168 additions and 107 deletions

View file

@ -4,6 +4,7 @@ import (
"bufio"
"bytes"
"crypto/rand"
_ "crypto/sha256" // required for digest package
"fmt"
"io"
"io/ioutil"
@ -73,13 +74,7 @@ func TestContentWriter(t *testing.T) {
t.Fatal(err)
}
path, err := cs.GetPath(expected)
if err != nil {
t.Fatal(err)
}
if path != filepath.Join(tmpdir, "blobs", expected.Algorithm().String(), expected.Hex()) {
t.Fatalf("unxpected path: %q", path)
}
path := checkBlobPath(t, cs, expected)
// read the data back, make sure its the same
pp, err := ioutil.ReadFile(path)
@ -105,6 +100,27 @@ func checkCopy(t *testing.T, size int64, dst io.Writer, src io.Reader) {
}
}
func checkBlobPath(t *testing.T, cs *ContentStore, dgst digest.Digest) string {
path, err := cs.GetPath(dgst)
if err != nil {
t.Fatal(err)
}
if path != filepath.Join(cs.root, "blobs", dgst.Algorithm().String(), dgst.Hex()) {
t.Fatalf("unxpected path: %q", path)
}
fi, err := os.Stat(path)
if err != nil {
t.Fatalf("error stating blob path: %v", err)
}
// ensure that only read bits are set.
if ((fi.Mode() & os.ModePerm) & 0333) != 0 {
t.Fatalf("incorrect permissions: %v", fi.Mode())
}
return path
}
func dumpDir(root string) error {
return filepath.Walk(root, func(path string, fi os.FileInfo, err error) error {
if err != nil {