From ae32942a180a7cf0d4304012e82719e20474c052 Mon Sep 17 00:00:00 2001 From: Alex Goodman Date: Thu, 18 Mar 2021 08:58:29 -0400 Subject: [PATCH] update import to require patching image metadata source field Signed-off-by: Alex Goodman --- internal/anchore/import.go | 3 ++- internal/anchore/import_package_sbom.go | 12 ++++++------ internal/anchore/import_package_sbom_test.go | 20 +++++++++----------- 3 files changed, 17 insertions(+), 18 deletions(-) diff --git a/internal/anchore/import.go b/internal/anchore/import.go index f6f62b861..17a679879 100644 --- a/internal/anchore/import.go +++ b/internal/anchore/import.go @@ -26,6 +26,7 @@ type ImportConfig struct { Distro *distro.Distro Dockerfile []byte OverwriteExistingUpload bool + Scope source.Scope } func importProgress(source string) (*progress.Stage, *progress.Manual) { @@ -71,7 +72,7 @@ func (c *Client) Import(ctx context.Context, cfg ImportConfig) error { prog.N++ sessionID := startOperation.Uuid - packageDigest, err := importPackageSBOM(authedCtx, c.client.ImportsApi, sessionID, cfg.SourceMetadata, cfg.Catalog, cfg.Distro, stage) + packageDigest, err := importPackageSBOM(authedCtx, c.client.ImportsApi, sessionID, cfg.SourceMetadata, cfg.Catalog, cfg.Distro, cfg.Scope, stage) if err != nil { return fmt.Errorf("failed to import Package SBOM: %w", err) } diff --git a/internal/anchore/import_package_sbom.go b/internal/anchore/import_package_sbom.go index f70a27e3d..02b832e7e 100644 --- a/internal/anchore/import_package_sbom.go +++ b/internal/anchore/import_package_sbom.go @@ -8,9 +8,9 @@ import ( "fmt" "net/http" - "github.com/wagoodman/go-progress" + "github.com/anchore/syft/internal/presenter/packages" - jsonPresenter "github.com/anchore/syft/syft/presenter/json" + "github.com/wagoodman/go-progress" "github.com/anchore/syft/syft/distro" "github.com/anchore/syft/syft/source" @@ -24,9 +24,9 @@ type packageSBOMImportAPI interface { ImportImagePackages(context.Context, string, external.ImagePackageManifest) (external.ImageImportContentResponse, *http.Response, error) } -func packageSbomModel(s source.Metadata, catalog *pkg.Catalog, d *distro.Distro) (*external.ImagePackageManifest, error) { +func packageSbomModel(s source.Metadata, catalog *pkg.Catalog, d *distro.Distro, scope source.Scope) (*external.ImagePackageManifest, error) { var buf bytes.Buffer - pres := jsonPresenter.NewPresenter(catalog, s, d) + pres := packages.NewJSONPresenter(catalog, s, d, scope) err := pres.Present(&buf) if err != nil { return nil, fmt.Errorf("unable to serialize results: %w", err) @@ -41,11 +41,11 @@ func packageSbomModel(s source.Metadata, catalog *pkg.Catalog, d *distro.Distro) return &model, nil } -func importPackageSBOM(ctx context.Context, api packageSBOMImportAPI, sessionID string, s source.Metadata, catalog *pkg.Catalog, d *distro.Distro, stage *progress.Stage) (string, error) { +func importPackageSBOM(ctx context.Context, api packageSBOMImportAPI, sessionID string, s source.Metadata, catalog *pkg.Catalog, d *distro.Distro, scope source.Scope, stage *progress.Stage) (string, error) { log.Debug("importing package SBOM") stage.Current = "package SBOM" - model, err := packageSbomModel(s, catalog, d) + model, err := packageSbomModel(s, catalog, d, scope) if err != nil { return "", fmt.Errorf("unable to create PackageSBOM model: %w", err) } diff --git a/internal/anchore/import_package_sbom_test.go b/internal/anchore/import_package_sbom_test.go index becb74bec..cf97899ea 100644 --- a/internal/anchore/import_package_sbom_test.go +++ b/internal/anchore/import_package_sbom_test.go @@ -9,9 +9,9 @@ import ( "strings" "testing" - "github.com/wagoodman/go-progress" + "github.com/anchore/syft/internal/presenter/packages" - jsonPresenter "github.com/anchore/syft/syft/presenter/json" + "github.com/wagoodman/go-progress" "github.com/anchore/syft/syft/distro" @@ -38,7 +38,6 @@ func TestPackageSbomToModel(t *testing.T) { Scheme: source.ImageScheme, ImageMetadata: source.ImageMetadata{ UserInput: "user-in", - Scope: "scope!", Layers: []source.LayerMetadata{ { MediaType: "layer-metadata-type!", @@ -76,7 +75,7 @@ func TestPackageSbomToModel(t *testing.T) { c := pkg.NewCatalog(p) - model, err := packageSbomModel(m, c, &d) + model, err := packageSbomModel(m, c, &d, source.AllLayersScope) if err != nil { t.Fatalf("unable to generate model from source material: %+v", err) } @@ -89,19 +88,19 @@ func TestPackageSbomToModel(t *testing.T) { } var buf bytes.Buffer - pres := jsonPresenter.NewPresenter(c, m, &d) + pres := packages.NewJSONPresenter(c, m, &d, source.AllLayersScope) if err := pres.Present(&buf); err != nil { t.Fatalf("unable to get expected json: %+v", err) } // unmarshal expected result - var expectedDoc jsonPresenter.Document + var expectedDoc packages.JSONDocument if err := json.Unmarshal(buf.Bytes(), &expectedDoc); err != nil { t.Fatalf("unable to parse json doc: %+v", err) } // unmarshal actual result - var actualDoc jsonPresenter.Document + var actualDoc packages.JSONDocument if err := json.Unmarshal(modelJSON, &actualDoc); err != nil { t.Fatalf("unable to parse json doc: %+v", err) } @@ -178,10 +177,9 @@ func TestPackageSbomImport(t *testing.T) { }) m := source.Metadata{ - Scheme: "a-schema", + Scheme: source.ImageScheme, ImageMetadata: source.ImageMetadata{ UserInput: "user-in", - Scope: "scope!", Layers: nil, Size: 10, ManifestDigest: "sha256:digest!", @@ -192,7 +190,7 @@ func TestPackageSbomImport(t *testing.T) { d, _ := distro.NewDistro(distro.CentOS, "8.0", "") - theModel, err := packageSbomModel(m, catalog, &d) + theModel, err := packageSbomModel(m, catalog, &d, source.AllLayersScope) if err != nil { t.Fatalf("could not get sbom model: %+v", err) } @@ -231,7 +229,7 @@ func TestPackageSbomImport(t *testing.T) { for _, test := range tests { t.Run(test.name, func(t *testing.T) { - digest, err := importPackageSBOM(context.TODO(), test.api, sessionID, m, catalog, &d, &progress.Stage{}) + digest, err := importPackageSBOM(context.TODO(), test.api, sessionID, m, catalog, &d, source.AllLayersScope, &progress.Stage{}) // validate error handling if err != nil && !test.expectsError {