Skip to content

Add schema-based rules for tools data of package index #202

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 7, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
482 changes: 481 additions & 1 deletion internal/rule/ruleconfiguration/ruleconfiguration.go

Large diffs are not rendered by default.

600 changes: 600 additions & 0 deletions internal/rule/rulefunction/packageindex.go

Large diffs are not rendered by default.

300 changes: 300 additions & 0 deletions internal/rule/rulefunction/packageindex_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -922,6 +922,196 @@ func TestPackageIndexPackagesPlatformsToolsDependenciesVersionNonSemver(t *testi
checkPackageIndexRuleFunction(PackageIndexPackagesPlatformsToolsDependenciesVersionNonSemver, testTables, t)
}

func TestPackageIndexPackagesToolsMissing(t *testing.T) {
testTables := []packageIndexRuleFunctionTestTable{
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
{"packages[].tools missing", "packages-tools-missing", ruleresult.Fail, "^foopackager$"},
{"Valid", "valid-package-index", ruleresult.Pass, ""},
}

checkPackageIndexRuleFunction(PackageIndexPackagesToolsMissing, testTables, t)
}

func TestPackageIndexPackagesToolsIncorrectType(t *testing.T) {
testTables := []packageIndexRuleFunctionTestTable{
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
{"Incorrect packages[].tools type", "packages-tools-incorrect-type", ruleresult.Fail, "^foopackager$"},
{"Valid", "valid-package-index", ruleresult.Pass, ""},
}

checkPackageIndexRuleFunction(PackageIndexPackagesToolsIncorrectType, testTables, t)
}

func TestPackageIndexPackagesToolsAdditionalProperties(t *testing.T) {
testTables := []packageIndexRuleFunctionTestTable{
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
{"Additional packages[].tools[] properties", "packages-tools-additional-properties", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2$"},
{"Valid", "valid-package-index", ruleresult.Pass, ""},
}

checkPackageIndexRuleFunction(PackageIndexPackagesToolsAdditionalProperties, testTables, t)
}

func TestPackageIndexPackagesToolsNameMissing(t *testing.T) {
testTables := []packageIndexRuleFunctionTestTable{
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
{"packages[].tools[].name missing", "packages-tools-name-missing", ruleresult.Fail, "^/packages/0/tools/0$"},
{"Valid", "valid-package-index", ruleresult.Pass, ""},
}

checkPackageIndexRuleFunction(PackageIndexPackagesToolsNameMissing, testTables, t)
}

func TestPackageIndexPackagesToolsNameIncorrectType(t *testing.T) {
testTables := []packageIndexRuleFunctionTestTable{
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
{"Incorrect packages[].tools.name type", "packages-tools-name-incorrect-type", ruleresult.Fail, "^/packages/0/tools/0$"},
{"Valid", "valid-package-index", ruleresult.Pass, ""},
}

checkPackageIndexRuleFunction(PackageIndexPackagesToolsNameIncorrectType, testTables, t)
}

func TestPackageIndexPackagesToolsNameLTMinLength(t *testing.T) {
testTables := []packageIndexRuleFunctionTestTable{
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
{"packages[].tools[].name < min length", "packages-tools-name-length-lt", ruleresult.Fail, "^/packages/0/tools/0$"},
{"Valid", "valid-package-index", ruleresult.Pass, ""},
}

checkPackageIndexRuleFunction(PackageIndexPackagesToolsNameLTMinLength, testTables, t)
}

func TestPackageIndexPackagesToolsVersionMissing(t *testing.T) {
testTables := []packageIndexRuleFunctionTestTable{
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
{"packages[].tools[].version missing", "packages-tools-version-missing", ruleresult.Fail, "^/packages/0/tools/0$"},
{"Valid", "valid-package-index", ruleresult.Pass, ""},
}

checkPackageIndexRuleFunction(PackageIndexPackagesToolsVersionMissing, testTables, t)
}

func TestPackageIndexPackagesToolsVersionIncorrectType(t *testing.T) {
testTables := []packageIndexRuleFunctionTestTable{
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
{"Incorrect packages[].tools[].version type", "packages-tools-version-incorrect-type", ruleresult.Fail, "^/packages/0/tools/0$"},
{"Valid", "valid-package-index", ruleresult.Pass, ""},
}

checkPackageIndexRuleFunction(PackageIndexPackagesToolsVersionIncorrectType, testTables, t)
}

func TestPackageIndexPackagesToolsVersionNonRelaxedSemver(t *testing.T) {
testTables := []packageIndexRuleFunctionTestTable{
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
{"packages[].tools[].version not relaxed semver", "packages-tools-version-non-relaxed-semver", ruleresult.Fail, "^foopackager:openocd@foo$"},
{"Valid", "valid-package-index", ruleresult.Pass, ""},
}

checkPackageIndexRuleFunction(PackageIndexPackagesToolsVersionNonRelaxedSemver, testTables, t)
}

func TestPackageIndexPackagesToolsVersionNonSemver(t *testing.T) {
testTables := []packageIndexRuleFunctionTestTable{
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
{"packages[].tools[].version not semver", "packages-tools-version-not-semver", ruleresult.Fail, "^foopackager:[email protected]$"},
{"Valid", "valid-package-index", ruleresult.Pass, ""},
}

checkPackageIndexRuleFunction(PackageIndexPackagesToolsVersionNonSemver, testTables, t)
}

func TestPackageIndexPackagesToolsSystemsMissing(t *testing.T) {
testTables := []packageIndexRuleFunctionTestTable{
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
{"packages[].tools[].systems[] missing", "packages-tools-systems-missing", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2$"},
{"Valid", "valid-package-index", ruleresult.Pass, ""},
}

checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsMissing, testTables, t)
}

func TestPackageIndexPackagesToolsSystemsIncorrectType(t *testing.T) {
testTables := []packageIndexRuleFunctionTestTable{
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
{"Incorrect packages[].tools[].systems type", "packages-tools-systems-incorrect-type", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2$"},
{"Valid", "valid-package-index", ruleresult.Pass, ""},
}

checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsIncorrectType, testTables, t)
}

func TestPackageIndexPackagesToolsSystemsAdditionalProperties(t *testing.T) {
testTables := []packageIndexRuleFunctionTestTable{
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
{"Additional packages[].tools[].systems[] properties", "packages-tools-systems-additional-properties", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2 - aarch64-linux-gnu$"},
{"Valid", "valid-package-index", ruleresult.Pass, ""},
}

checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsAdditionalProperties, testTables, t)
}

func TestPackageIndexPackagesToolsSystemsHostMissing(t *testing.T) {
testTables := []packageIndexRuleFunctionTestTable{
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
{"packages[].tools[].systems[].host missing", "packages-tools-systems-host-missing", ruleresult.Fail, "^/packages/0/tools/0/systems/0$"},
{"Valid", "valid-package-index", ruleresult.Pass, ""},
}

checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsHostMissing, testTables, t)
}

func TestPackageIndexPackagesToolsSystemsHostIncorrectType(t *testing.T) {
testTables := []packageIndexRuleFunctionTestTable{
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
{"Incorrect packages[].tools[].systems[].host type", "packages-tools-systems-host-incorrect-type", ruleresult.Fail, "^/packages/0/tools/0/systems/0$"},
{"Valid", "valid-package-index", ruleresult.Pass, ""},
}

checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsHostIncorrectType, testTables, t)
}

func TestPackageIndexPackagesToolsSystemsHostInvalid(t *testing.T) {
testTables := []packageIndexRuleFunctionTestTable{
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
{"Invalid packages[].tools[].systems[].host format", "packages-tools-systems-host-invalid", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2 - foo$"},
{"Valid", "valid-package-index", ruleresult.Pass, ""},
}

checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsHostInvalid, testTables, t)
}

func TestPackageIndexPackagesToolsSystemsUrlMissing(t *testing.T) {
testTables := []packageIndexRuleFunctionTestTable{
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
{"packages[].tools[].systems[].url missing", "packages-tools-systems-url-missing", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2 - aarch64-linux-gnu$"},
{"Valid", "valid-package-index", ruleresult.Pass, ""},
}

checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsUrlMissing, testTables, t)
}

func TestPackageIndexPackagesToolsSystemsUrlIncorrectType(t *testing.T) {
testTables := []packageIndexRuleFunctionTestTable{
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
{"Incorrect packages[].tools[].systems[].url type", "packages-tools-systems-url-incorrect-type", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2 - aarch64-linux-gnu$"},
{"Valid", "valid-package-index", ruleresult.Pass, ""},
}

checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsUrlIncorrectType, testTables, t)
}

func TestPackageIndexPackagesToolsSystemsUrlInvalidFormat(t *testing.T) {
testTables := []packageIndexRuleFunctionTestTable{
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
{"Incorrect packages[].tools[].systems[].url format", "packages-tools-systems-url-invalid-format", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2 - aarch64-linux-gnu$"},
{"Valid", "valid-package-index", ruleresult.Pass, ""},
}

checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsUrlInvalidFormat, testTables, t)
}

func TestPackageIndexPackagesToolsSystemsURLDeadLink(t *testing.T) {
testTables := []packageIndexRuleFunctionTestTable{
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
Expand All @@ -931,3 +1121,113 @@ func TestPackageIndexPackagesToolsSystemsURLDeadLink(t *testing.T) {

checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsURLDeadLink, testTables, t)
}

func TestPackageIndexPackagesToolsSystemsArchiveFileNameMissing(t *testing.T) {
testTables := []packageIndexRuleFunctionTestTable{
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
{"packages[].tools[].systems[].archiveFileName missing", "packages-tools-systems-archivefilename-missing", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2 - aarch64-linux-gnu$"},
{"Valid", "valid-package-index", ruleresult.Pass, ""},
}

checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsArchiveFileNameMissing, testTables, t)
}

func TestPackageIndexPackagesToolsSystemsArchiveFileNameIncorrectType(t *testing.T) {
testTables := []packageIndexRuleFunctionTestTable{
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
{"Incorrect packages[].tools[].systems[].archiveFileName type", "packages-tools-systems-archivefilename-incorrect-type", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2 - aarch64-linux-gnu$"},
{"Valid", "valid-package-index", ruleresult.Pass, ""},
}

checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsArchiveFileNameIncorrectType, testTables, t)
}

func TestPackageIndexPackagesToolsSystemsArchiveFileNameLTMinLength(t *testing.T) {
testTables := []packageIndexRuleFunctionTestTable{
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
{"packages[].tools[].systems[].archiveFileName < min length", "packages-tools-systems-archivefilename-length-lt", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2 - aarch64-linux-gnu$"},
{"Valid", "valid-package-index", ruleresult.Pass, ""},
}

checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsArchiveFileNameLTMinLength, testTables, t)
}

func TestPackageIndexPackagesToolsSystemsArchiveFileNameInvalid(t *testing.T) {
testTables := []packageIndexRuleFunctionTestTable{
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
{"Invalid packages[].tools[].systems[].archiveFileName format", "packages-tools-systems-archivefilename-invalid", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2 - aarch64-linux-gnu$"},
{"Valid", "valid-package-index", ruleresult.Pass, ""},
}

checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsArchiveFileNameInvalid, testTables, t)
}

func TestPackageIndexPackagesToolsSystemsChecksumMissing(t *testing.T) {
testTables := []packageIndexRuleFunctionTestTable{
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
{"packages[].tools[].systems[].checksum missing", "packages-tools-systems-checksum-missing", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2 - aarch64-linux-gnu$"},
{"Valid", "valid-package-index", ruleresult.Pass, ""},
}

checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsChecksumMissing, testTables, t)
}

func TestPackageIndexPackagesToolsSystemsChecksumIncorrectType(t *testing.T) {
testTables := []packageIndexRuleFunctionTestTable{
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
{"Incorrect packages[].tools[].systems[].checksum type", "packages-tools-systems-checksum-incorrect-type", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2 - aarch64-linux-gnu$"},
{"Valid", "valid-package-index", ruleresult.Pass, ""},
}

checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsChecksumIncorrectType, testTables, t)
}

func TestPackageIndexPackagesToolsSystemsChecksumInvalid(t *testing.T) {
testTables := []packageIndexRuleFunctionTestTable{
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
{"Invalid packages[].tools[].systems[].checksum format", "packages-tools-systems-checksum-invalid", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2 - aarch64-linux-gnu$"},
{"Valid", "valid-package-index", ruleresult.Pass, ""},
}

checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsChecksumInvalid, testTables, t)
}

func TestPackageIndexPackagesToolsSystemsChecksumDiscouragedAlgorithm(t *testing.T) {
testTables := []packageIndexRuleFunctionTestTable{
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
{"packages[].tools[].systems[].checksum uses discouraged algorithm", "packages-tools-systems-checksum-discouraged", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2 - aarch64-linux-gnu$"},
{"Valid", "valid-package-index", ruleresult.Pass, ""},
}

checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsChecksumDiscouragedAlgorithm, testTables, t)
}

func TestPackageIndexPackagesToolsSystemsSizeMissing(t *testing.T) {
testTables := []packageIndexRuleFunctionTestTable{
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
{"packages[].tools[].systems[].size missing", "packages-tools-systems-size-missing", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2 - aarch64-linux-gnu$"},
{"Valid", "valid-package-index", ruleresult.Pass, ""},
}

checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsSizeMissing, testTables, t)
}

func TestPackageIndexPackagesToolsSystemsSizeIncorrectType(t *testing.T) {
testTables := []packageIndexRuleFunctionTestTable{
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
{"Incorrect packages[].tools[].systems[].size type", "packages-tools-systems-size-incorrect-type", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2 - aarch64-linux-gnu$"},
{"Valid", "valid-package-index", ruleresult.Pass, ""},
}

checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsSizeIncorrectType, testTables, t)
}

func TestPackageIndexPackagesToolsSystemsSizeInvalid(t *testing.T) {
testTables := []packageIndexRuleFunctionTestTable{
{"Invalid JSON", "invalid-JSON", ruleresult.NotRun, ""},
{"Invalid packages[].tools[].systems[].size format", "packages-tools-systems-size-invalid", ruleresult.Fail, "^foopackager:openocd@0\\.11\\.0-arduino2 - aarch64-linux-gnu$"},
{"Valid", "valid-package-index", ruleresult.Pass, ""},
}

checkPackageIndexRuleFunction(PackageIndexPackagesToolsSystemsSizeInvalid, testTables, t)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
{
"packages": [
{
"name": "foopackager",
"maintainer": "Jane Developer",
"websiteURL": "http://example.com",
"email": "[email protected]",
"help": {
"online": "http://example.com"
},
"platforms": [
{
"name": "My Board",
"architecture": "avr",
"version": "1.0.0",
"category": "Contributed",
"help": {
"online": "http://example.com"
},
"url": "http://example.com",
"archiveFileName": "myboard-1.0.0.zip",
"checksum": "MD5:6c0f556759894aa1a45e8af423a08ce8",
"size": "15005",
"boards": [],
"toolsDependencies": []
}
],
"tools": [
{
"foo": "bar",
"name": "openocd",
"version": "0.11.0-arduino2",
"systems": [
{
"size": "1902818",
"checksum": "SHA-256:a1aa7f1435a61eafb72ee90722f2496d6a34a7a0f085d0315c2613e4a548b824",
"host": "aarch64-linux-gnu",
"archiveFileName": "openocd-0.11.0-arduino2-static-aarch64-linux-gnu.tar.bz2",
"url": "http://example.com"
},
{
"size": "1986716",
"checksum": "SHA-256:57041130160be086e69387cceb4616eefc9819a0ef75de1f7c11aea57fb92699",
"host": "arm-linux-gnueabihf",
"archiveFileName": "openocd-0.11.0-arduino2-static-arm-linux-gnueabihf.tar.bz2",
"url": "http://example.com"
}
]
},
{
"name": "CMSIS",
"version": "4.0.0-atmel",
"systems": [
{
"host": "arm-linux-gnueabihf",
"url": "http://example.com",
"archiveFileName": "CMSIS-4.0.0.tar.bz2",
"checksum": "SHA-256:7d637d2d7a0c6bacc22065848a201db2fff124268e4a56868260d0f472b4bbb7",
"size": "17642623"
},
{
"host": "i686-mingw32",
"url": "http://example.com",
"archiveFileName": "CMSIS-4.0.0.tar.bz2",
"checksum": "SHA-256:7d637d2d7a0c6bacc22065848a201db2fff124268e4a56868260d0f472b4bbb7",
"size": "17642623"
}
]
}
]
}
]
}
Loading