mirror of
https://github.com/project-zot/zot.git
synced 2024-12-16 21:56:37 -05:00
s3: fix initRepo not creating index.json in some edge cases
Signed-off-by: Petu Eusebiu <peusebiu@cisco.com>
This commit is contained in:
parent
0d4cc8736d
commit
c62dae06c9
2 changed files with 80 additions and 4 deletions
|
@ -255,6 +255,86 @@ func (s *StorageDriverMock) Walk(ctx context.Context, path string, f driver.Walk
|
|||
return nil
|
||||
}
|
||||
|
||||
func TestStorageDriverStatFunction(t *testing.T) {
|
||||
skipIt(t)
|
||||
|
||||
uuid, err := guuid.NewV4()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
testDir := path.Join("/oci-repo-test", uuid.String())
|
||||
|
||||
storeDriver, imgStore, _ := createObjectsStore(testDir)
|
||||
defer cleanupStorage(storeDriver, testDir)
|
||||
|
||||
/* There is an issue with storageDriver.Stat() that returns a storageDriver.FileInfo()
|
||||
which falsely reports isDir() as true for paths under certain circumstances
|
||||
for example:
|
||||
1) create a file, eg: repo/testImageA/file
|
||||
2) run storageDriver.Stat() on a partial path, eg: storageDriver.Stat("repo/testImage") - without 'A' char
|
||||
3) the returned storageDriver.FileInfo will report that isDir() is true.
|
||||
*/
|
||||
Convey("Validate storageDriver.Stat() and isDir() functions with zot storage API", t, func(c C) {
|
||||
repo1 := "repo/testImageA"
|
||||
repo2 := "repo/testImage"
|
||||
|
||||
So(imgStore, ShouldNotBeNil)
|
||||
|
||||
err = imgStore.InitRepo(repo1)
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
isValid, err := imgStore.ValidateRepo(repo1)
|
||||
So(err, ShouldBeNil)
|
||||
So(isValid, ShouldBeTrue)
|
||||
|
||||
err = imgStore.InitRepo(repo2)
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
isValid, err = imgStore.ValidateRepo(repo2)
|
||||
So(err, ShouldBeNil)
|
||||
So(isValid, ShouldBeTrue)
|
||||
})
|
||||
|
||||
Convey("Validate storageDriver.Stat() and isDir() functions with storageDriver API", t, func(c C) {
|
||||
testFile := "/ab/cd/file"
|
||||
|
||||
shouldBeDirectoryPath1 := "/ab/cd"
|
||||
shouldBeDirectoryPath2 := "/ab"
|
||||
|
||||
shouldNotBeDirectoryPath1 := "/ab/c"
|
||||
shouldNotBeDirectoryPath2 := "/a"
|
||||
|
||||
err := storeDriver.PutContent(context.Background(), testFile, []byte("file contents"))
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
fileInfo, err := storeDriver.Stat(context.Background(), testFile)
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
So(fileInfo.IsDir(), ShouldBeFalse)
|
||||
|
||||
fileInfo, err = storeDriver.Stat(context.Background(), shouldBeDirectoryPath1)
|
||||
So(err, ShouldBeNil)
|
||||
So(fileInfo.IsDir(), ShouldBeTrue)
|
||||
|
||||
fileInfo, err = storeDriver.Stat(context.Background(), shouldBeDirectoryPath2)
|
||||
So(err, ShouldBeNil)
|
||||
So(fileInfo.IsDir(), ShouldBeTrue)
|
||||
|
||||
fileInfo, err = storeDriver.Stat(context.Background(), shouldNotBeDirectoryPath1)
|
||||
// err should actually be storageDriver.PathNotFoundError but it's nil
|
||||
So(err, ShouldBeNil)
|
||||
// should be false instead
|
||||
So(fileInfo.IsDir(), ShouldBeTrue)
|
||||
|
||||
fileInfo, err = storeDriver.Stat(context.Background(), shouldNotBeDirectoryPath2)
|
||||
// err should actually be storageDriver.PathNotFoundError but it's nils
|
||||
So(err, ShouldBeNil)
|
||||
// should be false instead
|
||||
So(fileInfo.IsDir(), ShouldBeTrue)
|
||||
})
|
||||
}
|
||||
|
||||
func TestNegativeCasesObjectsStorage(t *testing.T) {
|
||||
skipIt(t)
|
||||
|
||||
|
|
|
@ -116,10 +116,6 @@ func (is *ObjectStorage) Unlock(lockStart *time.Time) {
|
|||
func (is *ObjectStorage) initRepo(name string) error {
|
||||
repoDir := path.Join(is.rootDir, name)
|
||||
|
||||
if fi, err := is.store.Stat(context.Background(), repoDir); err == nil && fi.IsDir() {
|
||||
return nil
|
||||
}
|
||||
|
||||
// "oci-layout" file - create if it doesn't exist
|
||||
ilPath := path.Join(repoDir, ispec.ImageLayoutFile)
|
||||
if _, err := is.store.Stat(context.Background(), ilPath); err != nil {
|
||||
|
|
Loading…
Reference in a new issue