From 4231f38fa2628880afbb9bce3c6180993b66f478 Mon Sep 17 00:00:00 2001 From: Christopher Angelo Phillips <32073428+spiffcs@users.noreply.github.com> Date: Fri, 18 Mar 2022 15:15:10 -0400 Subject: [PATCH] add case to decode GolangBinMetadata for syftjson model (#901) Signed-off-by: Christopher Phillips --- internal/formats/syftjson/model/package.go | 5 ++ .../formats/syftjson/model/package_test.go | 52 +++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 internal/formats/syftjson/model/package_test.go diff --git a/internal/formats/syftjson/model/package.go b/internal/formats/syftjson/model/package.go index f5000350d..15f05de0a 100644 --- a/internal/formats/syftjson/model/package.go +++ b/internal/formats/syftjson/model/package.go @@ -124,6 +124,11 @@ func (p *Package) UnmarshalJSON(b []byte) error { return err } p.Metadata = payload + case pkg.GolangBinMetadataType: + var payload pkg.GolangBinMetadata + if err := json.Unmarshal(unpacker.Metadata, &payload); err != nil { + return err + } default: log.Warnf("unknown package metadata type=%q for packageID=%q", p.MetadataType, p.ID) } diff --git a/internal/formats/syftjson/model/package_test.go b/internal/formats/syftjson/model/package_test.go new file mode 100644 index 000000000..305892efe --- /dev/null +++ b/internal/formats/syftjson/model/package_test.go @@ -0,0 +1,52 @@ +package model + +import "testing" + +func TestUnmarshalPackage(t *testing.T) { + tests := []struct { + name string + p *Package + packageData []byte + }{ + { + name: "Package.UnmarshalJSON will unmarshal blank json", + p: &Package{}, + packageData: []byte(`{}`), + }, + { + name: "Package.UnmarshalJSON unmarshals PackageBasicData", + p: &Package{}, + packageData: []byte(`{ + "id": "8b594519bc23da50", + "name": "gopkg.in/square/go-jose.v2", + "version": "v2.6.0", + "type": "go-module", + "foundBy": "go-module-binary-cataloger", + "locations": [ + { + "path": "/Users/hal/go/bin/syft" + } + ], + "licenses": [], + "language": "go", + "cpes": [], + "purl": "pkg:golang/gopkg.in/square/go-jose.v2@v2.6.0", + "metadataType": "GolangBinMetadata", + "metadata": { + "goCompiledVersion": "go1.18", + "architecture": "amd64", + "h1Digest": "h1:NGk74WTnPKBNUhNzQX7PYcTLUjoq7mzKk2OKbvwk2iI=" + } + }`), + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + err := test.p.UnmarshalJSON(test.packageData) + if err != nil { + t.Fatalf("could not unmarshal packageData: %v", err) + } + }) + } +}