add a cataloger for binaries built with rust-audit (#1116)

* add a cataloger for binaries built with rust-audit

Signed-off-by: Tom Fay <tomfay@microsoft.com>
This commit is contained in:
Tom Fay
2022-07-28 18:17:38 +00:00
committed by GitHub
parent 62897fbc89
commit 9896ff1b1f
23 changed files with 246 additions and 80 deletions
+1 -1
View File
@@ -54,7 +54,7 @@ func BenchmarkImagePackageCatalogers(b *testing.B) {
}
func TestPkgCoverageImage(t *testing.T) {
sbom, _ := catalogFixtureImage(t, "image-pkg-coverage", source.SquashedScope)
sbom, _ := catalogFixtureImage(t, "image-pkg-coverage", source.SquashedScope, false)
observedLanguages := internal.NewStringSet()
definedLanguages := internal.NewStringSet()
+1 -1
View File
@@ -36,7 +36,7 @@ var convertibleFormats = []sbom.Format{
func TestConvertCmd(t *testing.T) {
for _, format := range convertibleFormats {
t.Run(format.ID().String(), func(t *testing.T) {
sbom, _ := catalogFixtureImage(t, "image-pkg-coverage", source.SquashedScope)
sbom, _ := catalogFixtureImage(t, "image-pkg-coverage", source.SquashedScope, false)
format := syft.FormatByID(syftjson.ID)
f, err := ioutil.TempFile("", "test-convert-sbom-")
+1 -1
View File
@@ -10,7 +10,7 @@ import (
)
func TestDistroImage(t *testing.T) {
sbom, _ := catalogFixtureImage(t, "image-distro-id", source.SquashedScope)
sbom, _ := catalogFixtureImage(t, "image-distro-id", source.SquashedScope, false)
expected := &linux.Release{
PrettyName: "BusyBox v1.31.1",
+1 -1
View File
@@ -64,7 +64,7 @@ func TestEncodeDecodeEncodeCycleComparison(t *testing.T) {
for _, test := range tests {
t.Run(fmt.Sprintf("%s", test.formatOption), func(t *testing.T) {
for _, image := range images {
originalSBOM, _ := catalogFixtureImage(t, image, source.SquashedScope)
originalSBOM, _ := catalogFixtureImage(t, image, source.SquashedScope, false)
format := syft.FormatByID(test.formatOption)
require.NotNil(t, format)
+1 -1
View File
@@ -8,7 +8,7 @@ import (
)
func TestMarinerDistroless(t *testing.T) {
sbom, _ := catalogFixtureImage(t, "image-mariner-distroless", source.SquashedScope)
sbom, _ := catalogFixtureImage(t, "image-mariner-distroless", source.SquashedScope, false)
expectedPkgs := 12
actualPkgs := 0
@@ -56,7 +56,7 @@ func TestPackageDeduplication(t *testing.T) {
for _, tt := range tests {
t.Run(string(tt.scope), func(t *testing.T) {
sbom, _ := catalogFixtureImage(t, "image-vertical-package-dups", tt.scope)
sbom, _ := catalogFixtureImage(t, "image-vertical-package-dups", tt.scope, false)
assert.Equal(t, tt.packageCount, sbom.Artifacts.PackageCatalog.PackageCount())
for name, expectedInstanceCount := range tt.instanceCount {
@@ -23,7 +23,7 @@ func TestPackageOwnershipRelationships(t *testing.T) {
for _, test := range tests {
t.Run(test.fixture, func(t *testing.T) {
sbom, _ := catalogFixtureImage(t, test.fixture, source.SquashedScope)
sbom, _ := catalogFixtureImage(t, test.fixture, source.SquashedScope, false)
output := bytes.NewBufferString("")
err := syftjson.Format().Encode(output, sbom)
@@ -10,7 +10,7 @@ import (
func TestRegression212ApkBufferSize(t *testing.T) {
// This is a regression test for issue #212 (https://github.com/anchore/syft/issues/212) in which the apk db could
// not be processed due to a scanner buffer that was too small
sbom, _ := catalogFixtureImage(t, "image-large-apk-data", source.SquashedScope)
sbom, _ := catalogFixtureImage(t, "image-large-apk-data", source.SquashedScope, false)
expectedPkgs := 58
actualPkgs := 0
@@ -16,7 +16,7 @@ func TestRegressionGoArchDiscovery(t *testing.T) {
)
// This is a regression test to make sure the way we detect go binary packages
// stays consistent and reproducible as the tool chain evolves
sbom, _ := catalogFixtureImage(t, "image-go-bin-arch-coverage", source.SquashedScope)
sbom, _ := catalogFixtureImage(t, "image-go-bin-arch-coverage", source.SquashedScope, false)
var actualELF, actualWIN, actualMACOS int
@@ -6,5 +6,5 @@ import (
)
func TestRegressionJavaNoMainPackage(t *testing.T) { // Regression: https://github.com/anchore/syft/issues/252
catalogFixtureImage(t, "image-java-no-main-package", source.SquashedScope)
catalogFixtureImage(t, "image-java-no-main-package", source.SquashedScope, false)
}
@@ -0,0 +1,22 @@
package integration
import (
"testing"
"github.com/anchore/syft/syft/pkg"
"github.com/anchore/syft/syft/source"
)
func TestRustAudit(t *testing.T) {
sbom, _ := catalogFixtureImage(t, "image-rust-auditable", source.SquashedScope, true)
expectedPkgs := 2
actualPkgs := 0
for range sbom.Artifacts.PackageCatalog.Enumerate(pkg.RustPkg) {
actualPkgs += 1
}
if actualPkgs != expectedPkgs {
t.Errorf("unexpected number of Rust packages: %d != %d", expectedPkgs, actualPkgs)
}
}
+1 -1
View File
@@ -11,7 +11,7 @@ import (
func TestSqliteRpm(t *testing.T) {
// This is a regression test for issue #469 (https://github.com/anchore/syft/issues/469). Recent RPM
// based distribution store package data in an sqlite database
sbom, _ := catalogFixtureImage(t, "image-sqlite-rpmdb", source.SquashedScope)
sbom, _ := catalogFixtureImage(t, "image-sqlite-rpmdb", source.SquashedScope, false)
expectedPkgs := 139
actualPkgs := 0
@@ -0,0 +1,2 @@
# An image containing the example hello-auditable binary from https://github.com/Shnatsel/rust-audit/tree/master/hello-auditable
FROM docker.io/tofay/hello-rust-auditable:latest
+4 -1
View File
@@ -13,7 +13,7 @@ import (
"github.com/anchore/syft/syft/source"
)
func catalogFixtureImage(t *testing.T, fixtureImageName string, scope source.Scope) (sbom.SBOM, *source.Source) {
func catalogFixtureImage(t *testing.T, fixtureImageName string, scope source.Scope, allCatalogers bool) (sbom.SBOM, *source.Source) {
imagetest.GetFixtureImage(t, "docker-archive", fixtureImageName)
tarPath := imagetest.GetFixtureImageTarPath(t, fixtureImageName)
userInput := "docker-archive:" + tarPath
@@ -25,6 +25,9 @@ func catalogFixtureImage(t *testing.T, fixtureImageName string, scope source.Sco
// TODO: this would be better with functional options (after/during API refactor)
c := cataloger.DefaultConfig()
if allCatalogers {
c.Catalogers = []string{"all"}
}
c.Search.Scope = scope
pkgCatalog, relationships, actualDistro, err := syft.CatalogPackages(theSource, c)
if err != nil {