|
| 1 | +package packagemanager_test |
| 2 | + |
| 3 | +import ( |
| 4 | + "encoding/json" |
| 5 | + "testing" |
| 6 | + |
| 7 | + "github.com/arduino/arduino-cli/arduino/cores/packageindex" |
| 8 | + "github.com/arduino/arduino-cli/arduino/cores/packagemanager" |
| 9 | + "github.com/arduino/arduino-cli/cli/output" |
| 10 | + "github.com/arduino/arduino-cli/commands" |
| 11 | + "github.com/arduino/go-paths-helper" |
| 12 | + "github.com/stretchr/testify/require" |
| 13 | + semver "go.bug.st/relaxed-semver" |
| 14 | +) |
| 15 | + |
| 16 | +func TestInstallPlatform(t *testing.T) { |
| 17 | + dataDir := paths.New("testdata", "data_dir_1") |
| 18 | + packageDir := paths.TempDir().Join("test", "packages") |
| 19 | + downloadDir := paths.TempDir().Join("test", "staging") |
| 20 | + tmpDir := paths.TempDir().Join("test", "tmp") |
| 21 | + packageDir.MkdirAll() |
| 22 | + downloadDir.MkdirAll() |
| 23 | + tmpDir.MkdirAll() |
| 24 | + defer paths.TempDir().Join("test").RemoveAll() |
| 25 | + |
| 26 | + pm := packagemanager.NewPackageManager(dataDir, packageDir, downloadDir, tmpDir) |
| 27 | + pm.LoadPackageIndexFromFile(dataDir.Join("package_index.json")) |
| 28 | + |
| 29 | + platformRelease, tools, err := pm.FindPlatformReleaseDependencies(&packagemanager.PlatformReference{ |
| 30 | + Package: "arduino", |
| 31 | + PlatformArchitecture: "avr", |
| 32 | + PlatformVersion: semver.MustParse("1.6.23"), |
| 33 | + }) |
| 34 | + require.NotNil(t, platformRelease) |
| 35 | + require.NotNil(t, tools) |
| 36 | + require.Nil(t, err) |
| 37 | + |
| 38 | + downloaderConfig, err := commands.GetDownloaderConfig() |
| 39 | + require.NotNil(t, downloaderConfig) |
| 40 | + require.Nil(t, err) |
| 41 | + downloader, err := pm.DownloadPlatformRelease(platformRelease, downloaderConfig) |
| 42 | + require.NotNil(t, downloader) |
| 43 | + require.Nil(t, err) |
| 44 | + err = commands.Download(downloader, platformRelease.String(), output.NewNullDownloadProgressCB()) |
| 45 | + require.Nil(t, err) |
| 46 | + |
| 47 | + err = pm.InstallPlatform(platformRelease) |
| 48 | + require.Nil(t, err) |
| 49 | + |
| 50 | + destDir := packageDir.Join("arduino", "hardware", "avr", "1.6.23") |
| 51 | + require.True(t, destDir.IsDir()) |
| 52 | + |
| 53 | + installedJSON := destDir.Join("installed.json") |
| 54 | + require.True(t, installedJSON.Exist()) |
| 55 | + |
| 56 | + bt, err := installedJSON.ReadFile() |
| 57 | + require.Nil(t, err) |
| 58 | + |
| 59 | + index := &packageindex.Index{} |
| 60 | + err = json.Unmarshal(bt, index) |
| 61 | + require.Nil(t, err) |
| 62 | + |
| 63 | + require.Equal(t, 1, len(index.Packages)) |
| 64 | + indexPackage := index.Packages[0] |
| 65 | + require.Equal(t, "arduino", indexPackage.Name) |
| 66 | + require.Equal(t, "Arduino", indexPackage.Maintainer) |
| 67 | + require.Equal(t, "http://www.arduino.cc/", indexPackage.WebsiteURL) |
| 68 | + require.Equal(t, "packages@arduino.cc", indexPackage.Email) |
| 69 | + require.Equal(t, 1, len(indexPackage.Platforms)) |
| 70 | + require.Equal(t, "http://www.arduino.cc/en/Reference/HomePage", indexPackage.Help.Online) |
| 71 | + |
| 72 | + indexPackageTools := indexPackage.Tools |
| 73 | + require.Equal(t, 44, len(indexPackageTools)) |
| 74 | + // Just check one to verifies it's actually correct |
| 75 | + require.Contains(t, indexPackageTools, &packageindex.IndexToolRelease{ |
| 76 | + Name: "arm-none-eabi-gcc", |
| 77 | + Version: semver.ParseRelaxed("4.8.3-2014q1"), |
| 78 | + Systems: []packageindex.IndexToolReleaseFlavour{ |
| 79 | + { |
| 80 | + OS: "arm-linux-gnueabihf", |
| 81 | + URL: "http://downloads.arduino.cc/gcc-arm-none-eabi-4.8.3-2014q1-arm.tar.bz2", |
| 82 | + ArchiveFileName: "gcc-arm-none-eabi-4.8.3-2014q1-arm.tar.bz2", |
| 83 | + Size: "44423906", |
| 84 | + Checksum: "SHA-256:ebe96b34c4f434667cab0187b881ed585e7c7eb990fe6b69be3c81ec7e11e845", |
| 85 | + }, |
| 86 | + { |
| 87 | + OS: "i686-mingw32", |
| 88 | + URL: "http://downloads.arduino.cc/gcc-arm-none-eabi-4.8.3-2014q1-windows.tar.gz", |
| 89 | + ArchiveFileName: "gcc-arm-none-eabi-4.8.3-2014q1-windows.tar.gz", |
| 90 | + Size: "84537449", |
| 91 | + Checksum: "SHA-256:fd8c111c861144f932728e00abd3f7d1107e186eb9cd6083a54c7236ea78b7c2", |
| 92 | + }, |
| 93 | + { |
| 94 | + OS: "x86_64-apple-darwin", |
| 95 | + URL: "http://downloads.arduino.cc/gcc-arm-none-eabi-4.8.3-2014q1-mac.tar.gz", |
| 96 | + ArchiveFileName: "gcc-arm-none-eabi-4.8.3-2014q1-mac.tar.gz", |
| 97 | + Size: "52518522", |
| 98 | + Checksum: "SHA-256:3598acf21600f17a8e4a4e8e193dc422b894dc09384759b270b2ece5facb59c2", |
| 99 | + }, |
| 100 | + { |
| 101 | + OS: "x86_64-pc-linux-gnu", |
| 102 | + URL: "http://downloads.arduino.cc/gcc-arm-none-eabi-4.8.3-2014q1-linux64.tar.gz", |
| 103 | + ArchiveFileName: "gcc-arm-none-eabi-4.8.3-2014q1-linux64.tar.gz", |
| 104 | + Size: "51395093", |
| 105 | + Checksum: "SHA-256:d23f6626148396d6ec42a5b4d928955a703e0757829195fa71a939e5b86eecf6", |
| 106 | + }, |
| 107 | + { |
| 108 | + OS: "i686-pc-linux-gnu", |
| 109 | + URL: "http://downloads.arduino.cc/gcc-arm-none-eabi-4.8.3-2014q1-linux32.tar.gz", |
| 110 | + ArchiveFileName: "gcc-arm-none-eabi-4.8.3-2014q1-linux32.tar.gz", |
| 111 | + Size: "51029223", |
| 112 | + Checksum: "SHA-256:ba1994235f69c526c564f65343f22ddbc9822b2ea8c5ee07dd79d89f6ace2498", |
| 113 | + }, |
| 114 | + }}) |
| 115 | + |
| 116 | + indexPlatformRelease := indexPackage.Platforms[0] |
| 117 | + require.Equal(t, "Arduino AVR Boards", indexPlatformRelease.Name) |
| 118 | + require.Equal(t, "avr", indexPlatformRelease.Architecture) |
| 119 | + require.Equal(t, "1.6.23", indexPlatformRelease.Version.String()) |
| 120 | + require.Equal(t, "Arduino", indexPlatformRelease.Category) |
| 121 | + require.Equal(t, "http://www.arduino.cc/en/Reference/HomePage", indexPlatformRelease.Help.Online) |
| 122 | + require.Equal(t, "http://downloads.arduino.cc/cores/avr-1.6.23.tar.bz2", indexPlatformRelease.URL) |
| 123 | + require.Equal(t, "avr-1.6.23.tar.bz2", indexPlatformRelease.ArchiveFileName) |
| 124 | + require.Equal(t, "SHA-256:18618d7f256f26cd77c35f4c888d5d1b2334f07925094fdc99ac3188722284aa", indexPlatformRelease.Checksum) |
| 125 | + require.Equal(t, json.Number("5001988"), indexPlatformRelease.Size) |
| 126 | + require.Contains(t, indexPlatformRelease.Boards, packageindex.IndexBoard{Name: "Arduino Yún"}) |
| 127 | + require.Contains(t, indexPlatformRelease.Boards, packageindex.IndexBoard{Name: "Arduino/Genuino Uno"}) |
| 128 | + require.Contains(t, indexPlatformRelease.Boards, packageindex.IndexBoard{Name: "Arduino Uno WiFi"}) |
| 129 | + require.Contains(t, indexPlatformRelease.Boards, packageindex.IndexBoard{Name: "Arduino Diecimila"}) |
| 130 | + require.Contains(t, indexPlatformRelease.Boards, packageindex.IndexBoard{Name: "Arduino Nano"}) |
| 131 | + require.Contains(t, indexPlatformRelease.Boards, packageindex.IndexBoard{Name: "Arduino/Genuino Mega"}) |
| 132 | + require.Contains(t, indexPlatformRelease.Boards, packageindex.IndexBoard{Name: "Arduino MegaADK"}) |
| 133 | + require.Contains(t, indexPlatformRelease.Boards, packageindex.IndexBoard{Name: "Arduino Leonardo"}) |
| 134 | + require.Contains(t, indexPlatformRelease.Boards, packageindex.IndexBoard{Name: "Arduino Leonardo Ethernet"}) |
| 135 | + require.Contains(t, indexPlatformRelease.Boards, packageindex.IndexBoard{Name: "Arduino/Genuino Micro"}) |
| 136 | + require.Contains(t, indexPlatformRelease.Boards, packageindex.IndexBoard{Name: "Arduino Esplora"}) |
| 137 | + require.Contains(t, indexPlatformRelease.Boards, packageindex.IndexBoard{Name: "Arduino Mini"}) |
| 138 | + require.Contains(t, indexPlatformRelease.Boards, packageindex.IndexBoard{Name: "Arduino Ethernet"}) |
| 139 | + require.Contains(t, indexPlatformRelease.Boards, packageindex.IndexBoard{Name: "Arduino Fio"}) |
| 140 | + require.Contains(t, indexPlatformRelease.Boards, packageindex.IndexBoard{Name: "Arduino BT"}) |
| 141 | + require.Contains(t, indexPlatformRelease.Boards, packageindex.IndexBoard{Name: "Arduino LilyPadUSB"}) |
| 142 | + require.Contains(t, indexPlatformRelease.Boards, packageindex.IndexBoard{Name: "Arduino Lilypad"}) |
| 143 | + require.Contains(t, indexPlatformRelease.Boards, packageindex.IndexBoard{Name: "Arduino Pro"}) |
| 144 | + require.Contains(t, indexPlatformRelease.Boards, packageindex.IndexBoard{Name: "Arduino ATMegaNG"}) |
| 145 | + require.Contains(t, indexPlatformRelease.Boards, packageindex.IndexBoard{Name: "Arduino Robot Control"}) |
| 146 | + require.Contains(t, indexPlatformRelease.Boards, packageindex.IndexBoard{Name: "Arduino Robot Motor"}) |
| 147 | + require.Contains(t, indexPlatformRelease.Boards, packageindex.IndexBoard{Name: "Arduino Gemma"}) |
| 148 | + require.Contains(t, indexPlatformRelease.Boards, packageindex.IndexBoard{Name: "Adafruit Circuit Playground"}) |
| 149 | + require.Contains(t, indexPlatformRelease.Boards, packageindex.IndexBoard{Name: "Arduino Yún Mini"}) |
| 150 | + require.Contains(t, indexPlatformRelease.Boards, packageindex.IndexBoard{Name: "Arduino Industrial 101"}) |
| 151 | + require.Contains(t, indexPlatformRelease.Boards, packageindex.IndexBoard{Name: "Linino One"}) |
| 152 | + require.Contains(t, indexPlatformRelease.ToolDependencies, |
| 153 | + packageindex.IndexToolDependency{ |
| 154 | + Packager: "arduino", |
| 155 | + Name: "avr-gcc", |
| 156 | + Version: semver.ParseRelaxed("5.4.0-atmel3.6.1-arduino2"), |
| 157 | + }) |
| 158 | + require.Contains(t, indexPlatformRelease.ToolDependencies, |
| 159 | + packageindex.IndexToolDependency{ |
| 160 | + Packager: "arduino", |
| 161 | + Name: "avrdude", |
| 162 | + Version: semver.ParseRelaxed("6.3.0-arduino14"), |
| 163 | + }) |
| 164 | + require.Contains(t, indexPlatformRelease.ToolDependencies, |
| 165 | + packageindex.IndexToolDependency{ |
| 166 | + Packager: "arduino", |
| 167 | + Name: "arduinoOTA", |
| 168 | + Version: semver.ParseRelaxed("1.2.1"), |
| 169 | + }) |
| 170 | +} |
0 commit comments