blob: e5371d13e4020bd3c8ccb43699755f62ed5238e5 [file] [log] [blame]
#!/usr/bin/env vpython3
# Copyright 2025 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""File for testing monitors.py."""
import unittest
import unittest.mock as mock
from types import SimpleNamespace
from component_storage import ComponentStorage
# Tests should use their names to explain the meaning of the tests rather than
# relying on the extra docstrings.
# pylint: disable=missing-docstring
class ComponentStorageTest(unittest.TestCase):
@mock.patch('component_storage.run_ffx_command')
def test_retrieve_instance_id(self, mock_ffx) -> None:
# This is the real output of a ffx component show, use it as-is - even
# lines are fairly long.
# pylint: disable=line-too-long
mock_ffx.return_value = SimpleNamespace(stdout="""{
"moniker": "core/session-manager/session:session/cast_runner",
"url": "fuchsia-pkg://fuchsia.com/cast_runner#meta/cast_runner.cm",
"environment": null,
"instance_id": "980a67c8e6b0aa7736e69bc5e826bcc6a54f331a9d25947c2e7fb9d432576a16",
"resolved": {
"resolved_url": "fuchsia-pkg://fuchsia.com/cast_runner#meta/cast_runner.cm",
"merkle_root": "e418dcea78a3335bac2282f35524247e42d5ae66e999cbe4939dab73e4f5e422",
"runner": "elf",
"incoming_capabilities": [
"/config/data",
"/config/tzdata/icu",
"/svc/chromium.cast.ApplicationConfigManager",
"/svc/chromium.cast.CorsExemptHeaderProvider",
"/svc/fuchsia.feedback.ComponentDataRegister",
"/svc/fuchsia.feedback.CrashReportingProductRegister",
"/svc/fuchsia.inspect.InspectSink",
"/svc/fuchsia.logger.LogSink",
"/svc/fuchsia.sysmem.Allocator",
"/svc/fuchsia.sysmem2.Allocator",
"/svc/fuchsia.vulkan.loader.Loader",
"/svc/fuchsia.component.Realm",
"/svc/fuchsia.tracing.provider.Registry",
"/cache"
],
"exposed_capabilities": [
"chromium.cast.DataReset",
"fuchsia.web.Debug",
"fuchsia.web.FrameHost",
"cast-resolver",
"cast-runner"
],
"config": null,
"started": {
"runtime": {
"Elf": {
"job_id": 128198918,
"process_id": 128198943,
"process_start_time": 1047751358668791,
"process_start_time_utc_estimate": "2025-03-05 00:27:32.947167032 UTC"
}
},
"outgoing_capabilities": [
"chromium.cast.DataReset",
"debug",
"fuchsia.component.resolution.Resolver",
"fuchsia.component.runner.ComponentRunner",
"fuchsia.web.Debug",
"fuchsia.web.FrameHost",
"web_instances"
],
"start_reason": "'core/session-manager/session:session/cast_agent/cast-apps:68ab9190-e34c-4ec4-8971-a9e578824640' requested capability 'cast-resolver'"
},
"collections": [
"web_instances"
]
}
}""")
# pylint: disable=protected-access
self.assertEqual(
ComponentStorage(
"fuchsia-pkg://fuchsia.com/cast_runner#meta/cast_runner.cm",
"fuchsia-ac67-8464-ea93")._instance_id,
"980a67c8e6b0aa7736e69bc5e826bcc6a54f331a9d25947c2e7fb9d432576a16")
@mock.patch('component_storage.run_ffx_command')
def test_assert_on_invalid_ffx_output(self, mock_ffx) -> None:
mock_ffx.return_value = SimpleNamespace(stdout="""{
"moniker": "core/session-manager/session:session/cast_runner",
"url": "fuchsia-pkg://fuchsia.com/cast_runner#meta/cast_runner.cm",
"environment": null,
"not_an_instance_id": "980a67c8e6b0aa7736e69bc5e826bcc6a54f331a9d25947c2e7fb9d432576a16",
}
}""")
with self.assertRaises(Exception):
ComponentStorage(
"fuchsia-pkg://fuchsia.com/cast_runner#meta/cast_runner.cm",
"fuchsia-ac67-8464-ea93")
if __name__ == '__main__':
unittest.main()