diff --git a/internal/integrationtest/upgrade/upgrade_test.go b/internal/integrationtest/upgrade/upgrade_test.go new file mode 100644 index 00000000000..4c503d80fef --- /dev/null +++ b/internal/integrationtest/upgrade/upgrade_test.go @@ -0,0 +1,112 @@ +// This file is part of arduino-cli. +// +// Copyright 2022 ARDUINO SA (http://www.arduino.cc/) +// +// This software is released under the GNU General Public License version 3, +// which covers the main part of arduino-cli. +// The terms of this license can be found at: +// https://www.gnu.org/licenses/gpl-3.0.en.html +// +// You can be released from the requirements of the above licenses by purchasing +// a commercial license. Buying such a license is mandatory if you want to +// modify or otherwise use the software for commercial activities involving the +// Arduino software without disclosing the source code of your own applications. +// To purchase a commercial license, send an email to license@arduino.cc. + +package upgrade_test + +import ( + "strings" + "testing" + + "github.com/arduino/arduino-cli/internal/integrationtest" + "github.com/stretchr/testify/require" +) + +func TestUpgrade(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + // Updates index for cores and libraries + _, _, err := cli.Run("core", "update-idex") + require.NoError(t, err) + _, _, err = cli.Run("lib", "update-idex") + require.NoError(t, err) + + // Installs an outdated core and library + _, _, err = cli.Run("core", "install", "arduino:avr@1.6.3") + require.NoError(t, err) + _, _, err = cli.Run("lib", "install", "USBHost@1.0.0") + require.NoError(t, err) + + // Installs an outdated core and library + _, _, err = cli.Run("core", "install", "arduino:samd") + require.NoError(t, err) + _, _, err = cli.Run("lib", "install", "ArduinoJson") + require.NoError(t, err) + + // Verifies outdated core and libraries are shown + stdout, _, err := cli.Run("outdated") + require.NoError(t, err) + lines := strings.Split(string(stdout), "\n") + require.Contains(t, lines[1], "Arduino AVR Boards") + require.Contains(t, lines[4], "USBHost") + + _, _, err = cli.Run("upgrade") + require.NoError(t, err) + + // Verifies cores and libraries have been updated + stdout, _, err = cli.Run("outdated") + require.NoError(t, err) + require.Equal(t, string(stdout), "\n") +} + +func TestUpgradeUsingLibraryWithInvalidVersion(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + _, _, err := cli.Run("update") + require.NoError(t, err) + + // Install latest version of a library + _, _, err = cli.Run("lib", "install", "WiFi101") + require.NoError(t, err) + + // Verifies library is not shown + stdout, _, err := cli.Run("outdated") + require.NoError(t, err) + require.NotContains(t, string(stdout), "WiFi101") + + // Changes the version of the currently installed library so that it's invalid + libPropPath := cli.SketchbookDir().Join("libraries", "WiFi101", "library.properties") + err = libPropPath.WriteFile([]byte("name=WiFi101\nversion=1.0001")) + require.NoError(t, err) + + // Verifies library gets upgraded + stdout, _, err = cli.Run("upgrade") + require.NoError(t, err) + require.Contains(t, string(stdout), "WiFi101") +} + +func TestUpgradeUnusedCoreToolsAreRemoved(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + _, _, err := cli.Run("update") + require.NoError(t, err) + + // Installs a core + _, _, err = cli.Run("core", "install", "arduino:avr@1.8.2") + require.NoError(t, err) + + // Verifies expected tool is installed + toolPath := cli.DataDir().Join("packages", "arduino", "tools", "avr-gcc", "7.3.0-atmel3.6.1-arduino5") + require.DirExists(t, toolPath.String()) + + // Upgrades everything + _, _, err = cli.Run("upgrade") + require.NoError(t, err) + + // Verifies tool is uninstalled since it's not used by newer core version + require.NoDirExists(t, toolPath.String()) +} diff --git a/test/test_upgrade.py b/test/test_upgrade.py deleted file mode 100644 index 00093a3b4aa..00000000000 --- a/test/test_upgrade.py +++ /dev/null @@ -1,84 +0,0 @@ -# This file is part of arduino-cli. -# -# Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -# -# This software is released under the GNU General Public License version 3, -# which covers the main part of arduino-cli. -# The terms of this license can be found at: -# https://www.gnu.org/licenses/gpl-3.0.en.html -# -# You can be released from the requirements of the above licenses by purchasing -# a commercial license. Buying such a license is mandatory if you want to modify or -# otherwise use the software for commercial activities involving the Arduino -# software without disclosing the source code of your own applications. To purchase -# a commercial license, send an email to license@arduino.cc. - -from pathlib import Path - - -def test_upgrade(run_command): - # Updates index for cores and libraries - run_command(["core", "update-index"]) - run_command(["lib", "update-index"]) - - # Installs an outdated core and library - run_command(["core", "install", "arduino:avr@1.6.3"]) - assert run_command(["lib", "install", "USBHost@1.0.0"]) - - # Installs latest version of a core and a library - run_command(["core", "install", "arduino:samd"]) - assert run_command(["lib", "install", "ArduinoJson"]) - - # Verifies outdated core and libraries are shown - result = run_command(["outdated"]) - assert result.ok - lines = result.stdout.splitlines() - assert "Arduino AVR Boards" in lines[1] - assert "USBHost" in lines[4] - - result = run_command(["upgrade"]) - assert result.ok - - # Verifies cores and libraries have been updated - result = run_command(["outdated"]) - assert result.ok - assert result.stdout == "\n" - - -def test_upgrade_using_library_with_invalid_version(run_command, data_dir): - assert run_command(["update"]) - - # Install latest version of a library - assert run_command(["lib", "install", "WiFi101"]) - - # Verifies library is not shown - res = run_command(["outdated"]) - assert res.ok - assert "WiFi101" not in res.stdout - - # Changes the version of the currently installed library so that it's - # invalid - lib_path = Path(data_dir, "libraries", "WiFi101") - Path(lib_path, "library.properties").write_text("name=WiFi101\nversion=1.0001") - - # Verifies library gets upgraded - res = run_command(["upgrade"]) - assert res.ok - assert "WiFi101" in res.stdout - - -def test_upgrade_unused_core_tools_are_removed(run_command, data_dir): - assert run_command(["update"]) - - # Installs a core - assert run_command(["core", "install", "arduino:avr@1.8.2"]) - - # Verifies expected tool is installed - tool_path = Path(data_dir, "packages", "arduino", "tools", "avr-gcc", "7.3.0-atmel3.6.1-arduino5") - assert tool_path.exists() - - # Upgrades everything - assert run_command(["upgrade"]) - - # Verifies tool is uninstalled since it's not used by newer core version - assert not tool_path.exists()