Source-Sha: 194a59adfd6c901635da7a9c18253bb2210e2426 Policy-Sha: b9b0be0ee74e55f561a803b8aef6be3c2134f5a83b46816a069a372f2eb04f4d Tree-Digest: 4697f2e281c1c6ecafff17cf6eeb391a0a1ac0fa6e5fc429f5b473f4579c252c
50 lines
2.5 KiB
Python
50 lines
2.5 KiB
Python
import importlib.util
|
|
import pathlib
|
|
import unittest
|
|
|
|
from msi_version import product_version
|
|
|
|
spec = importlib.util.spec_from_file_location("render_license", pathlib.Path(__file__).with_name("render-license.py"))
|
|
license_module = importlib.util.module_from_spec(spec)
|
|
spec.loader.exec_module(license_module)
|
|
|
|
|
|
class BuildInputs(unittest.TestCase):
|
|
def test_helper_task_is_fixed_and_separates_agent_input(self):
|
|
script = pathlib.Path(__file__).with_name("provision-helper.ps1").read_text()
|
|
self.assertIn("$serviceAccount = 'NT SERVICE\\RedFlagAgent'", script)
|
|
self.assertIn("$requestPath = Join-Path $helperState 'requests'", script)
|
|
self.assertIn("-Execute $helperPath -Argument 'run-request'", script)
|
|
self.assertIn("$agentService.StartName -ne $serviceAccount", script)
|
|
self.assertIn("[switch]$MigrateAgentService", script)
|
|
self.assertIn("Refusing to replace operator-owned Agent service identity", script)
|
|
self.assertIn("'sidtype', 'RedFlagAgent', 'unrestricted'", script)
|
|
self.assertIn("'config', 'RedFlagAgent', 'obj=', $serviceAccount", script)
|
|
self.assertIn("'config', 'RedFlagAgent', 'obj=', 'LocalSystem'", script)
|
|
self.assertIn("Set-RedFlagDirectoryAcl -Path $requestPath -AgentAccess Modify", script)
|
|
self.assertIn("Set-RedFlagDirectoryAcl -Path $resultPath -AgentAccess Read", script)
|
|
self.assertNotIn("$(Arg", script)
|
|
|
|
def test_revision_upgrades_are_distinct_and_ordered(self):
|
|
releases = ["0.2.9.5", "0.2.9.6", "0.2.10", "0.3.0", "1.0.0"]
|
|
versions = [tuple(map(int, product_version(v).split("."))) for v in releases]
|
|
self.assertEqual(versions, sorted(set(versions)))
|
|
self.assertGreater(versions[0], (0, 2, 9)) # Previous MSI scheme.
|
|
self.assertEqual(product_version("0.2.9.6"), "0.2.906")
|
|
|
|
def test_three_part_release_equals_revision_zero(self):
|
|
self.assertEqual(product_version("0.3.1"), product_version("0.3.1.0"))
|
|
|
|
def test_out_of_range_or_nonrelease_versions_are_rejected(self):
|
|
for version in ["0.2.9.100", "256.1.0", "1.256.0", "1.0.656", "1.0.655.36", "0.2.9-rc1", "dev", "1.2", "1.2.3.4.5"]:
|
|
with self.subTest(version=version), self.assertRaises(ValueError):
|
|
product_version(version)
|
|
|
|
def test_license_escapes_rtf_syntax_without_losing_text(self):
|
|
rendered = license_module.render("{license}\\path\nsecond line")
|
|
self.assertIn(r"\{license\}\\path\par", rendered)
|
|
self.assertIn("second line", rendered)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|