2022-04-27 01:00:20 -05:00
|
|
|
//go:build sync && scrub && metrics && search && ui_base
|
|
|
|
// +build sync,scrub,metrics,search,ui_base
|
2021-11-10 09:31:03 -05:00
|
|
|
|
|
|
|
package test_test
|
|
|
|
|
|
|
|
import (
|
2022-05-10 03:28:26 -05:00
|
|
|
"encoding/json"
|
2021-11-10 09:31:03 -05:00
|
|
|
"io/ioutil"
|
|
|
|
"os"
|
|
|
|
"path"
|
|
|
|
"testing"
|
|
|
|
|
2022-05-10 03:28:26 -05:00
|
|
|
ispec "github.com/opencontainers/image-spec/specs-go/v1"
|
2021-11-10 09:31:03 -05:00
|
|
|
. "github.com/smartystreets/goconvey/convey"
|
2022-01-19 14:54:17 -05:00
|
|
|
"zotregistry.io/zot/pkg/test"
|
2021-11-10 09:31:03 -05:00
|
|
|
)
|
|
|
|
|
|
|
|
func TestCopyFiles(t *testing.T) {
|
|
|
|
Convey("sourceDir does not exist", t, func() {
|
2022-01-19 14:54:17 -05:00
|
|
|
err := test.CopyFiles("/path/to/some/unexisting/directory", os.TempDir())
|
2021-11-10 09:31:03 -05:00
|
|
|
So(err, ShouldNotBeNil)
|
|
|
|
})
|
|
|
|
Convey("destDir is a file", t, func() {
|
2022-03-07 03:55:12 -05:00
|
|
|
dir := t.TempDir()
|
2021-11-10 09:31:03 -05:00
|
|
|
|
2022-03-07 03:55:12 -05:00
|
|
|
err := test.CopyFiles("../../test/data", dir)
|
2021-11-10 09:31:03 -05:00
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
2022-01-19 14:54:17 -05:00
|
|
|
err = test.CopyFiles(dir, "/etc/passwd")
|
2021-11-10 09:31:03 -05:00
|
|
|
So(err, ShouldNotBeNil)
|
|
|
|
})
|
|
|
|
Convey("sourceDir does not have read permissions", t, func() {
|
2022-03-07 03:55:12 -05:00
|
|
|
dir := t.TempDir()
|
2021-11-10 09:31:03 -05:00
|
|
|
|
2022-03-07 03:55:12 -05:00
|
|
|
err := os.Chmod(dir, 0o300)
|
2021-11-10 09:31:03 -05:00
|
|
|
So(err, ShouldBeNil)
|
|
|
|
|
2022-01-19 14:54:17 -05:00
|
|
|
err = test.CopyFiles(dir, os.TempDir())
|
2021-11-10 09:31:03 -05:00
|
|
|
So(err, ShouldNotBeNil)
|
|
|
|
})
|
|
|
|
Convey("sourceDir has a subfolder that does not have read permissions", t, func() {
|
2022-03-07 03:55:12 -05:00
|
|
|
dir := t.TempDir()
|
2021-11-10 09:31:03 -05:00
|
|
|
|
|
|
|
sdir := "subdir"
|
2022-03-07 03:55:12 -05:00
|
|
|
err := os.Mkdir(path.Join(dir, sdir), 0o300)
|
2021-11-10 09:31:03 -05:00
|
|
|
So(err, ShouldBeNil)
|
|
|
|
|
2022-01-19 14:54:17 -05:00
|
|
|
err = test.CopyFiles(dir, os.TempDir())
|
2021-11-10 09:31:03 -05:00
|
|
|
So(err, ShouldNotBeNil)
|
|
|
|
})
|
|
|
|
Convey("sourceDir has a file that does not have read permissions", t, func() {
|
2022-03-07 03:55:12 -05:00
|
|
|
dir := t.TempDir()
|
2021-11-10 09:31:03 -05:00
|
|
|
|
|
|
|
filePath := path.Join(dir, "file.txt")
|
2022-03-07 03:55:12 -05:00
|
|
|
err := ioutil.WriteFile(filePath, []byte("some dummy file content"), 0o644) //nolint: gosec
|
2021-11-10 09:31:03 -05:00
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
2021-12-13 14:23:31 -05:00
|
|
|
err = os.Chmod(filePath, 0o300)
|
2021-11-10 09:31:03 -05:00
|
|
|
So(err, ShouldBeNil)
|
|
|
|
|
2022-01-19 14:54:17 -05:00
|
|
|
err = test.CopyFiles(dir, os.TempDir())
|
2021-11-10 09:31:03 -05:00
|
|
|
So(err, ShouldNotBeNil)
|
|
|
|
})
|
|
|
|
}
|
2022-05-10 03:28:26 -05:00
|
|
|
|
|
|
|
func TestGetOciLayoutDigests(t *testing.T) {
|
|
|
|
dir := t.TempDir()
|
|
|
|
|
|
|
|
Convey("image path is wrong", t, func() {
|
|
|
|
So(func() { _, _, _ = test.GetOciLayoutDigests("inexistent-image") }, ShouldPanic)
|
|
|
|
})
|
|
|
|
|
|
|
|
Convey("no permissions when getting index", t, func() {
|
|
|
|
err := test.CopyFiles("../../test/data/zot-test", path.Join(dir, "test-index"))
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
err = os.Chmod(path.Join(dir, "test-index", "index.json"), 0o000)
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
So(func() { _, _, _ = test.GetOciLayoutDigests(path.Join(dir, "test-index")) }, ShouldPanic)
|
|
|
|
|
|
|
|
err = os.Chmod(path.Join(dir, "test-index", "index.json"), 0o755)
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
Convey("can't access manifest digest", t, func() {
|
|
|
|
err := test.CopyFiles("../../test/data/zot-test", path.Join(dir, "test-manifest"))
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
buf, err := ioutil.ReadFile(path.Join(dir, "test-manifest", "index.json"))
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
var index ispec.Index
|
|
|
|
if err := json.Unmarshal(buf, &index); err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
err = os.Chmod(path.Join(dir, "test-manifest", "blobs/sha256", index.Manifests[0].Digest.Encoded()), 0o000)
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
So(func() { _, _, _ = test.GetOciLayoutDigests(path.Join(dir, "test-manifest")) }, ShouldPanic)
|
|
|
|
|
|
|
|
err = os.Chmod(path.Join(dir, "test-manifest", "blobs/sha256", index.Manifests[0].Digest.Encoded()), 0o755)
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|