From d451a5ad3092c7679c7b497d2056aab94efd6832 Mon Sep 17 00:00:00 2001 From: Alex Goodman Date: Tue, 6 Apr 2021 16:46:15 -0400 Subject: [PATCH] update the json schema and tests with file contents section Signed-off-by: Alex Goodman --- .../poweruser/json_presenter_test.go | 3 + .../snapshot/TestJSONPresenter.golden | 16 + schema/json/schema-1.0.6.json | 935 ------------------ schema/json/schema-1.1.0.json | 70 +- .../common/generic_cataloger_test.go | 4 +- 5 files changed, 90 insertions(+), 938 deletions(-) delete mode 100644 schema/json/schema-1.0.6.json diff --git a/internal/presenter/poweruser/json_presenter_test.go b/internal/presenter/poweruser/json_presenter_test.go index 97724da69..a8928bd0f 100644 --- a/internal/presenter/poweruser/json_presenter_test.go +++ b/internal/presenter/poweruser/json_presenter_test.go @@ -125,6 +125,9 @@ func TestJSONPresenter(t *testing.T) { }, }, }, + FileContents: map[source.Location]string{ + source.NewLocation("/a/place/a"): "the-contents", + }, Distro: &distro.Distro{ Type: distro.RedHat, RawVersion: "7", diff --git a/internal/presenter/poweruser/test-fixtures/snapshot/TestJSONPresenter.golden b/internal/presenter/poweruser/test-fixtures/snapshot/TestJSONPresenter.golden index d44b5a9a8..76c0d521f 100644 --- a/internal/presenter/poweruser/test-fixtures/snapshot/TestJSONPresenter.golden +++ b/internal/presenter/poweruser/test-fixtures/snapshot/TestJSONPresenter.golden @@ -1,4 +1,12 @@ { + "fileContents": [ + { + "location": { + "path": "/a/place/a" + }, + "contents": "the-contents" + } + ], "fileMetadata": [ { "location": { @@ -198,6 +206,14 @@ "scope": "" } }, + "contents": { + "cataloger": { + "enabled": false, + "scope": "" + }, + "skip-files-above-size": 0, + "globs": null + }, "secrets": { "cataloger": { "enabled": false, diff --git a/schema/json/schema-1.0.6.json b/schema/json/schema-1.0.6.json deleted file mode 100644 index e269d1e57..000000000 --- a/schema/json/schema-1.0.6.json +++ /dev/null @@ -1,935 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-04/schema#", - "$ref": "#/definitions/Document", - "definitions": { - "ApkFileRecord": { - "required": [ - "path" - ], - "properties": { - "path": { - "type": "string" - }, - "ownerUid": { - "type": "string" - }, - "ownerGid": { - "type": "string" - }, - "permissions": { - "type": "string" - }, - "checksum": { - "type": "string" - } - }, - "additionalProperties": true, - "type": "object" - }, - "ApkMetadata": { - "required": [ - "package", - "originPackage", - "maintainer", - "version", - "license", - "architecture", - "url", - "description", - "size", - "installedSize", - "pullDependencies", - "pullChecksum", - "gitCommitOfApkPort", - "files" - ], - "properties": { - "package": { - "type": "string" - }, - "originPackage": { - "type": "string" - }, - "maintainer": { - "type": "string" - }, - "version": { - "type": "string" - }, - "license": { - "type": "string" - }, - "architecture": { - "type": "string" - }, - "url": { - "type": "string" - }, - "description": { - "type": "string" - }, - "size": { - "type": "integer" - }, - "installedSize": { - "type": "integer" - }, - "pullDependencies": { - "type": "string" - }, - "pullChecksum": { - "type": "string" - }, - "gitCommitOfApkPort": { - "type": "string" - }, - "files": { - "items": { - "$schema": "http://json-schema.org/draft-04/schema#", - "$ref": "#/definitions/ApkFileRecord" - }, - "type": "array" - } - }, - "additionalProperties": true, - "type": "object" - }, - "CargoPackageMetadata": { - "required": [ - "name", - "version", - "source", - "checksum", - "dependencies" - ], - "properties": { - "name": { - "type": "string" - }, - "version": { - "type": "string" - }, - "source": { - "type": "string" - }, - "checksum": { - "type": "string" - }, - "dependencies": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "additionalProperties": true, - "type": "object" - }, - "Classification": { - "required": [ - "class", - "metadata" - ], - "properties": { - "class": { - "type": "string" - }, - "metadata": { - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - } - }, - "additionalProperties": true, - "type": "object" - }, - "Descriptor": { - "required": [ - "name", - "version" - ], - "properties": { - "name": { - "type": "string" - }, - "version": { - "type": "string" - }, - "configuration": { - "additionalProperties": true - } - }, - "additionalProperties": true, - "type": "object" - }, - "Digest": { - "required": [ - "algorithm", - "value" - ], - "properties": { - "algorithm": { - "type": "string" - }, - "value": { - "type": "string" - } - }, - "additionalProperties": true, - "type": "object" - }, - "Distribution": { - "required": [ - "name", - "version", - "idLike" - ], - "properties": { - "name": { - "type": "string" - }, - "version": { - "type": "string" - }, - "idLike": { - "type": "string" - } - }, - "additionalProperties": true, - "type": "object" - }, - "Document": { - "required": [ - "artifacts", - "artifactRelationships", - "source", - "distro", - "descriptor", - "schema" - ], - "properties": { - "fileClassifications": { - "items": { - "$schema": "http://json-schema.org/draft-04/schema#", - "$ref": "#/definitions/FileClassifications" - }, - "type": "array" - }, - "fileMetadata": { - "items": { - "$schema": "http://json-schema.org/draft-04/schema#", - "$ref": "#/definitions/FileMetadata" - }, - "type": "array" - }, - "secrets": { - "items": { - "$schema": "http://json-schema.org/draft-04/schema#", - "$ref": "#/definitions/Secrets" - }, - "type": "array" - }, - "artifacts": { - "items": { - "$schema": "http://json-schema.org/draft-04/schema#", - "$ref": "#/definitions/Package" - }, - "type": "array" - }, - "artifactRelationships": { - "items": { - "$schema": "http://json-schema.org/draft-04/schema#", - "$ref": "#/definitions/Relationship" - }, - "type": "array" - }, - "source": { - "$schema": "http://json-schema.org/draft-04/schema#", - "$ref": "#/definitions/Source" - }, - "distro": { - "$schema": "http://json-schema.org/draft-04/schema#", - "$ref": "#/definitions/Distribution" - }, - "descriptor": { - "$schema": "http://json-schema.org/draft-04/schema#", - "$ref": "#/definitions/Descriptor" - }, - "schema": { - "$schema": "http://json-schema.org/draft-04/schema#", - "$ref": "#/definitions/Schema" - }, - "artifacts.metadata": { - "anyOf": [ - { - "type": "null" - }, - { - "$ref": "#/definitions/ApkMetadata" - }, - { - "$ref": "#/definitions/CargoPackageMetadata" - }, - { - "$ref": "#/definitions/DpkgMetadata" - }, - { - "$ref": "#/definitions/GemMetadata" - }, - { - "$ref": "#/definitions/JavaMetadata" - }, - { - "$ref": "#/definitions/NpmPackageJSONMetadata" - }, - { - "$ref": "#/definitions/PythonPackageMetadata" - }, - { - "$ref": "#/definitions/RpmdbMetadata" - } - ] - } - }, - "additionalProperties": true, - "type": "object" - }, - "DpkgFileRecord": { - "required": [ - "path", - "md5" - ], - "properties": { - "path": { - "type": "string" - }, - "md5": { - "type": "string" - } - }, - "additionalProperties": true, - "type": "object" - }, - "DpkgMetadata": { - "required": [ - "package", - "source", - "version", - "sourceVersion", - "architecture", - "maintainer", - "installedSize", - "files" - ], - "properties": { - "package": { - "type": "string" - }, - "source": { - "type": "string" - }, - "version": { - "type": "string" - }, - "sourceVersion": { - "type": "string" - }, - "architecture": { - "type": "string" - }, - "maintainer": { - "type": "string" - }, - "installedSize": { - "type": "integer" - }, - "files": { - "items": { - "$schema": "http://json-schema.org/draft-04/schema#", - "$ref": "#/definitions/DpkgFileRecord" - }, - "type": "array" - } - }, - "additionalProperties": true, - "type": "object" - }, - "FileClassifications": { - "required": [ - "location", - "classification" - ], - "properties": { - "location": { - "$schema": "http://json-schema.org/draft-04/schema#", - "$ref": "#/definitions/Location" - }, - "classification": { - "$schema": "http://json-schema.org/draft-04/schema#", - "$ref": "#/definitions/Classification" - } - }, - "additionalProperties": true, - "type": "object" - }, - "FileMetadata": { - "required": [ - "location", - "metadata" - ], - "properties": { - "location": { - "$ref": "#/definitions/Location" - }, - "metadata": { - "$schema": "http://json-schema.org/draft-04/schema#", - "$ref": "#/definitions/FileMetadataEntry" - } - }, - "additionalProperties": true, - "type": "object" - }, - "FileMetadataEntry": { - "required": [ - "mode", - "type", - "userID", - "groupID" - ], - "properties": { - "mode": { - "type": "integer" - }, - "type": { - "type": "string" - }, - "linkDestination": { - "type": "string" - }, - "userID": { - "type": "integer" - }, - "groupID": { - "type": "integer" - }, - "digests": { - "items": { - "$schema": "http://json-schema.org/draft-04/schema#", - "$ref": "#/definitions/Digest" - }, - "type": "array" - } - }, - "additionalProperties": true, - "type": "object" - }, - "GemMetadata": { - "required": [ - "name", - "version" - ], - "properties": { - "name": { - "type": "string" - }, - "version": { - "type": "string" - }, - "files": { - "items": { - "type": "string" - }, - "type": "array" - }, - "authors": { - "items": { - "type": "string" - }, - "type": "array" - }, - "licenses": { - "items": { - "type": "string" - }, - "type": "array" - }, - "homepage": { - "type": "string" - } - }, - "additionalProperties": true, - "type": "object" - }, - "JavaManifest": { - "properties": { - "main": { - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - }, - "namedSections": { - "patternProperties": { - ".*": { - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - } - }, - "additionalProperties": true, - "type": "object" - }, - "JavaMetadata": { - "required": [ - "virtualPath" - ], - "properties": { - "virtualPath": { - "type": "string" - }, - "manifest": { - "$schema": "http://json-schema.org/draft-04/schema#", - "$ref": "#/definitions/JavaManifest" - }, - "pomProperties": { - "$schema": "http://json-schema.org/draft-04/schema#", - "$ref": "#/definitions/PomProperties" - } - }, - "additionalProperties": true, - "type": "object" - }, - "Location": { - "required": [ - "path" - ], - "properties": { - "path": { - "type": "string" - }, - "layerID": { - "type": "string" - } - }, - "additionalProperties": true, - "type": "object" - }, - "NpmPackageJSONMetadata": { - "required": [ - "author", - "licenses", - "homepage", - "description", - "url" - ], - "properties": { - "files": { - "items": { - "type": "string" - }, - "type": "array" - }, - "author": { - "type": "string" - }, - "licenses": { - "items": { - "type": "string" - }, - "type": "array" - }, - "homepage": { - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": true, - "type": "object" - }, - "Package": { - "required": [ - "id", - "name", - "version", - "type", - "foundBy", - "locations", - "licenses", - "language", - "cpes", - "purl", - "metadataType", - "metadata" - ], - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "version": { - "type": "string" - }, - "type": { - "type": "string" - }, - "foundBy": { - "type": "string" - }, - "locations": { - "items": { - "$ref": "#/definitions/Location" - }, - "type": "array" - }, - "licenses": { - "items": { - "type": "string" - }, - "type": "array" - }, - "language": { - "type": "string" - }, - "cpes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "purl": { - "type": "string" - }, - "metadataType": { - "type": "string" - }, - "metadata": { - "additionalProperties": true - } - }, - "additionalProperties": true, - "type": "object" - }, - "PomProperties": { - "required": [ - "path", - "name", - "groupId", - "artifactId", - "version", - "extraFields" - ], - "properties": { - "path": { - "type": "string" - }, - "name": { - "type": "string" - }, - "groupId": { - "type": "string" - }, - "artifactId": { - "type": "string" - }, - "version": { - "type": "string" - }, - "extraFields": { - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - } - }, - "additionalProperties": true, - "type": "object" - }, - "PythonFileDigest": { - "required": [ - "algorithm", - "value" - ], - "properties": { - "algorithm": { - "type": "string" - }, - "value": { - "type": "string" - } - }, - "additionalProperties": true, - "type": "object" - }, - "PythonFileRecord": { - "required": [ - "path" - ], - "properties": { - "path": { - "type": "string" - }, - "digest": { - "$schema": "http://json-schema.org/draft-04/schema#", - "$ref": "#/definitions/PythonFileDigest" - }, - "size": { - "type": "string" - } - }, - "additionalProperties": true, - "type": "object" - }, - "PythonPackageMetadata": { - "required": [ - "name", - "version", - "license", - "author", - "authorEmail", - "platform", - "sitePackagesRootPath" - ], - "properties": { - "name": { - "type": "string" - }, - "version": { - "type": "string" - }, - "license": { - "type": "string" - }, - "author": { - "type": "string" - }, - "authorEmail": { - "type": "string" - }, - "platform": { - "type": "string" - }, - "files": { - "items": { - "$schema": "http://json-schema.org/draft-04/schema#", - "$ref": "#/definitions/PythonFileRecord" - }, - "type": "array" - }, - "sitePackagesRootPath": { - "type": "string" - }, - "topLevelPackages": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "additionalProperties": true, - "type": "object" - }, - "Relationship": { - "required": [ - "parent", - "child", - "type", - "metadata" - ], - "properties": { - "parent": { - "type": "string" - }, - "child": { - "type": "string" - }, - "type": { - "type": "string" - }, - "metadata": { - "additionalProperties": true - } - }, - "additionalProperties": true, - "type": "object" - }, - "RpmdbFileRecord": { - "required": [ - "path", - "mode", - "size", - "sha256" - ], - "properties": { - "path": { - "type": "string" - }, - "mode": { - "type": "integer" - }, - "size": { - "type": "integer" - }, - "sha256": { - "type": "string" - } - }, - "additionalProperties": true, - "type": "object" - }, - "RpmdbMetadata": { - "required": [ - "name", - "version", - "epoch", - "architecture", - "release", - "sourceRpm", - "size", - "license", - "vendor", - "files" - ], - "properties": { - "name": { - "type": "string" - }, - "version": { - "type": "string" - }, - "epoch": { - "type": "integer" - }, - "architecture": { - "type": "string" - }, - "release": { - "type": "string" - }, - "sourceRpm": { - "type": "string" - }, - "size": { - "type": "integer" - }, - "license": { - "type": "string" - }, - "vendor": { - "type": "string" - }, - "files": { - "items": { - "$schema": "http://json-schema.org/draft-04/schema#", - "$ref": "#/definitions/RpmdbFileRecord" - }, - "type": "array" - } - }, - "additionalProperties": true, - "type": "object" - }, - "Schema": { - "required": [ - "version", - "url" - ], - "properties": { - "version": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": true, - "type": "object" - }, - "SearchResult": { - "required": [ - "classification", - "lineNumber", - "lineOffset", - "seekPosition", - "length" - ], - "properties": { - "classification": { - "type": "string" - }, - "lineNumber": { - "type": "integer" - }, - "lineOffset": { - "type": "integer" - }, - "seekPosition": { - "type": "integer" - }, - "length": { - "type": "integer" - }, - "value": { - "type": "string" - } - }, - "additionalProperties": true, - "type": "object" - }, - "Secrets": { - "required": [ - "location", - "secrets" - ], - "properties": { - "location": { - "$ref": "#/definitions/Location" - }, - "secrets": { - "items": { - "$schema": "http://json-schema.org/draft-04/schema#", - "$ref": "#/definitions/SearchResult" - }, - "type": "array" - } - }, - "additionalProperties": true, - "type": "object" - }, - "Source": { - "required": [ - "type", - "target" - ], - "properties": { - "type": { - "type": "string" - }, - "target": { - "additionalProperties": true - } - }, - "additionalProperties": true, - "type": "object" - } - } -} diff --git a/schema/json/schema-1.1.0.json b/schema/json/schema-1.1.0.json index 29af14cd4..687a81c19 100644 --- a/schema/json/schema-1.1.0.json +++ b/schema/json/schema-1.1.0.json @@ -125,6 +125,27 @@ "additionalProperties": true, "type": "object" }, + "Classification": { + "required": [ + "class", + "metadata" + ], + "properties": { + "class": { + "type": "string" + }, + "metadata": { + "patternProperties": { + ".*": { + "type": "string" + } + }, + "type": "object" + } + }, + "additionalProperties": true, + "type": "object" + }, "Descriptor": { "required": [ "name", @@ -190,6 +211,20 @@ "schema" ], "properties": { + "fileClassifications": { + "items": { + "$schema": "http://json-schema.org/draft-04/schema#", + "$ref": "#/definitions/FileClassifications" + }, + "type": "array" + }, + "fileContents": { + "items": { + "$schema": "http://json-schema.org/draft-04/schema#", + "$ref": "#/definitions/FileContents" + }, + "type": "array" + }, "fileMetadata": { "items": { "$schema": "http://json-schema.org/draft-04/schema#", @@ -302,6 +337,40 @@ "additionalProperties": true, "type": "object" }, + "FileClassifications": { + "required": [ + "location", + "classification" + ], + "properties": { + "location": { + "$schema": "http://json-schema.org/draft-04/schema#", + "$ref": "#/definitions/Location" + }, + "classification": { + "$schema": "http://json-schema.org/draft-04/schema#", + "$ref": "#/definitions/Classification" + } + }, + "additionalProperties": true, + "type": "object" + }, + "FileContents": { + "required": [ + "location", + "contents" + ], + "properties": { + "location": { + "$ref": "#/definitions/Location" + }, + "contents": { + "type": "string" + } + }, + "additionalProperties": true, + "type": "object" + }, "FileMetadata": { "required": [ "location", @@ -309,7 +378,6 @@ ], "properties": { "location": { - "$schema": "http://json-schema.org/draft-04/schema#", "$ref": "#/definitions/Location" }, "metadata": { diff --git a/syft/pkg/cataloger/common/generic_cataloger_test.go b/syft/pkg/cataloger/common/generic_cataloger_test.go index 8c1f4215c..594436447 100644 --- a/syft/pkg/cataloger/common/generic_cataloger_test.go +++ b/syft/pkg/cataloger/common/generic_cataloger_test.go @@ -25,7 +25,7 @@ func parser(_ string, reader io.Reader) ([]pkg.Package, error) { func TestGenericCataloger(t *testing.T) { globParsers := map[string]ParserFn{ - "**a-path.txt": parser, + "**/a-path.txt": parser, } pathParsers := map[string]ParserFn{ "test-fixtures/another-path.txt": parser, @@ -51,7 +51,7 @@ func TestGenericCataloger(t *testing.T) { } if len(actualPkgs) != len(expectedPkgs) { - t.Fatalf("unexpected packages len: %d", len(actualPkgs)) + t.Fatalf("unexpected packages len: %d != %d", len(expectedPkgs), len(actualPkgs)) } for _, p := range actualPkgs {