From 2f626bf9fd2a45482bbc92c81882a20f834d1d7b Mon Sep 17 00:00:00 2001 From: Alfredo Deza Date: Fri, 10 Jul 2020 14:26:24 -0400 Subject: [PATCH] directory resolver should join path and target directory for retrieving contents Signed-off-by: Alfredo Deza --- imgbom/scope/resolvers/directory_resolver.go | 9 +++- imgbom/scope/scope_test.go | 47 +++++++++++++++++--- 2 files changed, 49 insertions(+), 7 deletions(-) diff --git a/imgbom/scope/resolvers/directory_resolver.go b/imgbom/scope/resolvers/directory_resolver.go index 096be4eb5..eb61d55b3 100644 --- a/imgbom/scope/resolvers/directory_resolver.go +++ b/imgbom/scope/resolvers/directory_resolver.go @@ -74,7 +74,14 @@ func (s DirectoryResolver) FilesByGlob(patterns ...string) ([]file.Reference, er func (s DirectoryResolver) MultipleFileContentsByRef(f ...file.Reference) (map[file.Reference]string, error) { refContents := make(map[file.Reference]string) for _, fileRef := range f { - contents, err := fileContents(fileRef.Path) + resolvedPath := path.Join(s.Path, string(fileRef.Path)) + _, err := os.Stat(resolvedPath) + if os.IsNotExist(err) { + continue + } else if err != nil { + log.Errorf("path (%s) is not valid: %v", resolvedPath, err) + } + contents, err := fileContents(file.Path(resolvedPath)) if err != nil { return refContents, fmt.Errorf("could not read contents of file: %s", fileRef.Path) } diff --git a/imgbom/scope/scope_test.go b/imgbom/scope/scope_test.go index a516888a0..96eb16e72 100644 --- a/imgbom/scope/scope_test.go +++ b/imgbom/scope/scope_test.go @@ -4,8 +4,43 @@ import ( "testing" "github.com/anchore/stereoscope/pkg/file" + "github.com/anchore/stereoscope/pkg/image" ) +func TestNewScopeFromImageFails(t *testing.T) { + t.Run("no image given", func(t *testing.T) { + _, err := NewScopeFromImage(nil, AllLayersScope) + if err == nil { + t.Errorf("expected an error condition but none was given") + } + }) +} + +func TestNewScopeFromImageUnknownOption(t *testing.T) { + img := image.Image{} + + t.Run("unknown option is an error", func(t *testing.T) { + _, err := NewScopeFromImage(&img, UnknownScope) + if err == nil { + t.Errorf("expected an error condition but none was given") + } + }) +} + +func TestNewScopeFromImage(t *testing.T) { + layer := image.NewLayer(nil) + img := image.Image{ + Layers: []*image.Layer{layer}, + } + + t.Run("create a new Scope object from image", func(t *testing.T) { + _, err := NewScopeFromImage(&img, AllLayersScope) + if err != nil { + t.Errorf("unexpected error when creating a new Scope from img: %w", err) + } + }) +} + func TestDirectoryScope(t *testing.T) { testCases := []struct { desc string @@ -35,13 +70,13 @@ func TestDirectoryScope(t *testing.T) { } for _, test := range testCases { t.Run(test.desc, func(t *testing.T) { - p, err := NewDirScope(test.input, AllLayersScope) + p, err := NewScopeFromDir(test.input, AllLayersScope) if err != nil { t.Errorf("could not create NewDirScope: %w", err) } - if p.dirSrc.Path != test.input { - t.Errorf("mismatched stringer: '%s' != '%s'", p.dirSrc.Path, test.input) + if p.DirSrc.Path != test.input { + t.Errorf("mismatched stringer: '%s' != '%s'", p.DirSrc.Path, test.input) } refs, err := p.FilesByPath(test.inputPaths...) @@ -79,13 +114,13 @@ func TestMultipleFileContentsByRef(t *testing.T) { { input: "test-fixtures/path-detected", desc: "file has contents", - path: "test-fixtures/path-detected/.vimrc", + path: ".vimrc", expected: "\" A .vimrc file\n", }, } for _, test := range testCases { t.Run(test.desc, func(t *testing.T) { - p, err := NewDirScope(test.input, AllLayersScope) + p, err := NewScopeFromDir(test.input, AllLayersScope) if err != nil { t.Errorf("could not create NewDirScope: %w", err) } @@ -129,7 +164,7 @@ func TestFilesByGlob(t *testing.T) { } for _, test := range testCases { t.Run(test.desc, func(t *testing.T) { - p, err := NewDirScope(test.input, AllLayersScope) + p, err := NewScopeFromDir(test.input, AllLayersScope) if err != nil { t.Errorf("could not create NewDirScope: %w", err) }