From a9792b0891c3f42479da809799c1bc8f888191a1 Mon Sep 17 00:00:00 2001 From: per1234 Date: Tue, 22 Jun 2021 23:56:10 -0700 Subject: [PATCH 1/2] Use diverse tool dependencies package index test data The package indexes for used for projectdata test data had the same packages[].platforms[].toolsDependencies data for every platform. Although there was nothing specifically wrong with this, it seems like diversity in the test data makes the tests more meaningful by differentiating the expected tools dependencies data for each platform. --- .../empty-ids/package_foo_index.json | 34 ++++++++++++------- .../missing-ids/package_foo_index.json | 31 ++++++++++------- .../package_foo_index.json | 20 +++++------ 3 files changed, 51 insertions(+), 34 deletions(-) diff --git a/internal/project/projectdata/testdata/packageindexes/empty-ids/package_foo_index.json b/internal/project/projectdata/testdata/packageindexes/empty-ids/package_foo_index.json index 66f2cf98..0d6e86c9 100644 --- a/internal/project/projectdata/testdata/packageindexes/empty-ids/package_foo_index.json +++ b/internal/project/projectdata/testdata/packageindexes/empty-ids/package_foo_index.json @@ -52,12 +52,12 @@ { "packager": "arduino", "name": "avr-gcc", - "version": "4.8.1-arduino5" + "version": "7.3.0-atmel3.6.1-arduino7" }, { "packager": "arduino", "name": "avrdude", - "version": "6.0.1-arduino5" + "version": "6.3.0-arduino17" } ] } @@ -89,13 +89,13 @@ "toolsDependencies": [ { "packager": "arduino", - "name": "avr-gcc", - "version": "4.8.1-arduino5" + "name": "arm-none-eabi-gcc", + "version": "7-2017q4" }, { "packager": "arduino", - "name": "avrdude", - "version": "6.0.1-arduino5" + "name": "bossac", + "version": "1.7.0-arduino3" } ] }, @@ -115,13 +115,13 @@ "toolsDependencies": [ { "packager": "arduino", - "name": "avr-gcc", - "version": "4.8.1-arduino5" + "name": "openocd", + "version": "0.11.0-arduino2" }, { "packager": "arduino", - "name": "avrdude", - "version": "6.0.1-arduino5" + "name": "arm-none-eabi-gcc", + "version": "7-2017q4" } ] }, @@ -140,14 +140,24 @@ "boards": [{ "name": "" }, { "name": "My Board Pro" }], "toolsDependencies": [ { - "packager": "arduino", + "packager": "", "name": "avr-gcc", "version": "4.8.1-arduino5" }, { "packager": "arduino", - "name": "avrdude", + "name": "", "version": "6.0.1-arduino5" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.5.0" } ] } diff --git a/internal/project/projectdata/testdata/packageindexes/missing-ids/package_foo_index.json b/internal/project/projectdata/testdata/packageindexes/missing-ids/package_foo_index.json index e9da8f28..05542649 100644 --- a/internal/project/projectdata/testdata/packageindexes/missing-ids/package_foo_index.json +++ b/internal/project/projectdata/testdata/packageindexes/missing-ids/package_foo_index.json @@ -51,12 +51,12 @@ { "packager": "arduino", "name": "avr-gcc", - "version": "4.8.1-arduino5" + "version": "7.3.0-atmel3.6.1-arduino7" }, { "packager": "arduino", "name": "avrdude", - "version": "6.0.1-arduino5" + "version": "6.3.0-arduino17" } ] } @@ -87,13 +87,13 @@ "toolsDependencies": [ { "packager": "arduino", - "name": "avr-gcc", - "version": "4.8.1-arduino5" + "name": "arm-none-eabi-gcc", + "version": "7-2017q4" }, { "packager": "arduino", - "name": "avrdude", - "version": "6.0.1-arduino5" + "name": "bossac", + "version": "1.7.0-arduino3" } ] }, @@ -112,13 +112,13 @@ "toolsDependencies": [ { "packager": "arduino", - "name": "avr-gcc", - "version": "4.8.1-arduino5" + "name": "openocd", + "version": "0.11.0-arduino2" }, { "packager": "arduino", - "name": "avrdude", - "version": "6.0.1-arduino5" + "name": "arm-none-eabi-gcc", + "version": "7-2017q4" } ] }, @@ -137,14 +137,21 @@ "boards": [{ "foo": "My Board" }, { "name": "My Board Pro" }], "toolsDependencies": [ { - "packager": "arduino", "name": "avr-gcc", "version": "4.8.1-arduino5" }, { "packager": "arduino", - "name": "avrdude", "version": "6.0.1-arduino5" + }, + { + "packager": "arduino", + "name": "openocd" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.5.0" } ] } diff --git a/internal/project/projectdata/testdata/packageindexes/valid-package-index/package_foo_index.json b/internal/project/projectdata/testdata/packageindexes/valid-package-index/package_foo_index.json index 85d80d55..15203499 100644 --- a/internal/project/projectdata/testdata/packageindexes/valid-package-index/package_foo_index.json +++ b/internal/project/projectdata/testdata/packageindexes/valid-package-index/package_foo_index.json @@ -52,12 +52,12 @@ { "packager": "arduino", "name": "avr-gcc", - "version": "4.8.1-arduino5" + "version": "7.3.0-atmel3.6.1-arduino7" }, { "packager": "arduino", "name": "avrdude", - "version": "6.0.1-arduino5" + "version": "6.3.0-arduino17" } ] } @@ -89,13 +89,13 @@ "toolsDependencies": [ { "packager": "arduino", - "name": "avr-gcc", - "version": "4.8.1-arduino5" + "name": "arm-none-eabi-gcc", + "version": "7-2017q4" }, { "packager": "arduino", - "name": "avrdude", - "version": "6.0.1-arduino5" + "name": "bossac", + "version": "1.7.0-arduino3" } ] }, @@ -115,13 +115,13 @@ "toolsDependencies": [ { "packager": "arduino", - "name": "avr-gcc", - "version": "4.8.1-arduino5" + "name": "openocd", + "version": "0.11.0-arduino2" }, { "packager": "arduino", - "name": "avrdude", - "version": "6.0.1-arduino5" + "name": "arm-none-eabi-gcc", + "version": "7-2017q4" } ] } From d2fc80e08ece98fdeeb1fac62383f36191c59734 Mon Sep 17 00:00:00 2001 From: per1234 Date: Tue, 22 Jun 2021 23:56:40 -0700 Subject: [PATCH 2/2] Provide object-level packages[].platforms[].toolsDependencies[] package index data to rules Data checking rules for package indexes need to iterate over its object-level components. To facilitate this, slices of such objects accompanied by the necessary metadata are generated as package index project data. This was already done for packages, platforms, boards, and tools, but not for tools dependencies. --- internal/project/projectdata/packageindex.go | 12 ++ .../project/projectdata/packageindex_test.go | 149 ++++++++++++++++++ 2 files changed, 161 insertions(+) diff --git a/internal/project/projectdata/packageindex.go b/internal/project/projectdata/packageindex.go index 7a021299..6a75cff2 100644 --- a/internal/project/projectdata/packageindex.go +++ b/internal/project/projectdata/packageindex.go @@ -43,6 +43,7 @@ func InitializeForPackageIndex() { packageIndexPackages = nil packageIndexPlatforms = nil packageIndexBoards = nil + packageIndexToolsDependencies = nil packageIndexTools = nil packageIndexSystems = nil packageIndexSchemaValidationResult = nil @@ -57,6 +58,10 @@ func InitializeForPackageIndex() { packageIndexBoards = append(packageIndexBoards, getPackageIndexData(platformData.Object, platformData.JSONPointer, "boards", platformData.ID, " - {{index . 0}}", []string{"name"})...) } + for _, platformData := range PackageIndexPlatforms() { + packageIndexToolsDependencies = append(packageIndexToolsDependencies, getPackageIndexData(platformData.Object, platformData.JSONPointer, "toolsDependencies", platformData.ID, " - {{index . 0}}:{{index . 1}}@{{index . 2}}", []string{"packager", "name", "version"})...) + } + for _, packageData := range PackageIndexPackages() { packageIndexTools = append(packageIndexTools, getPackageIndexData(packageData.Object, packageData.JSONPointer, "tools", packageData.ID, ":{{index . 0}}@{{index . 1}}", []string{"name", "version"})...) } @@ -111,6 +116,13 @@ func PackageIndexBoards() []PackageIndexData { return packageIndexBoards } +var packageIndexToolsDependencies []PackageIndexData + +// PackageIndexToolsDependencies returns the slice of tool dependency data for the package index. +func PackageIndexToolsDependencies() []PackageIndexData { + return packageIndexToolsDependencies +} + var packageIndexTools []PackageIndexData // PackageIndexTools returns the slice of tool data for the package index. diff --git a/internal/project/projectdata/packageindex_test.go b/internal/project/projectdata/packageindex_test.go index 3cbdafbf..86d4d1bf 100644 --- a/internal/project/projectdata/packageindex_test.go +++ b/internal/project/projectdata/packageindex_test.go @@ -47,6 +47,8 @@ func TestInitializeForPackageIndex(t *testing.T) { packageIndexPlatformsDataAssertion []PackageIndexData packageIndexBoardsAssertion assert.ValueAssertionFunc packageIndexBoardsDataAssertion []PackageIndexData + packageIndexToolsDependenciesAssertion assert.ValueAssertionFunc + packageIndexToolsDependenciesDataAssertion []PackageIndexData packageIndexToolsAssertion assert.ValueAssertionFunc packageIndexToolsDataAssertion []PackageIndexData packageIndexSystemsAssertion assert.ValueAssertionFunc @@ -124,6 +126,41 @@ func TestInitializeForPackageIndex(t *testing.T) { JSONPointer: "/packages/1/platforms/1/boards/1", }, }, + packageIndexToolsDependenciesAssertion: assert.NotNil, + packageIndexToolsDependenciesDataAssertion: []PackageIndexData{ + { + ID: "foopackager1:avr@1.0.0 - arduino:avr-gcc@4.8.1-arduino5", + JSONPointer: "/packages/0/platforms/0/toolsDependencies/0", + }, + { + ID: "foopackager1:avr@1.0.0 - arduino:avrdude@6.0.1-arduino5", + JSONPointer: "/packages/0/platforms/0/toolsDependencies/1", + }, + { + ID: "foopackager1:avr@1.0.1 - arduino:avr-gcc@7.3.0-atmel3.6.1-arduino7", + JSONPointer: "/packages/0/platforms/1/toolsDependencies/0", + }, + { + ID: "foopackager1:avr@1.0.1 - arduino:avrdude@6.3.0-arduino17", + JSONPointer: "/packages/0/platforms/1/toolsDependencies/1", + }, + { + ID: "foopackager2:samd@2.0.0 - arduino:arm-none-eabi-gcc@7-2017q4", + JSONPointer: "/packages/1/platforms/0/toolsDependencies/0", + }, + { + ID: "foopackager2:samd@2.0.0 - arduino:bossac@1.7.0-arduino3", + JSONPointer: "/packages/1/platforms/0/toolsDependencies/1", + }, + { + ID: "foopackager2:mbed@1.1.1 - arduino:openocd@0.11.0-arduino2", + JSONPointer: "/packages/1/platforms/1/toolsDependencies/0", + }, + { + ID: "foopackager2:mbed@1.1.1 - arduino:arm-none-eabi-gcc@7-2017q4", + JSONPointer: "/packages/1/platforms/1/toolsDependencies/1", + }, + }, packageIndexToolsAssertion: assert.NotNil, packageIndexToolsDataAssertion: []PackageIndexData{ { @@ -239,6 +276,57 @@ func TestInitializeForPackageIndex(t *testing.T) { JSONPointer: "/packages/1/platforms/2/boards/1", }, }, + packageIndexToolsDependenciesAssertion: assert.NotNil, + packageIndexToolsDependenciesDataAssertion: []PackageIndexData{ + { + ID: "/packages/0/platforms/0/toolsDependencies/0", + JSONPointer: "/packages/0/platforms/0/toolsDependencies/0", + }, + { + ID: "/packages/0/platforms/0/toolsDependencies/1", + JSONPointer: "/packages/0/platforms/0/toolsDependencies/1", + }, + { + ID: "/packages/0/platforms/1/toolsDependencies/0", + JSONPointer: "/packages/0/platforms/1/toolsDependencies/0", + }, + { + ID: "/packages/0/platforms/1/toolsDependencies/1", + JSONPointer: "/packages/0/platforms/1/toolsDependencies/1", + }, + { + ID: "/packages/1/platforms/0/toolsDependencies/0", + JSONPointer: "/packages/1/platforms/0/toolsDependencies/0", + }, + { + ID: "/packages/1/platforms/0/toolsDependencies/1", + JSONPointer: "/packages/1/platforms/0/toolsDependencies/1", + }, + { + ID: "/packages/1/platforms/1/toolsDependencies/0", + JSONPointer: "/packages/1/platforms/1/toolsDependencies/0", + }, + { + ID: "/packages/1/platforms/1/toolsDependencies/1", + JSONPointer: "/packages/1/platforms/1/toolsDependencies/1", + }, + { + ID: "/packages/1/platforms/2/toolsDependencies/0", + JSONPointer: "/packages/1/platforms/2/toolsDependencies/0", + }, + { + ID: "/packages/1/platforms/2/toolsDependencies/1", + JSONPointer: "/packages/1/platforms/2/toolsDependencies/1", + }, + { + ID: "/packages/1/platforms/2/toolsDependencies/2", + JSONPointer: "/packages/1/platforms/2/toolsDependencies/2", + }, + { + ID: "foopackager2:megaavr@1.0.0 - arduino:CMSIS@4.5.0", + JSONPointer: "/packages/1/platforms/2/toolsDependencies/3", + }, + }, packageIndexToolsAssertion: assert.NotNil, packageIndexToolsDataAssertion: []PackageIndexData{ { @@ -362,6 +450,57 @@ func TestInitializeForPackageIndex(t *testing.T) { JSONPointer: "/packages/1/platforms/2/boards/1", }, }, + packageIndexToolsDependenciesAssertion: assert.NotNil, + packageIndexToolsDependenciesDataAssertion: []PackageIndexData{ + { + ID: "/packages/0/platforms/0/toolsDependencies/0", + JSONPointer: "/packages/0/platforms/0/toolsDependencies/0", + }, + { + ID: "/packages/0/platforms/0/toolsDependencies/1", + JSONPointer: "/packages/0/platforms/0/toolsDependencies/1", + }, + { + ID: "/packages/0/platforms/1/toolsDependencies/0", + JSONPointer: "/packages/0/platforms/1/toolsDependencies/0", + }, + { + ID: "/packages/0/platforms/1/toolsDependencies/1", + JSONPointer: "/packages/0/platforms/1/toolsDependencies/1", + }, + { + ID: "/packages/1/platforms/0/toolsDependencies/0", + JSONPointer: "/packages/1/platforms/0/toolsDependencies/0", + }, + { + ID: "/packages/1/platforms/0/toolsDependencies/1", + JSONPointer: "/packages/1/platforms/0/toolsDependencies/1", + }, + { + ID: "/packages/1/platforms/1/toolsDependencies/0", + JSONPointer: "/packages/1/platforms/1/toolsDependencies/0", + }, + { + ID: "/packages/1/platforms/1/toolsDependencies/1", + JSONPointer: "/packages/1/platforms/1/toolsDependencies/1", + }, + { + ID: "/packages/1/platforms/2/toolsDependencies/0", + JSONPointer: "/packages/1/platforms/2/toolsDependencies/0", + }, + { + ID: "/packages/1/platforms/2/toolsDependencies/1", + JSONPointer: "/packages/1/platforms/2/toolsDependencies/1", + }, + { + ID: "/packages/1/platforms/2/toolsDependencies/2", + JSONPointer: "/packages/1/platforms/2/toolsDependencies/2", + }, + { + ID: "foopackager2:megaavr@1.0.0 - arduino:CMSIS@4.5.0", + JSONPointer: "/packages/1/platforms/2/toolsDependencies/3", + }, + }, packageIndexToolsAssertion: assert.NotNil, packageIndexToolsDataAssertion: []PackageIndexData{ { @@ -411,6 +550,7 @@ func TestInitializeForPackageIndex(t *testing.T) { packageIndexPackagesAssertion: assert.Nil, packageIndexPlatformsAssertion: assert.Nil, packageIndexBoardsAssertion: assert.Nil, + packageIndexToolsDependenciesAssertion: assert.Nil, packageIndexToolsAssertion: assert.Nil, packageIndexSystemsAssertion: assert.Nil, packageIndexSchemaValidationResultAssertion: assert.Nil, @@ -424,6 +564,7 @@ func TestInitializeForPackageIndex(t *testing.T) { packageIndexPackagesAssertion: assert.Nil, packageIndexPlatformsAssertion: assert.Nil, packageIndexBoardsAssertion: assert.Nil, + packageIndexToolsDependenciesAssertion: assert.Nil, packageIndexToolsAssertion: assert.Nil, packageIndexSystemsAssertion: assert.Nil, packageIndexSchemaValidationResultAssertion: assert.Nil, @@ -469,6 +610,14 @@ func TestInitializeForPackageIndex(t *testing.T) { } } + testTable.packageIndexToolsDependenciesAssertion(t, PackageIndexToolsDependencies(), testTable.testName) + if PackageIndexToolsDependencies() != nil { + for index, packageIndexToolsDependency := range PackageIndexToolsDependencies() { + assert.Equal(t, testTable.packageIndexToolsDependenciesDataAssertion[index].ID, packageIndexToolsDependency.ID, testTable.testName) + assert.Equal(t, testTable.packageIndexToolsDependenciesDataAssertion[index].JSONPointer, packageIndexToolsDependency.JSONPointer, testTable.testName) + } + } + testTable.packageIndexToolsAssertion(t, PackageIndexTools(), testTable.testName) if PackageIndexTools() != nil { for index, packageIndexTool := range PackageIndexTools() {