diff --git a/Tests/Python/tt_test.py b/Tests/Python/tt_test.py index 674e2c38f..9fc766fea 100644 --- a/Tests/Python/tt_test.py +++ b/Tests/Python/tt_test.py @@ -66,18 +66,19 @@ class TtTest(unittest.TestCase): def default_tools(self): return {name: read_tool(name) for name in ("update-self.py", "update-sdk.py", "_bootstrap.py")} | {"echo.py": ECHO_TOOL} - def publish_sdk(self, tools, commit="commit1", sdk_content="# sdk"): + def publish_sdk(self, tools, commit="commit1", sdk_content="# sdk", platforms=("posix",)): version_directory = os.path.join(self.cdn, "sdk", VERSION) os.makedirs(version_directory, exist_ok=True) tools_zip = make_zip(tools) with open(os.path.join(version_directory, "tools.zip"), "wb") as file: file.write(tools_zip) - with open(os.path.join(version_directory, "TactilitySDK-posix.zip"), "wb") as file: - file.write(make_zip({"TactilitySDK.cmake": sdk_content})) + for platform in platforms: + with open(os.path.join(version_directory, f"TactilitySDK-{platform}.zip"), "wb") as file: + file.write(make_zip({"TactilitySDK.cmake": sdk_content})) index = { "version": VERSION, "gitCommit": commit, - "platforms": {"posix": "TactilitySDK-posix.zip"}, + "platforms": {platform: f"TactilitySDK-{platform}.zip" for platform in platforms}, "tools": {"file": "tools.zip", "sha256": hashlib.sha256(tools_zip).hexdigest()}, } with open(os.path.join(version_directory, "index.json"), "w") as file: @@ -173,10 +174,48 @@ class TtTest(unittest.TestCase): self.assertIn("run 'tt update-sdk'", result.stderr) result = self.run_tt("update-sdk") self.assertEqual(result.returncode, 0, result.stderr) - self.assertIn("Updating the tools", result.stdout) + self.assertIn("Downloading the tools", result.stdout) + self.assertIn("was updated", result.stdout) self.assertEqual(self.run_tt("echo").returncode, 4) self.assertEqual(self.read_sdk_file(), "# sdk 2") + def test_all_platforms_installs_every_platform_of_the_sdk(self): + self.publish_sdk(self.default_tools(), platforms=("posix", "esp32")) + self.write_manifest(self.work, platforms="all") + self.assertEqual(self.run_tt("echo").returncode, 3) + for platform in ("posix", "esp32"): + self.assertTrue(os.path.isdir(self.sdk_path(f"platform-{platform}", "TactilitySDK")), platform) + + def test_missing_platform_of_a_republished_sdk_asks_for_update_sdk(self): + self.publish_sdk(self.default_tools(), platforms=("posix", "esp32")) + self.write_manifest(self.work) + self.assertEqual(self.run_tt("echo").returncode, 3) + self.publish_sdk(self.default_tools(), commit="commit2", sdk_content="# sdk 2", platforms=("posix", "esp32")) + self.expire_index() + self.write_manifest(self.work, platforms="posix,esp32") + result = self.run_tt("echo") + self.assertEqual(result.returncode, 1) + self.assertIn("run 'tt update-sdk' first", result.stderr) + self.assertFalse(os.path.exists(self.sdk_path("platform-esp32"))) + self.assertEqual(self.run_tt("update-sdk").returncode, 0) + self.assertEqual(self.run_tt("echo").returncode, 3) + for platform in ("posix", "esp32"): + with open(self.sdk_path(f"platform-{platform}", "commit")) as file: + self.assertEqual(file.read(), "commit2", platform) + + def test_failed_update_sdk_keeps_the_installed_build(self): + self.write_manifest(self.work) + self.assertEqual(self.run_tt("echo").returncode, 3) + tools = self.default_tools() | {"echo.py": "import sys\nsys.exit(4)\n"} + self.publish_sdk(tools, commit="commit2", sdk_content="# sdk 2") + os.remove(os.path.join(self.cdn, "sdk", VERSION, "TactilitySDK-posix.zip")) + result = self.run_tt("update-sdk") + self.assertEqual(result.returncode, 1) + self.assertIn("was not changed", result.stderr) + self.assertEqual(self.read_sdk_file(), "# sdk") + self.assertEqual(self.run_tt("echo").returncode, 3) + self.assertEqual(sorted(name for name in os.listdir(self.sdk_path()) if name.endswith((".new", ".old"))), []) + def test_installed_sdk_works_offline(self): self.write_manifest(self.work) self.assertEqual(self.run_tt("echo").returncode, 3)