mirror of
https://github.com/clearlinux/rkt.git
synced 2026-08-19 13:36:39 +00:00
store: rename ds -> s
ds was a legacy name reflecting the store was once DownloadStore
This commit is contained in:
@@ -13,11 +13,11 @@ func TestWriteACIInfo(t *testing.T) {
|
||||
t.Fatalf("error creating tempdir: %v", err)
|
||||
}
|
||||
defer os.RemoveAll(dir)
|
||||
ds, err := NewStore(dir)
|
||||
s, err := NewStore(dir)
|
||||
if err != nil {
|
||||
t.Fatalf("Unexpected error: %v", err)
|
||||
}
|
||||
if err = ds.db.Do(func(tx *sql.Tx) error {
|
||||
if err = s.db.Do(func(tx *sql.Tx) error {
|
||||
aciinfo := &ACIInfo{
|
||||
BlobKey: "key01",
|
||||
AppName: "name01",
|
||||
@@ -36,7 +36,7 @@ func TestWriteACIInfo(t *testing.T) {
|
||||
|
||||
aciinfos := []*ACIInfo{}
|
||||
ok := false
|
||||
if err = ds.db.Do(func(tx *sql.Tx) error {
|
||||
if err = s.db.Do(func(tx *sql.Tx) error {
|
||||
aciinfos, ok, err = GetACIInfosWithAppName(tx, "name01")
|
||||
return err
|
||||
}); err != nil {
|
||||
@@ -51,7 +51,7 @@ func TestWriteACIInfo(t *testing.T) {
|
||||
}
|
||||
|
||||
// Add another ACIInfo for the same app name
|
||||
if err = ds.db.Do(func(tx *sql.Tx) error {
|
||||
if err = s.db.Do(func(tx *sql.Tx) error {
|
||||
aciinfo := &ACIInfo{
|
||||
BlobKey: "key02",
|
||||
AppName: "name01",
|
||||
@@ -63,7 +63,7 @@ func TestWriteACIInfo(t *testing.T) {
|
||||
}); err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
if err = ds.db.Do(func(tx *sql.Tx) error {
|
||||
if err = s.db.Do(func(tx *sql.Tx) error {
|
||||
aciinfos, ok, err = GetACIInfosWithAppName(tx, "name01")
|
||||
return err
|
||||
}); err != nil {
|
||||
|
||||
@@ -31,7 +31,7 @@ func TestNewRemote(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer os.RemoveAll(dir)
|
||||
ds, err := NewStore(dir)
|
||||
s, err := NewStore(dir)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -39,10 +39,10 @@ func TestNewRemote(t *testing.T) {
|
||||
// Create our first Remote, and simulate Store() to create row in the table
|
||||
na := NewRemote(u1, "")
|
||||
na.BlobKey = data
|
||||
ds.WriteRemote(na)
|
||||
s.WriteRemote(na)
|
||||
|
||||
// Get a new remote w the same parameters, reading from table should be fine
|
||||
nb, ok, err := ds.GetRemote(u1)
|
||||
nb, ok, err := s.GetRemote(u1)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error reading index: %v", err)
|
||||
}
|
||||
@@ -54,7 +54,7 @@ func TestNewRemote(t *testing.T) {
|
||||
}
|
||||
|
||||
// Get a remote with a different URI
|
||||
nc, ok, err := ds.GetRemote(u2)
|
||||
nc, ok, err := s.GetRemote(u2)
|
||||
// Should get an error, since the URI shouldn't be present in the table
|
||||
if ok {
|
||||
t.Fatalf("unexpected index found")
|
||||
|
||||
+54
-54
@@ -80,31 +80,31 @@ type Store struct {
|
||||
func NewStore(base string) (*Store, error) {
|
||||
casDir := filepath.Join(base, "cas")
|
||||
|
||||
ds := &Store{
|
||||
s := &Store{
|
||||
base: base,
|
||||
stores: make([]*diskv.Diskv, len(diskvStores)),
|
||||
}
|
||||
|
||||
ds.imageLockDir = filepath.Join(casDir, "imagelocks")
|
||||
err := os.MkdirAll(ds.imageLockDir, defaultPathPerm)
|
||||
s.imageLockDir = filepath.Join(casDir, "imagelocks")
|
||||
err := os.MkdirAll(s.imageLockDir, defaultPathPerm)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
ds.treeStoreLockDir = filepath.Join(casDir, "treestorelocks")
|
||||
err = os.MkdirAll(ds.treeStoreLockDir, defaultPathPerm)
|
||||
s.treeStoreLockDir = filepath.Join(casDir, "treestorelocks")
|
||||
err = os.MkdirAll(s.treeStoreLockDir, defaultPathPerm)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Take a shared cas lock
|
||||
ds.storeLock, err = lock.NewLock(casDir, lock.Dir)
|
||||
s.storeLock, err = lock.NewLock(casDir, lock.Dir)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for i, p := range diskvStores {
|
||||
ds.stores[i] = diskv.New(diskv.Options{
|
||||
s.stores[i] = diskv.New(diskv.Options{
|
||||
BasePath: filepath.Join(casDir, p),
|
||||
Transform: blockTransform,
|
||||
})
|
||||
@@ -113,9 +113,9 @@ func NewStore(base string) (*Store, error) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
ds.db = db
|
||||
s.db = db
|
||||
|
||||
ds.treestore = &TreeStore{path: filepath.Join(base, "cas", "tree")}
|
||||
s.treestore = &TreeStore{path: filepath.Join(base, "cas", "tree")}
|
||||
|
||||
needsMigrate := false
|
||||
fn := func(tx *sql.Tx) error {
|
||||
@@ -158,7 +158,7 @@ func NewStore(base string) (*Store, error) {
|
||||
// migration from the current version.
|
||||
if needsMigrate {
|
||||
// Take an exclusive store lock
|
||||
err := ds.storeLock.ExclusiveLock()
|
||||
err := s.storeLock.ExclusiveLock()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -171,13 +171,13 @@ func NewStore(base string) (*Store, error) {
|
||||
}
|
||||
}
|
||||
|
||||
return ds, nil
|
||||
return s, nil
|
||||
}
|
||||
|
||||
// TmpFile returns an *os.File local to the same filesystem as the Store, or
|
||||
// any error encountered
|
||||
func (ds Store) TmpFile() (*os.File, error) {
|
||||
dir, err := ds.TmpDir()
|
||||
func (s Store) TmpFile() (*os.File, error) {
|
||||
dir, err := s.TmpDir()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -186,8 +186,8 @@ func (ds Store) TmpFile() (*os.File, error) {
|
||||
|
||||
// TmpDir creates and returns dir local to the same filesystem as the Store,
|
||||
// or any error encountered
|
||||
func (ds Store) TmpDir() (string, error) {
|
||||
dir := filepath.Join(ds.base, "tmp")
|
||||
func (s Store) TmpDir() (string, error) {
|
||||
dir := filepath.Join(s.base, "tmp")
|
||||
if err := os.MkdirAll(dir, defaultPathPerm); err != nil {
|
||||
return "", err
|
||||
}
|
||||
@@ -197,7 +197,7 @@ func (ds Store) TmpDir() (string, error) {
|
||||
// ResolveKey resolves a partial key (of format `sha512-0c45e8c0ab2`) to a full
|
||||
// key by considering the key a prefix and using the store for resolution.
|
||||
// If the key is longer than the full key length, it is first truncated.
|
||||
func (ds Store) ResolveKey(key string) (string, error) {
|
||||
func (s Store) ResolveKey(key string) (string, error) {
|
||||
if !strings.HasPrefix(key, hashPrefix) {
|
||||
return "", fmt.Errorf("wrong key prefix")
|
||||
}
|
||||
@@ -209,7 +209,7 @@ func (ds Store) ResolveKey(key string) (string, error) {
|
||||
}
|
||||
|
||||
aciInfos := []*ACIInfo{}
|
||||
err := ds.db.Do(func(tx *sql.Tx) error {
|
||||
err := s.db.Do(func(tx *sql.Tx) error {
|
||||
var err error
|
||||
aciInfos, err = GetACIInfosWithKeyPrefix(tx, key)
|
||||
return err
|
||||
@@ -228,18 +228,18 @@ func (ds Store) ResolveKey(key string) (string, error) {
|
||||
return aciInfos[0].BlobKey, nil
|
||||
}
|
||||
|
||||
func (ds Store) ReadStream(key string) (io.ReadCloser, error) {
|
||||
key, err := ds.ResolveKey(key)
|
||||
func (s Store) ReadStream(key string) (io.ReadCloser, error) {
|
||||
key, err := s.ResolveKey(key)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error resolving key: %v", err)
|
||||
}
|
||||
keyLock, err := lock.SharedKeyLock(ds.imageLockDir, key)
|
||||
keyLock, err := lock.SharedKeyLock(s.imageLockDir, key)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error locking image: %v", err)
|
||||
}
|
||||
defer keyLock.Close()
|
||||
|
||||
return ds.stores[blobType].ReadStream(key, false)
|
||||
return s.stores[blobType].ReadStream(key, false)
|
||||
}
|
||||
|
||||
// WriteACI takes an ACI encapsulated in an io.Reader, decompresses it if
|
||||
@@ -247,7 +247,7 @@ func (ds Store) ReadStream(key string) (io.ReadCloser, error) {
|
||||
// (i.e. the hash of the uncompressed ACI)
|
||||
// latest defines if the aci has to be marked as the latest. For example an ACI
|
||||
// discovered without asking for a specific version (latest pattern).
|
||||
func (ds Store) WriteACI(r io.Reader, latest bool) (string, error) {
|
||||
func (s Store) WriteACI(r io.Reader, latest bool) (string, error) {
|
||||
// Peek at the first 512 bytes of the reader to detect filetype
|
||||
br := bufio.NewReaderSize(r, 32768)
|
||||
hd, err := br.Peek(512)
|
||||
@@ -270,7 +270,7 @@ func (ds Store) WriteACI(r io.Reader, latest bool) (string, error) {
|
||||
// tee so we can generate the hash
|
||||
h := sha512.New()
|
||||
tr := io.TeeReader(dr, h)
|
||||
fh, err := ds.TmpFile()
|
||||
fh, err := s.TmpFile()
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("error creating image: %v", err)
|
||||
}
|
||||
@@ -286,14 +286,14 @@ func (ds Store) WriteACI(r io.Reader, latest bool) (string, error) {
|
||||
}
|
||||
|
||||
// Import the uncompressed image into the store at the real key
|
||||
key := ds.HashToKey(h)
|
||||
keyLock, err := lock.ExclusiveKeyLock(ds.imageLockDir, key)
|
||||
key := s.HashToKey(h)
|
||||
keyLock, err := lock.ExclusiveKeyLock(s.imageLockDir, key)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("error locking image: %v", err)
|
||||
}
|
||||
defer keyLock.Close()
|
||||
|
||||
if err = ds.stores[blobType].Import(fh.Name(), key, true); err != nil {
|
||||
if err = s.stores[blobType].Import(fh.Name(), key, true); err != nil {
|
||||
return "", fmt.Errorf("error importing image: %v", err)
|
||||
}
|
||||
|
||||
@@ -302,12 +302,12 @@ func (ds Store) WriteACI(r io.Reader, latest bool) (string, error) {
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("error marshalling image manifest: %v", err)
|
||||
}
|
||||
if err = ds.stores[imageManifestType].Write(key, imj); err != nil {
|
||||
if err = s.stores[imageManifestType].Write(key, imj); err != nil {
|
||||
return "", fmt.Errorf("error importing image manifest: %v", err)
|
||||
}
|
||||
|
||||
// Save aciinfo
|
||||
if err = ds.db.Do(func(tx *sql.Tx) error {
|
||||
if err = s.db.Do(func(tx *sql.Tx) error {
|
||||
aciinfo := &ACIInfo{
|
||||
BlobKey: key,
|
||||
AppName: im.Name.String(),
|
||||
@@ -330,19 +330,19 @@ func (ds Store) WriteACI(r io.Reader, latest bool) (string, error) {
|
||||
// already fully rendered.
|
||||
// Users of treestore should call ds.RenderTreeStore before using it to ensure
|
||||
// that the treestore is completely rendered.
|
||||
func (ds Store) RenderTreeStore(key string, rebuild bool) error {
|
||||
func (s Store) RenderTreeStore(key string, rebuild bool) error {
|
||||
// this lock references the treestore dir for the specified key. This
|
||||
// is different from a lock on an image key as internally
|
||||
// treestore.Write calls the acirenderer functions that use GetACI and
|
||||
// GetImageManifest which are taking the image(s) lock.
|
||||
treeStoreKeyLock, err := lock.ExclusiveKeyLock(ds.treeStoreLockDir, key)
|
||||
treeStoreKeyLock, err := lock.ExclusiveKeyLock(s.treeStoreLockDir, key)
|
||||
if err != nil {
|
||||
return fmt.Errorf("error locking tree store: %v", err)
|
||||
}
|
||||
defer treeStoreKeyLock.Close()
|
||||
|
||||
if !rebuild {
|
||||
rendered, err := ds.treestore.IsRendered(key)
|
||||
rendered, err := s.treestore.IsRendered(key)
|
||||
if err != nil {
|
||||
return fmt.Errorf("cannot determine if tree is already rendered: %v", err)
|
||||
}
|
||||
@@ -353,11 +353,11 @@ func (ds Store) RenderTreeStore(key string, rebuild bool) error {
|
||||
// Firstly remove a possible partial treestore if existing.
|
||||
// This is needed as a previous ACI removal operation could have failed
|
||||
// cleaning the tree store leaving some stale files.
|
||||
err = ds.treestore.Remove(key)
|
||||
err = s.treestore.Remove(key)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = ds.treestore.Write(key, &ds)
|
||||
err = s.treestore.Write(key, &s)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -365,37 +365,37 @@ func (ds Store) RenderTreeStore(key string, rebuild bool) error {
|
||||
}
|
||||
|
||||
// CheckTreeStore verifies the treestore consistency for the specified key.
|
||||
func (ds Store) CheckTreeStore(key string) error {
|
||||
treeStoreKeyLock, err := lock.SharedKeyLock(ds.treeStoreLockDir, key)
|
||||
func (s Store) CheckTreeStore(key string) error {
|
||||
treeStoreKeyLock, err := lock.SharedKeyLock(s.treeStoreLockDir, key)
|
||||
if err != nil {
|
||||
return fmt.Errorf("error locking tree store: %v", err)
|
||||
}
|
||||
defer treeStoreKeyLock.Close()
|
||||
|
||||
return ds.treestore.Check(key)
|
||||
return s.treestore.Check(key)
|
||||
}
|
||||
|
||||
// GetTreeStorePath returns the absolute path of the treestore for the specified key.
|
||||
// It doesn't ensure that the path exists and is fully rendered. This should
|
||||
// be done calling IsRendered()
|
||||
func (ds Store) GetTreeStorePath(key string) string {
|
||||
return ds.treestore.GetPath(key)
|
||||
func (s Store) GetTreeStorePath(key string) string {
|
||||
return s.treestore.GetPath(key)
|
||||
}
|
||||
|
||||
// GetTreeStoreRootFS returns the absolute path of the rootfs in the treestore
|
||||
// for specified key.
|
||||
// It doesn't ensure that the rootfs exists and is fully rendered. This should
|
||||
// be done calling IsRendered()
|
||||
func (ds Store) GetTreeStoreRootFS(key string) string {
|
||||
return ds.treestore.GetRootFS(key)
|
||||
func (s Store) GetTreeStoreRootFS(key string) string {
|
||||
return s.treestore.GetRootFS(key)
|
||||
}
|
||||
|
||||
// GetRemote tries to retrieve a remote with the given ACIURL. found will be
|
||||
// false if remote doesn't exist.
|
||||
func (ds Store) GetRemote(aciURL string) (*Remote, bool, error) {
|
||||
func (s Store) GetRemote(aciURL string) (*Remote, bool, error) {
|
||||
var remote *Remote
|
||||
found := false
|
||||
err := ds.db.Do(func(tx *sql.Tx) error {
|
||||
err := s.db.Do(func(tx *sql.Tx) error {
|
||||
var err error
|
||||
remote, found, err = GetRemote(tx, aciURL)
|
||||
return err
|
||||
@@ -404,26 +404,26 @@ func (ds Store) GetRemote(aciURL string) (*Remote, bool, error) {
|
||||
}
|
||||
|
||||
// WriteRemote adds or updates the provided Remote.
|
||||
func (ds Store) WriteRemote(remote *Remote) error {
|
||||
err := ds.db.Do(func(tx *sql.Tx) error {
|
||||
func (s Store) WriteRemote(remote *Remote) error {
|
||||
err := s.db.Do(func(tx *sql.Tx) error {
|
||||
return WriteRemote(tx, remote)
|
||||
})
|
||||
return err
|
||||
}
|
||||
|
||||
// Get the ImageManifest with the specified key.
|
||||
func (ds Store) GetImageManifest(key string) (*schema.ImageManifest, error) {
|
||||
key, err := ds.ResolveKey(key)
|
||||
func (s Store) GetImageManifest(key string) (*schema.ImageManifest, error) {
|
||||
key, err := s.ResolveKey(key)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error resolving key: %v", err)
|
||||
}
|
||||
keyLock, err := lock.SharedKeyLock(ds.imageLockDir, key)
|
||||
keyLock, err := lock.SharedKeyLock(s.imageLockDir, key)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error locking image: %v", err)
|
||||
}
|
||||
defer keyLock.Close()
|
||||
|
||||
imj, err := ds.stores[imageManifestType].Read(key)
|
||||
imj, err := s.stores[imageManifestType].Read(key)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error retrieving image manifest: %v", err)
|
||||
}
|
||||
@@ -440,7 +440,7 @@ func (ds Store) GetImageManifest(key string) (*schema.ImageManifest, error) {
|
||||
// last one imported in the store).
|
||||
// If no version label is requested, ACIs marked as latest in the ACIInfo are
|
||||
// preferred.
|
||||
func (ds Store) GetACI(name types.ACName, labels types.Labels) (string, error) {
|
||||
func (s Store) GetACI(name types.ACName, labels types.Labels) (string, error) {
|
||||
var curaciinfo *ACIInfo
|
||||
versionRequested := false
|
||||
if _, ok := labels.Get("version"); ok {
|
||||
@@ -448,7 +448,7 @@ func (ds Store) GetACI(name types.ACName, labels types.Labels) (string, error) {
|
||||
}
|
||||
|
||||
var aciinfos []*ACIInfo
|
||||
err := ds.db.Do(func(tx *sql.Tx) error {
|
||||
err := s.db.Do(func(tx *sql.Tx) error {
|
||||
var err error
|
||||
aciinfos, _, err = GetACIInfosWithAppName(tx, name.String())
|
||||
return err
|
||||
@@ -459,7 +459,7 @@ func (ds Store) GetACI(name types.ACName, labels types.Labels) (string, error) {
|
||||
|
||||
nextKey:
|
||||
for _, aciinfo := range aciinfos {
|
||||
im, err := ds.GetImageManifest(aciinfo.BlobKey)
|
||||
im, err := s.GetImageManifest(aciinfo.BlobKey)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("error getting image manifest: %v", err)
|
||||
}
|
||||
@@ -504,8 +504,8 @@ nextKey:
|
||||
return "", fmt.Errorf("aci not found")
|
||||
}
|
||||
|
||||
func (ds Store) Dump(hex bool) {
|
||||
for _, s := range ds.stores {
|
||||
func (s Store) Dump(hex bool) {
|
||||
for _, s := range s.stores {
|
||||
var keyCount int
|
||||
for key := range s.Keys(nil) {
|
||||
val, err := s.Read(key)
|
||||
@@ -529,7 +529,7 @@ func (ds Store) Dump(hex bool) {
|
||||
// HashToKey takes a hash.Hash (which currently _MUST_ represent a full SHA512),
|
||||
// calculates its sum, and returns a string which should be used as the key to
|
||||
// store the data matching the hash.
|
||||
func (ds Store) HashToKey(h hash.Hash) string {
|
||||
func (s Store) HashToKey(h hash.Hash) string {
|
||||
return hashToKey(h)
|
||||
}
|
||||
|
||||
|
||||
+26
-26
@@ -37,17 +37,17 @@ func TestBlobStore(t *testing.T) {
|
||||
t.Fatalf("error creating tempdir: %v", err)
|
||||
}
|
||||
defer os.RemoveAll(dir)
|
||||
ds, err := NewStore(dir)
|
||||
s, err := NewStore(dir)
|
||||
if err != nil {
|
||||
t.Fatalf("Unexpected error: %v", err)
|
||||
}
|
||||
for _, valueStr := range []string{
|
||||
"I am a manually placed object",
|
||||
} {
|
||||
ds.stores[blobType].Write(types.NewHashSHA512([]byte(valueStr)).String(), []byte(valueStr))
|
||||
s.stores[blobType].Write(types.NewHashSHA512([]byte(valueStr)).String(), []byte(valueStr))
|
||||
}
|
||||
|
||||
ds.Dump(false)
|
||||
s.Dump(false)
|
||||
}
|
||||
|
||||
func TestResolveKey(t *testing.T) {
|
||||
@@ -56,7 +56,7 @@ func TestResolveKey(t *testing.T) {
|
||||
t.Fatalf("error creating tempdir: %v", err)
|
||||
}
|
||||
defer os.RemoveAll(dir)
|
||||
ds, err := NewStore(dir)
|
||||
s, err := NewStore(dir)
|
||||
if err != nil {
|
||||
t.Fatalf("Unexpected error: %v", err)
|
||||
}
|
||||
@@ -77,7 +77,7 @@ func TestResolveKey(t *testing.T) {
|
||||
}
|
||||
for _, d := range data {
|
||||
// Save aciinfo
|
||||
err := ds.db.Do(func(tx *sql.Tx) error {
|
||||
err := s.db.Do(func(tx *sql.Tx) error {
|
||||
aciinfo := &ACIInfo{
|
||||
BlobKey: d.String(),
|
||||
AppName: "example.com/app",
|
||||
@@ -94,7 +94,7 @@ func TestResolveKey(t *testing.T) {
|
||||
fkl := "sha512-67147019a5b56f5e2ee01e989a8aa4787f56b8445960be2d8678391cf111009bc0780f31001fd181a2b61507547aee4caa44cda4b8bdb238d0e4ba830069ed2c"
|
||||
fks := "sha512-67147019a5b56f5e2ee01e989a8aa4787f56b8445960be2d8678391cf111009b"
|
||||
for _, k := range []string{fkl, fks} {
|
||||
key, err := ds.ResolveKey(k)
|
||||
key, err := s.ResolveKey(k)
|
||||
if key != fks {
|
||||
t.Errorf("expected ResolveKey to return unaltered short key, but got %q", key)
|
||||
}
|
||||
@@ -104,7 +104,7 @@ func TestResolveKey(t *testing.T) {
|
||||
}
|
||||
|
||||
// Unambiguous prefix match
|
||||
k, err := ds.ResolveKey("sha512-123")
|
||||
k, err := s.ResolveKey("sha512-123")
|
||||
if k != "sha512-1234567890000000000000000000000000000000000000000000000000000000" {
|
||||
t.Errorf("expected %q, got %q", "sha512-1234567890000000000000000000000000000000000000000000000000000000", k)
|
||||
}
|
||||
@@ -113,7 +113,7 @@ func TestResolveKey(t *testing.T) {
|
||||
}
|
||||
|
||||
// Ambiguous prefix match
|
||||
k, err = ds.ResolveKey("sha512-abc")
|
||||
k, err = s.ResolveKey("sha512-abc")
|
||||
if k != "" {
|
||||
t.Errorf("expected %q, got %q", "", k)
|
||||
}
|
||||
@@ -122,7 +122,7 @@ func TestResolveKey(t *testing.T) {
|
||||
}
|
||||
|
||||
// wrong key prefix
|
||||
k, err = ds.ResolveKey("badprefix-1")
|
||||
k, err = s.ResolveKey("badprefix-1")
|
||||
expectedErr := "wrong key prefix"
|
||||
if err == nil {
|
||||
t.Errorf("expected non-nil error!")
|
||||
@@ -132,7 +132,7 @@ func TestResolveKey(t *testing.T) {
|
||||
}
|
||||
|
||||
// key too short
|
||||
k, err = ds.ResolveKey("sha512-1")
|
||||
k, err = s.ResolveKey("sha512-1")
|
||||
expectedErr = "key too short"
|
||||
if err == nil {
|
||||
t.Errorf("expected non-nil error!")
|
||||
@@ -148,7 +148,7 @@ func TestGetImageManifest(t *testing.T) {
|
||||
t.Fatalf("error creating tempdir: %v", err)
|
||||
}
|
||||
defer os.RemoveAll(dir)
|
||||
ds, err := NewStore(dir)
|
||||
s, err := NewStore(dir)
|
||||
if err != nil {
|
||||
t.Fatalf("Unexpected error: %v", err)
|
||||
}
|
||||
@@ -167,13 +167,13 @@ func TestGetImageManifest(t *testing.T) {
|
||||
if _, err := aci.Seek(0, 0); err != nil {
|
||||
t.Fatalf("unexpected error %v", err)
|
||||
}
|
||||
key, err := ds.WriteACI(aci, false)
|
||||
key, err := s.WriteACI(aci, false)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
wanted := "example.com/test01"
|
||||
im, err := ds.GetImageManifest(key)
|
||||
im, err := s.GetImageManifest(key)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
@@ -182,7 +182,7 @@ func TestGetImageManifest(t *testing.T) {
|
||||
}
|
||||
|
||||
// test unexistent key
|
||||
im, err = ds.GetImageManifest("sha512-aaaaaaaaaaaaaaaaa")
|
||||
im, err = s.GetImageManifest("sha512-aaaaaaaaaaaaaaaaa")
|
||||
if err == nil {
|
||||
t.Fatalf("expected non-nil error!")
|
||||
}
|
||||
@@ -205,7 +205,7 @@ func TestGetAci(t *testing.T) {
|
||||
t.Fatalf("error creating tempdir: %v", err)
|
||||
}
|
||||
defer os.RemoveAll(dir)
|
||||
ds, err := NewStore(dir)
|
||||
s, err := NewStore(dir)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error %v", err)
|
||||
}
|
||||
@@ -307,7 +307,7 @@ func TestGetAci(t *testing.T) {
|
||||
t.Fatalf("unexpected error %v", err)
|
||||
}
|
||||
|
||||
key, err := ds.WriteACI(aci, ad.latest)
|
||||
key, err := s.WriteACI(aci, ad.latest)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
@@ -315,7 +315,7 @@ func TestGetAci(t *testing.T) {
|
||||
}
|
||||
|
||||
for _, test := range tt.tests {
|
||||
key, err := ds.GetACI(test.name, test.labels)
|
||||
key, err := s.GetACI(test.name, test.labels)
|
||||
if test.expected == -1 {
|
||||
if err == nil {
|
||||
t.Fatalf("Expected no key for appName %s, got %s", test.name, key)
|
||||
@@ -339,7 +339,7 @@ func TestTreeStore(t *testing.T) {
|
||||
t.Fatalf("error creating tempdir: %v", err)
|
||||
}
|
||||
defer os.RemoveAll(dir)
|
||||
ds, err := NewStore(dir)
|
||||
s, err := NewStore(dir)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
@@ -401,51 +401,51 @@ func TestTreeStore(t *testing.T) {
|
||||
}
|
||||
|
||||
// Import the new ACI
|
||||
key, err := ds.WriteACI(aci, false)
|
||||
key, err := s.WriteACI(aci, false)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
// Ask the store to render the treestore
|
||||
err = ds.RenderTreeStore(key, false)
|
||||
err = s.RenderTreeStore(key, false)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
// Verify image Hash. Should be the same.
|
||||
err = ds.CheckTreeStore(key)
|
||||
err = s.CheckTreeStore(key)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
// Change a file permission
|
||||
rootfs := ds.GetTreeStoreRootFS(key)
|
||||
rootfs := s.GetTreeStoreRootFS(key)
|
||||
err = os.Chmod(filepath.Join(rootfs, "a"), 0600)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
// Verify image Hash. Should be different
|
||||
err = ds.CheckTreeStore(key)
|
||||
err = s.CheckTreeStore(key)
|
||||
if err == nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
// rebuild the tree
|
||||
err = ds.RenderTreeStore(key, true)
|
||||
err = s.RenderTreeStore(key, true)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
// Add a file
|
||||
rootfs = ds.GetTreeStoreRootFS(key)
|
||||
rootfs = s.GetTreeStoreRootFS(key)
|
||||
err = ioutil.WriteFile(filepath.Join(rootfs, "newfile"), []byte("newfile"), 0644)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
// Verify image Hash. Should be different
|
||||
err = ds.CheckTreeStore(key)
|
||||
err = s.CheckTreeStore(key)
|
||||
if err == nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
+2
-2
@@ -34,7 +34,7 @@ type TreeStore struct {
|
||||
// Write, to avoid having a rendered ACI with old stale files, requires that
|
||||
// the destination directory doesn't exist (usually Remove should be called
|
||||
// before Write)
|
||||
func (ts *TreeStore) Write(key string, ds *Store) error {
|
||||
func (ts *TreeStore) Write(key string, s *Store) error {
|
||||
treepath := filepath.Join(ts.path, key)
|
||||
fi, _ := os.Stat(treepath)
|
||||
if fi != nil {
|
||||
@@ -44,7 +44,7 @@ func (ts *TreeStore) Write(key string, ds *Store) error {
|
||||
if err != nil {
|
||||
return fmt.Errorf("treestore: cannot convert key to imageID: %v", err)
|
||||
}
|
||||
err = aci.RenderACIWithImageID(*imageID, treepath, ds)
|
||||
err = aci.RenderACIWithImageID(*imageID, treepath, s)
|
||||
if err != nil {
|
||||
return fmt.Errorf("treestore: cannot render aci: %v", err)
|
||||
}
|
||||
|
||||
+11
-11
@@ -9,7 +9,7 @@ import (
|
||||
"github.com/coreos/rkt/pkg/aci"
|
||||
)
|
||||
|
||||
func treeStoreDSWriteACI(dir string, ds *Store) (string, error) {
|
||||
func treeStoreWriteACI(dir string, s *Store) (string, error) {
|
||||
imj := `
|
||||
{
|
||||
"acKind": "ImageManifest",
|
||||
@@ -67,7 +67,7 @@ func treeStoreDSWriteACI(dir string, ds *Store) (string, error) {
|
||||
}
|
||||
|
||||
// Import the new ACI
|
||||
key, err := ds.WriteACI(aci, false)
|
||||
key, err := s.WriteACI(aci, false)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
@@ -80,24 +80,24 @@ func TestTreeStoreWrite(t *testing.T) {
|
||||
t.Fatalf("error creating tempdir: %v", err)
|
||||
}
|
||||
defer os.RemoveAll(dir)
|
||||
ds, err := NewStore(dir)
|
||||
s, err := NewStore(dir)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
key, err := treeStoreDSWriteACI(dir, ds)
|
||||
key, err := treeStoreWriteACI(dir, s)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
// Ask the store to render the treestore
|
||||
err = ds.treestore.Write(key, ds)
|
||||
err = s.treestore.Write(key, s)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
// Verify image Hash. Should be the same.
|
||||
err = ds.treestore.Check(key)
|
||||
err = s.treestore.Check(key)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
@@ -109,29 +109,29 @@ func TestTreeStoreRemove(t *testing.T) {
|
||||
t.Fatalf("error creating tempdir: %v", err)
|
||||
}
|
||||
defer os.RemoveAll(dir)
|
||||
ds, err := NewStore(dir)
|
||||
s, err := NewStore(dir)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
key, err := treeStoreDSWriteACI(dir, ds)
|
||||
key, err := treeStoreWriteACI(dir, s)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
// Test non existent dir
|
||||
err = ds.treestore.Remove(key)
|
||||
err = s.treestore.Remove(key)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
// Test rendered tree
|
||||
err = ds.treestore.Write(key, ds)
|
||||
err = s.treestore.Write(key, s)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
err = ds.treestore.Remove(key)
|
||||
err = s.treestore.Remove(key)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user