@@ -922,6 +922,196 @@ func TestPackageIndexPackagesPlatformsToolsDependenciesVersionNonSemver(t *testi
922922checkPackageIndexRuleFunction (PackageIndexPackagesPlatformsToolsDependenciesVersionNonSemver ,testTables ,t )
923923}
924924
925+ func TestPackageIndexPackagesToolsMissing (t * testing.T ) {
926+ testTables := []packageIndexRuleFunctionTestTable {
927+ {"Invalid JSON" ,"invalid-JSON" ,ruleresult .NotRun ,"" },
928+ {"packages[].tools missing" ,"packages-tools-missing" ,ruleresult .Fail ,"^foopackager$" },
929+ {"Valid" ,"valid-package-index" ,ruleresult .Pass ,"" },
930+ }
931+
932+ checkPackageIndexRuleFunction (PackageIndexPackagesToolsMissing ,testTables ,t )
933+ }
934+
935+ func TestPackageIndexPackagesToolsIncorrectType (t * testing.T ) {
936+ testTables := []packageIndexRuleFunctionTestTable {
937+ {"Invalid JSON" ,"invalid-JSON" ,ruleresult .NotRun ,"" },
938+ {"Incorrect packages[].tools type" ,"packages-tools-incorrect-type" ,ruleresult .Fail ,"^foopackager$" },
939+ {"Valid" ,"valid-package-index" ,ruleresult .Pass ,"" },
940+ }
941+
942+ checkPackageIndexRuleFunction (PackageIndexPackagesToolsIncorrectType ,testTables ,t )
943+ }
944+
945+ func TestPackageIndexPackagesToolsAdditionalProperties (t * testing.T ) {
946+ testTables := []packageIndexRuleFunctionTestTable {
947+ {"Invalid JSON" ,"invalid-JSON" ,ruleresult .NotRun ,"" },
948+ {"Additional packages[].tools[] properties" ,"packages-tools-additional-properties" ,ruleresult .Fail ,"^foopackager:openocd@0\\ .11\\ .0-arduino2$" },
949+ {"Valid" ,"valid-package-index" ,ruleresult .Pass ,"" },
950+ }
951+
952+ checkPackageIndexRuleFunction (PackageIndexPackagesToolsAdditionalProperties ,testTables ,t )
953+ }
954+
955+ func TestPackageIndexPackagesToolsNameMissing (t * testing.T ) {
956+ testTables := []packageIndexRuleFunctionTestTable {
957+ {"Invalid JSON" ,"invalid-JSON" ,ruleresult .NotRun ,"" },
958+ {"packages[].tools[].name missing" ,"packages-tools-name-missing" ,ruleresult .Fail ,"^/packages/0/tools/0$" },
959+ {"Valid" ,"valid-package-index" ,ruleresult .Pass ,"" },
960+ }
961+
962+ checkPackageIndexRuleFunction (PackageIndexPackagesToolsNameMissing ,testTables ,t )
963+ }
964+
965+ func TestPackageIndexPackagesToolsNameIncorrectType (t * testing.T ) {
966+ testTables := []packageIndexRuleFunctionTestTable {
967+ {"Invalid JSON" ,"invalid-JSON" ,ruleresult .NotRun ,"" },
968+ {"Incorrect packages[].tools.name type" ,"packages-tools-name-incorrect-type" ,ruleresult .Fail ,"^/packages/0/tools/0$" },
969+ {"Valid" ,"valid-package-index" ,ruleresult .Pass ,"" },
970+ }
971+
972+ checkPackageIndexRuleFunction (PackageIndexPackagesToolsNameIncorrectType ,testTables ,t )
973+ }
974+
975+ func TestPackageIndexPackagesToolsNameLTMinLength (t * testing.T ) {
976+ testTables := []packageIndexRuleFunctionTestTable {
977+ {"Invalid JSON" ,"invalid-JSON" ,ruleresult .NotRun ,"" },
978+ {"packages[].tools[].name < min length" ,"packages-tools-name-length-lt" ,ruleresult .Fail ,"^/packages/0/tools/0$" },
979+ {"Valid" ,"valid-package-index" ,ruleresult .Pass ,"" },
980+ }
981+
982+ checkPackageIndexRuleFunction (PackageIndexPackagesToolsNameLTMinLength ,testTables ,t )
983+ }
984+
985+ func TestPackageIndexPackagesToolsVersionMissing (t * testing.T ) {
986+ testTables := []packageIndexRuleFunctionTestTable {
987+ {"Invalid JSON" ,"invalid-JSON" ,ruleresult .NotRun ,"" },
988+ {"packages[].tools[].version missing" ,"packages-tools-version-missing" ,ruleresult .Fail ,"^/packages/0/tools/0$" },
989+ {"Valid" ,"valid-package-index" ,ruleresult .Pass ,"" },
990+ }
991+
992+ checkPackageIndexRuleFunction (PackageIndexPackagesToolsVersionMissing ,testTables ,t )
993+ }
994+
995+ func TestPackageIndexPackagesToolsVersionIncorrectType (t * testing.T ) {
996+ testTables := []packageIndexRuleFunctionTestTable {
997+ {"Invalid JSON" ,"invalid-JSON" ,ruleresult .NotRun ,"" },
998+ {"Incorrect packages[].tools[].version type" ,"packages-tools-version-incorrect-type" ,ruleresult .Fail ,"^/packages/0/tools/0$" },
999+ {"Valid" ,"valid-package-index" ,ruleresult .Pass ,"" },
1000+ }
1001+
1002+ checkPackageIndexRuleFunction (PackageIndexPackagesToolsVersionIncorrectType ,testTables ,t )
1003+ }
1004+
1005+ func TestPackageIndexPackagesToolsVersionNonRelaxedSemver (t * testing.T ) {
1006+ testTables := []packageIndexRuleFunctionTestTable {
1007+ {"Invalid JSON" ,"invalid-JSON" ,ruleresult .NotRun ,"" },
1008+ {"packages[].tools[].version not relaxed semver" ,"packages-tools-version-non-relaxed-semver" ,ruleresult .Fail ,"^foopackager:openocd@foo$" },
1009+ {"Valid" ,"valid-package-index" ,ruleresult .Pass ,"" },
1010+ }
1011+
1012+ checkPackageIndexRuleFunction (PackageIndexPackagesToolsVersionNonRelaxedSemver ,testTables ,t )
1013+ }
1014+
1015+ func TestPackageIndexPackagesToolsVersionNonSemver (t * testing.T ) {
1016+ testTables := []packageIndexRuleFunctionTestTable {
1017+ {"Invalid JSON" ,"invalid-JSON" ,ruleresult .NotRun ,"" },
1018+ {"packages[].tools[].version not semver" ,"packages-tools-version-not-semver" ,ruleresult .Fail ,"^foopackager:openocd@1.0$" },
1019+ {"Valid" ,"valid-package-index" ,ruleresult .Pass ,"" },
1020+ }
1021+
1022+ checkPackageIndexRuleFunction (PackageIndexPackagesToolsVersionNonSemver ,testTables ,t )
1023+ }
1024+
1025+ func TestPackageIndexPackagesToolsSystemsMissing (t * testing.T ) {
1026+ testTables := []packageIndexRuleFunctionTestTable {
1027+ {"Invalid JSON" ,"invalid-JSON" ,ruleresult .NotRun ,"" },
1028+ {"packages[].tools[].systems[] missing" ,"packages-tools-systems-missing" ,ruleresult .Fail ,"^foopackager:openocd@0\\ .11\\ .0-arduino2$" },
1029+ {"Valid" ,"valid-package-index" ,ruleresult .Pass ,"" },
1030+ }
1031+
1032+ checkPackageIndexRuleFunction (PackageIndexPackagesToolsSystemsMissing ,testTables ,t )
1033+ }
1034+
1035+ func TestPackageIndexPackagesToolsSystemsIncorrectType (t * testing.T ) {
1036+ testTables := []packageIndexRuleFunctionTestTable {
1037+ {"Invalid JSON" ,"invalid-JSON" ,ruleresult .NotRun ,"" },
1038+ {"Incorrect packages[].tools[].systems type" ,"packages-tools-systems-incorrect-type" ,ruleresult .Fail ,"^foopackager:openocd@0\\ .11\\ .0-arduino2$" },
1039+ {"Valid" ,"valid-package-index" ,ruleresult .Pass ,"" },
1040+ }
1041+
1042+ checkPackageIndexRuleFunction (PackageIndexPackagesToolsSystemsIncorrectType ,testTables ,t )
1043+ }
1044+
1045+ func TestPackageIndexPackagesToolsSystemsAdditionalProperties (t * testing.T ) {
1046+ testTables := []packageIndexRuleFunctionTestTable {
1047+ {"Invalid JSON" ,"invalid-JSON" ,ruleresult .NotRun ,"" },
1048+ {"Additional packages[].tools[].systems[] properties" ,"packages-tools-systems-additional-properties" ,ruleresult .Fail ,"^foopackager:openocd@0\\ .11\\ .0-arduino2 - aarch64-linux-gnu$" },
1049+ {"Valid" ,"valid-package-index" ,ruleresult .Pass ,"" },
1050+ }
1051+
1052+ checkPackageIndexRuleFunction (PackageIndexPackagesToolsSystemsAdditionalProperties ,testTables ,t )
1053+ }
1054+
1055+ func TestPackageIndexPackagesToolsSystemsHostMissing (t * testing.T ) {
1056+ testTables := []packageIndexRuleFunctionTestTable {
1057+ {"Invalid JSON" ,"invalid-JSON" ,ruleresult .NotRun ,"" },
1058+ {"packages[].tools[].systems[].host missing" ,"packages-tools-systems-host-missing" ,ruleresult .Fail ,"^/packages/0/tools/0/systems/0$" },
1059+ {"Valid" ,"valid-package-index" ,ruleresult .Pass ,"" },
1060+ }
1061+
1062+ checkPackageIndexRuleFunction (PackageIndexPackagesToolsSystemsHostMissing ,testTables ,t )
1063+ }
1064+
1065+ func TestPackageIndexPackagesToolsSystemsHostIncorrectType (t * testing.T ) {
1066+ testTables := []packageIndexRuleFunctionTestTable {
1067+ {"Invalid JSON" ,"invalid-JSON" ,ruleresult .NotRun ,"" },
1068+ {"Incorrect packages[].tools[].systems[].host type" ,"packages-tools-systems-host-incorrect-type" ,ruleresult .Fail ,"^/packages/0/tools/0/systems/0$" },
1069+ {"Valid" ,"valid-package-index" ,ruleresult .Pass ,"" },
1070+ }
1071+
1072+ checkPackageIndexRuleFunction (PackageIndexPackagesToolsSystemsHostIncorrectType ,testTables ,t )
1073+ }
1074+
1075+ func TestPackageIndexPackagesToolsSystemsHostInvalid (t * testing.T ) {
1076+ testTables := []packageIndexRuleFunctionTestTable {
1077+ {"Invalid JSON" ,"invalid-JSON" ,ruleresult .NotRun ,"" },
1078+ {"Invalid packages[].tools[].systems[].host format" ,"packages-tools-systems-host-invalid" ,ruleresult .Fail ,"^foopackager:openocd@0\\ .11\\ .0-arduino2 - foo$" },
1079+ {"Valid" ,"valid-package-index" ,ruleresult .Pass ,"" },
1080+ }
1081+
1082+ checkPackageIndexRuleFunction (PackageIndexPackagesToolsSystemsHostInvalid ,testTables ,t )
1083+ }
1084+
1085+ func TestPackageIndexPackagesToolsSystemsUrlMissing (t * testing.T ) {
1086+ testTables := []packageIndexRuleFunctionTestTable {
1087+ {"Invalid JSON" ,"invalid-JSON" ,ruleresult .NotRun ,"" },
1088+ {"packages[].tools[].systems[].url missing" ,"packages-tools-systems-url-missing" ,ruleresult .Fail ,"^foopackager:openocd@0\\ .11\\ .0-arduino2 - aarch64-linux-gnu$" },
1089+ {"Valid" ,"valid-package-index" ,ruleresult .Pass ,"" },
1090+ }
1091+
1092+ checkPackageIndexRuleFunction (PackageIndexPackagesToolsSystemsUrlMissing ,testTables ,t )
1093+ }
1094+
1095+ func TestPackageIndexPackagesToolsSystemsUrlIncorrectType (t * testing.T ) {
1096+ testTables := []packageIndexRuleFunctionTestTable {
1097+ {"Invalid JSON" ,"invalid-JSON" ,ruleresult .NotRun ,"" },
1098+ {"Incorrect packages[].tools[].systems[].url type" ,"packages-tools-systems-url-incorrect-type" ,ruleresult .Fail ,"^foopackager:openocd@0\\ .11\\ .0-arduino2 - aarch64-linux-gnu$" },
1099+ {"Valid" ,"valid-package-index" ,ruleresult .Pass ,"" },
1100+ }
1101+
1102+ checkPackageIndexRuleFunction (PackageIndexPackagesToolsSystemsUrlIncorrectType ,testTables ,t )
1103+ }
1104+
1105+ func TestPackageIndexPackagesToolsSystemsUrlInvalidFormat (t * testing.T ) {
1106+ testTables := []packageIndexRuleFunctionTestTable {
1107+ {"Invalid JSON" ,"invalid-JSON" ,ruleresult .NotRun ,"" },
1108+ {"Incorrect packages[].tools[].systems[].url format" ,"packages-tools-systems-url-invalid-format" ,ruleresult .Fail ,"^foopackager:openocd@0\\ .11\\ .0-arduino2 - aarch64-linux-gnu$" },
1109+ {"Valid" ,"valid-package-index" ,ruleresult .Pass ,"" },
1110+ }
1111+
1112+ checkPackageIndexRuleFunction (PackageIndexPackagesToolsSystemsUrlInvalidFormat ,testTables ,t )
1113+ }
1114+
9251115func TestPackageIndexPackagesToolsSystemsURLDeadLink (t * testing.T ) {
9261116testTables := []packageIndexRuleFunctionTestTable {
9271117{"Invalid JSON" ,"invalid-JSON" ,ruleresult .NotRun ,"" },
@@ -931,3 +1121,113 @@ func TestPackageIndexPackagesToolsSystemsURLDeadLink(t *testing.T) {
9311121
9321122checkPackageIndexRuleFunction (PackageIndexPackagesToolsSystemsURLDeadLink ,testTables ,t )
9331123}
1124+
1125+ func TestPackageIndexPackagesToolsSystemsArchiveFileNameMissing (t * testing.T ) {
1126+ testTables := []packageIndexRuleFunctionTestTable {
1127+ {"Invalid JSON" ,"invalid-JSON" ,ruleresult .NotRun ,"" },
1128+ {"packages[].tools[].systems[].archiveFileName missing" ,"packages-tools-systems-archivefilename-missing" ,ruleresult .Fail ,"^foopackager:openocd@0\\ .11\\ .0-arduino2 - aarch64-linux-gnu$" },
1129+ {"Valid" ,"valid-package-index" ,ruleresult .Pass ,"" },
1130+ }
1131+
1132+ checkPackageIndexRuleFunction (PackageIndexPackagesToolsSystemsArchiveFileNameMissing ,testTables ,t )
1133+ }
1134+
1135+ func TestPackageIndexPackagesToolsSystemsArchiveFileNameIncorrectType (t * testing.T ) {
1136+ testTables := []packageIndexRuleFunctionTestTable {
1137+ {"Invalid JSON" ,"invalid-JSON" ,ruleresult .NotRun ,"" },
1138+ {"Incorrect packages[].tools[].systems[].archiveFileName type" ,"packages-tools-systems-archivefilename-incorrect-type" ,ruleresult .Fail ,"^foopackager:openocd@0\\ .11\\ .0-arduino2 - aarch64-linux-gnu$" },
1139+ {"Valid" ,"valid-package-index" ,ruleresult .Pass ,"" },
1140+ }
1141+
1142+ checkPackageIndexRuleFunction (PackageIndexPackagesToolsSystemsArchiveFileNameIncorrectType ,testTables ,t )
1143+ }
1144+
1145+ func TestPackageIndexPackagesToolsSystemsArchiveFileNameLTMinLength (t * testing.T ) {
1146+ testTables := []packageIndexRuleFunctionTestTable {
1147+ {"Invalid JSON" ,"invalid-JSON" ,ruleresult .NotRun ,"" },
1148+ {"packages[].tools[].systems[].archiveFileName < min length" ,"packages-tools-systems-archivefilename-length-lt" ,ruleresult .Fail ,"^foopackager:openocd@0\\ .11\\ .0-arduino2 - aarch64-linux-gnu$" },
1149+ {"Valid" ,"valid-package-index" ,ruleresult .Pass ,"" },
1150+ }
1151+
1152+ checkPackageIndexRuleFunction (PackageIndexPackagesToolsSystemsArchiveFileNameLTMinLength ,testTables ,t )
1153+ }
1154+
1155+ func TestPackageIndexPackagesToolsSystemsArchiveFileNameInvalid (t * testing.T ) {
1156+ testTables := []packageIndexRuleFunctionTestTable {
1157+ {"Invalid JSON" ,"invalid-JSON" ,ruleresult .NotRun ,"" },
1158+ {"Invalid packages[].tools[].systems[].archiveFileName format" ,"packages-tools-systems-archivefilename-invalid" ,ruleresult .Fail ,"^foopackager:openocd@0\\ .11\\ .0-arduino2 - aarch64-linux-gnu$" },
1159+ {"Valid" ,"valid-package-index" ,ruleresult .Pass ,"" },
1160+ }
1161+
1162+ checkPackageIndexRuleFunction (PackageIndexPackagesToolsSystemsArchiveFileNameInvalid ,testTables ,t )
1163+ }
1164+
1165+ func TestPackageIndexPackagesToolsSystemsChecksumMissing (t * testing.T ) {
1166+ testTables := []packageIndexRuleFunctionTestTable {
1167+ {"Invalid JSON" ,"invalid-JSON" ,ruleresult .NotRun ,"" },
1168+ {"packages[].tools[].systems[].checksum missing" ,"packages-tools-systems-checksum-missing" ,ruleresult .Fail ,"^foopackager:openocd@0\\ .11\\ .0-arduino2 - aarch64-linux-gnu$" },
1169+ {"Valid" ,"valid-package-index" ,ruleresult .Pass ,"" },
1170+ }
1171+
1172+ checkPackageIndexRuleFunction (PackageIndexPackagesToolsSystemsChecksumMissing ,testTables ,t )
1173+ }
1174+
1175+ func TestPackageIndexPackagesToolsSystemsChecksumIncorrectType (t * testing.T ) {
1176+ testTables := []packageIndexRuleFunctionTestTable {
1177+ {"Invalid JSON" ,"invalid-JSON" ,ruleresult .NotRun ,"" },
1178+ {"Incorrect packages[].tools[].systems[].checksum type" ,"packages-tools-systems-checksum-incorrect-type" ,ruleresult .Fail ,"^foopackager:openocd@0\\ .11\\ .0-arduino2 - aarch64-linux-gnu$" },
1179+ {"Valid" ,"valid-package-index" ,ruleresult .Pass ,"" },
1180+ }
1181+
1182+ checkPackageIndexRuleFunction (PackageIndexPackagesToolsSystemsChecksumIncorrectType ,testTables ,t )
1183+ }
1184+
1185+ func TestPackageIndexPackagesToolsSystemsChecksumInvalid (t * testing.T ) {
1186+ testTables := []packageIndexRuleFunctionTestTable {
1187+ {"Invalid JSON" ,"invalid-JSON" ,ruleresult .NotRun ,"" },
1188+ {"Invalid packages[].tools[].systems[].checksum format" ,"packages-tools-systems-checksum-invalid" ,ruleresult .Fail ,"^foopackager:openocd@0\\ .11\\ .0-arduino2 - aarch64-linux-gnu$" },
1189+ {"Valid" ,"valid-package-index" ,ruleresult .Pass ,"" },
1190+ }
1191+
1192+ checkPackageIndexRuleFunction (PackageIndexPackagesToolsSystemsChecksumInvalid ,testTables ,t )
1193+ }
1194+
1195+ func TestPackageIndexPackagesToolsSystemsChecksumDiscouragedAlgorithm (t * testing.T ) {
1196+ testTables := []packageIndexRuleFunctionTestTable {
1197+ {"Invalid JSON" ,"invalid-JSON" ,ruleresult .NotRun ,"" },
1198+ {"packages[].tools[].systems[].checksum uses discouraged algorithm" ,"packages-tools-systems-checksum-discouraged" ,ruleresult .Fail ,"^foopackager:openocd@0\\ .11\\ .0-arduino2 - aarch64-linux-gnu$" },
1199+ {"Valid" ,"valid-package-index" ,ruleresult .Pass ,"" },
1200+ }
1201+
1202+ checkPackageIndexRuleFunction (PackageIndexPackagesToolsSystemsChecksumDiscouragedAlgorithm ,testTables ,t )
1203+ }
1204+
1205+ func TestPackageIndexPackagesToolsSystemsSizeMissing (t * testing.T ) {
1206+ testTables := []packageIndexRuleFunctionTestTable {
1207+ {"Invalid JSON" ,"invalid-JSON" ,ruleresult .NotRun ,"" },
1208+ {"packages[].tools[].systems[].size missing" ,"packages-tools-systems-size-missing" ,ruleresult .Fail ,"^foopackager:openocd@0\\ .11\\ .0-arduino2 - aarch64-linux-gnu$" },
1209+ {"Valid" ,"valid-package-index" ,ruleresult .Pass ,"" },
1210+ }
1211+
1212+ checkPackageIndexRuleFunction (PackageIndexPackagesToolsSystemsSizeMissing ,testTables ,t )
1213+ }
1214+
1215+ func TestPackageIndexPackagesToolsSystemsSizeIncorrectType (t * testing.T ) {
1216+ testTables := []packageIndexRuleFunctionTestTable {
1217+ {"Invalid JSON" ,"invalid-JSON" ,ruleresult .NotRun ,"" },
1218+ {"Incorrect packages[].tools[].systems[].size type" ,"packages-tools-systems-size-incorrect-type" ,ruleresult .Fail ,"^foopackager:openocd@0\\ .11\\ .0-arduino2 - aarch64-linux-gnu$" },
1219+ {"Valid" ,"valid-package-index" ,ruleresult .Pass ,"" },
1220+ }
1221+
1222+ checkPackageIndexRuleFunction (PackageIndexPackagesToolsSystemsSizeIncorrectType ,testTables ,t )
1223+ }
1224+
1225+ func TestPackageIndexPackagesToolsSystemsSizeInvalid (t * testing.T ) {
1226+ testTables := []packageIndexRuleFunctionTestTable {
1227+ {"Invalid JSON" ,"invalid-JSON" ,ruleresult .NotRun ,"" },
1228+ {"Invalid packages[].tools[].systems[].size format" ,"packages-tools-systems-size-invalid" ,ruleresult .Fail ,"^foopackager:openocd@0\\ .11\\ .0-arduino2 - aarch64-linux-gnu$" },
1229+ {"Valid" ,"valid-package-index" ,ruleresult .Pass ,"" },
1230+ }
1231+
1232+ checkPackageIndexRuleFunction (PackageIndexPackagesToolsSystemsSizeInvalid ,testTables ,t )
1233+ }