0
Fork 0
mirror of https://github.com/project-zot/zot.git synced 2024-12-16 21:56:37 -05:00
zot/pkg/storage/local/driver_test.go
Jan-Otto Kröpke fa4b69954d
build(deps): bump all dependencies (#2532)
* build(deps): bump all dependencies

Signed-off-by: Jan-Otto Kröpke <mail@jkroepke.de>

* build(deps): bump all dependencies

Signed-off-by: Jan-Otto Kröpke <mail@jkroepke.de>
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de>

* build(deps): bump all dependencies

Signed-off-by: Jan-Otto Kröpke <mail@jkroepke.de>
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de>

* build(deps): bump all dependencies

Signed-off-by: Jan-Otto Kröpke <mail@jkroepke.de>

---------

Signed-off-by: Jan-Otto Kröpke <mail@jkroepke.de>
Signed-off-by: Jan-Otto Kröpke <joe@cloudeteer.de>
2024-08-02 14:23:53 -07:00

116 lines
3.5 KiB
Go

package local_test
import (
"os"
"path"
"strings"
"testing"
storagedriver "github.com/distribution/distribution/v3/registry/storage/driver"
. "github.com/smartystreets/goconvey/convey"
storageConstants "zotregistry.dev/zot/pkg/storage/constants"
"zotregistry.dev/zot/pkg/storage/local"
)
func TestStorageDriver(t *testing.T) {
driver := local.New(true)
Convey("Test DirExists", t, func() {
rootDir := t.TempDir()
// Folder exists
result := driver.DirExists(rootDir)
So(result, ShouldBeTrue)
// Folder name triggering ENAMETOOLONG
result = driver.DirExists(path.Join(rootDir, strings.Repeat("1234567890", 1000)))
So(result, ShouldBeFalse)
// Folder which does not exist
result = driver.DirExists(path.Join(rootDir, "someName"))
So(result, ShouldBeFalse)
// Path is actually a file
fileName := "testFile"
_, err := os.Create(path.Join(rootDir, fileName))
So(err, ShouldBeNil)
result = driver.DirExists(path.Join(rootDir, fileName))
So(result, ShouldBeFalse)
// Folder name triggering ENOTDIR a one of the parents is not a folder
result = driver.DirExists(path.Join(rootDir, fileName, "someName"))
So(result, ShouldBeFalse)
// New folder created by driver
repoName := "testRepo"
err = driver.EnsureDir(path.Join(rootDir, repoName))
So(err, ShouldBeNil)
result = driver.DirExists(path.Join(rootDir, repoName))
So(result, ShouldBeTrue)
// Folder without permissions
err = os.Chmod(path.Join(rootDir, repoName), 0o000)
So(err, ShouldBeNil)
defer os.Chmod(path.Join(rootDir, repoName), storageConstants.DefaultDirPerms) //nolint:errcheck
result = driver.DirExists(path.Join(rootDir, repoName))
So(result, ShouldBeTrue)
})
Convey("Test Walk", t, func() {
Convey("Test all folders are walked and files are identified correctly", func() {
rootDir := t.TempDir()
err := driver.EnsureDir(path.Join(rootDir, "d1", "d11"))
So(err, ShouldBeNil)
err = driver.EnsureDir(path.Join(rootDir, "d1", "d12"))
So(err, ShouldBeNil)
err = driver.EnsureDir(path.Join(rootDir, "d2"))
So(err, ShouldBeNil)
_, err = os.Create(path.Join(rootDir, "d1", "d11", "f111"))
So(err, ShouldBeNil)
_, err = os.Create(path.Join(rootDir, "d2", "f21"))
So(err, ShouldBeNil)
fileList := []string{}
folderList := []string{}
err = driver.Walk(rootDir, func(fileInfo storagedriver.FileInfo) error {
if fileInfo.IsDir() {
folderList = append(folderList, fileInfo.Path())
} else {
fileList = append(fileList, fileInfo.Path())
}
return nil
})
So(err, ShouldBeNil)
So(len(fileList), ShouldEqual, 2)
So(fileList, ShouldContain, path.Join(rootDir, "d1", "d11", "f111"))
So(fileList, ShouldContain, path.Join(rootDir, "d2", "f21"))
So(len(folderList), ShouldEqual, 4)
So(folderList, ShouldContain, path.Join(rootDir, "d1"))
So(folderList, ShouldContain, path.Join(rootDir, "d1", "d11"))
So(folderList, ShouldContain, path.Join(rootDir, "d1", "d12"))
So(folderList, ShouldContain, path.Join(rootDir, "d2"))
})
Convey("Test deleting folders while walking raises doesn't raise errors", func() {
rootDir := t.TempDir()
err := driver.EnsureDir(path.Join(rootDir, "d1"))
So(err, ShouldBeNil)
err = driver.EnsureDir(path.Join(rootDir, "d2"))
So(err, ShouldBeNil)
// List/Sort d1 and d2, delete d2 while d1 is walked
// While d2 is walked the PathNotFoundError should be ignored
err = driver.Walk(rootDir, func(fileInfo storagedriver.FileInfo) error {
return driver.Delete(path.Join(rootDir, "d2"))
})
So(err, ShouldBeNil)
})
})
}