blob: e87210bf997e7f8dde121b440b0497aaf0c6bf7f [file] [log] [blame]
#!/usr/bin/env fuchsia-vendored-python
# Copyright 2022 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import json
import os
import shutil
import tempfile
import unittest
from unittest import mock
import create_api_level
FAKE_VERSION_HISTORY_FILE_CONTENT = """{
"data": {
"name": "Platform version map",
"type": "version_history",
"api_levels": {
"1" : {
"abi_revision": "0x0000000000000001",
"phase": "supported"
}
}
},
"schema_id": "https://fuchsia.dev/schema/version_history.json"
}
"""
OLD_API_LEVEL = 1
OLD_SUPPORTED_API_LEVELS = [1]
NEW_API_LEVEL = 2
# This script doesn't update the set of supported API levels, this only happen
# when freezing an API level.
NEW_SUPPORTED_API_LEVELS = OLD_SUPPORTED_API_LEVELS
class TestUpdatePlatformVersionMethods(unittest.TestCase):
def setUp(self) -> None:
self.test_dir = tempfile.mkdtemp()
self.fake_version_history_file = os.path.join(
self.test_dir, "version_history.json"
)
with open(self.fake_version_history_file, "w") as f:
f.write(FAKE_VERSION_HISTORY_FILE_CONTENT)
def tearDown(self) -> None:
shutil.rmtree(self.test_dir)
@mock.patch("secrets.randbelow")
def test_update_version_history(self, mock_secrets: mock.MagicMock) -> None:
mock_secrets.return_value = 0x1234ABC
self.assertTrue(
create_api_level.update_version_history(
NEW_API_LEVEL, self.fake_version_history_file
)
)
with open(self.fake_version_history_file, "r") as f:
updated = json.load(f)
self.assertEqual(
updated,
{
"data": {
"name": "Platform version map",
"type": "version_history",
"api_levels": {
"1": {
"abi_revision": "0x0000000000000001",
"phase": "supported",
},
"2": {
"abi_revision": "0x0000000001234ABC",
"phase": "supported",
},
},
},
"schema_id": "https://fuchsia.dev/schema/version_history.json",
},
)
self.assertFalse(
create_api_level.update_version_history(
NEW_API_LEVEL, self.fake_version_history_file
)
)
@mock.patch("secrets.randbelow")
def test_abi_collision(self, mock_secrets: mock.MagicMock) -> None:
# Return 0x1 the first time, and 0x4321 the second time. We expect the
# second one to be used.
mock_secrets.side_effect = [0x1, 0x4321CBA]
self.assertTrue(
create_api_level.update_version_history(
NEW_API_LEVEL, self.fake_version_history_file
)
)
with open(self.fake_version_history_file, "r") as f:
updated = json.load(f)
self.assertEqual(
updated,
{
"data": {
"name": "Platform version map",
"type": "version_history",
"api_levels": {
"1": {
"abi_revision": "0x0000000000000001",
"phase": "supported",
},
"2": {
"abi_revision": "0x0000000004321CBA",
"phase": "supported",
},
},
},
"schema_id": "https://fuchsia.dev/schema/version_history.json",
},
)
if __name__ == "__main__":
unittest.main()