mirror of
https://github.com/anchore/syft
synced 2024-11-10 06:14:16 +00:00
1daf18fee9
Signed-off-by: Colm O hEigeartaigh <coheigea@apache.org>
142 lines
2.7 KiB
Go
142 lines
2.7 KiB
Go
//go:build !windows
|
|
// +build !windows
|
|
|
|
package file
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"path"
|
|
"testing"
|
|
)
|
|
|
|
func TestNewZipFileManifest(t *testing.T) {
|
|
cwd, err := os.Getwd()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
sourceDirPath := path.Join(cwd, "test-fixtures", "zip-source")
|
|
err = ensureNestedZipExists(t, sourceDirPath)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
archiveFilePath := setupZipFileTest(t, sourceDirPath, false)
|
|
|
|
actual, err := NewZipFileManifest(archiveFilePath)
|
|
if err != nil {
|
|
t.Fatalf("unable to extract from unzip archive: %+v", err)
|
|
}
|
|
|
|
if len(expectedZipArchiveEntries) != len(actual) {
|
|
t.Fatalf("mismatched manifest: %d != %d", len(actual), len(expectedZipArchiveEntries))
|
|
}
|
|
|
|
for _, e := range expectedZipArchiveEntries {
|
|
_, ok := actual[e]
|
|
if !ok {
|
|
t.Errorf("missing path: %s", e)
|
|
}
|
|
}
|
|
|
|
if t.Failed() {
|
|
b, err := json.MarshalIndent(actual, "", " ")
|
|
if err != nil {
|
|
t.Fatalf("can't show results: %+v", err)
|
|
}
|
|
|
|
t.Errorf("full result: %s", string(b))
|
|
}
|
|
}
|
|
|
|
func TestNewZip64FileManifest(t *testing.T) {
|
|
cwd, err := os.Getwd()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
sourceDirPath := path.Join(cwd, "test-fixtures", "zip-source")
|
|
archiveFilePath := setupZipFileTest(t, sourceDirPath, true)
|
|
|
|
actual, err := NewZipFileManifest(archiveFilePath)
|
|
if err != nil {
|
|
t.Fatalf("unable to extract from unzip archive: %+v", err)
|
|
}
|
|
|
|
if len(expectedZipArchiveEntries) != len(actual) {
|
|
t.Fatalf("mismatched manifest: %d != %d", len(actual), len(expectedZipArchiveEntries))
|
|
}
|
|
|
|
for _, e := range expectedZipArchiveEntries {
|
|
_, ok := actual[e]
|
|
if !ok {
|
|
t.Errorf("missing path: %s", e)
|
|
}
|
|
}
|
|
|
|
if t.Failed() {
|
|
b, err := json.MarshalIndent(actual, "", " ")
|
|
if err != nil {
|
|
t.Fatalf("can't show results: %+v", err)
|
|
}
|
|
|
|
t.Errorf("full result: %s", string(b))
|
|
}
|
|
}
|
|
|
|
func TestZipFileManifest_GlobMatch(t *testing.T) {
|
|
cwd, err := os.Getwd()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
sourceDirPath := path.Join(cwd, "test-fixtures", "zip-source")
|
|
err = ensureNestedZipExists(t, sourceDirPath)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
archiveFilePath := setupZipFileTest(t, sourceDirPath, false)
|
|
|
|
z, err := NewZipFileManifest(archiveFilePath)
|
|
if err != nil {
|
|
t.Fatalf("unable to extract from unzip archive: %+v", err)
|
|
}
|
|
|
|
cases := []struct {
|
|
glob string
|
|
expected string
|
|
}{
|
|
{
|
|
"/b*",
|
|
"b-file.txt",
|
|
},
|
|
{
|
|
"*/a-file.txt",
|
|
"some-dir/a-file.txt",
|
|
},
|
|
{
|
|
"*/A-file.txt",
|
|
"some-dir/a-file.txt",
|
|
},
|
|
{
|
|
"**/*.zip",
|
|
"nested.zip",
|
|
},
|
|
}
|
|
|
|
for _, tc := range cases {
|
|
t.Run(tc.glob, func(t *testing.T) {
|
|
glob := tc.glob
|
|
|
|
results := z.GlobMatch(true, glob)
|
|
|
|
if len(results) == 1 && results[0] == tc.expected {
|
|
return
|
|
}
|
|
|
|
t.Errorf("unexpected results for glob '%s': %+v", glob, results)
|
|
})
|
|
}
|
|
}
|