blob: c0e573db0e06e70e6205253b1e5781c48e88ea15 [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.
""" Runs component_storage tests on a fuchsia emulator. """
import logging
import os
import subprocess
import sys
from pathlib import Path
from component_storage import ComponentStorage
from isolate_daemon import IsolateDaemon
from test_env_setup import wait_for_env_setup
LOG_DIR = os.getenv('ISOLATED_OUTDIR', '/tmp')
TMP = os.getenv('TMPDIR', '/tmp')
def main() -> int:
"""Entry of the test."""
extra_args = []
for arg in sys.argv:
if not arg.startswith(
'--isolated-script-test-output') and not arg.startswith(
'--isolated-script-test-perf-output'):
extra_args.append(arg)
proc = subprocess.Popen([
os.path.join(os.path.dirname(__file__), 'test_env_setup.py'),
'--logs-dir', LOG_DIR
] + extra_args)
assert wait_for_env_setup(proc, LOG_DIR)
logging.warning('test_env_setup.py is running on process %s', proc.pid)
storage = ComponentStorage('core/feedback')
assert len(storage.list('.', 'data')) > 0
# '/' should behave the same as '.'
assert storage.list('/', 'data') == storage.list('.', 'data')
storage.pull('build_version.txt', TMP, 'data')
assert len(Path(os.path.join(TMP, 'build_version.txt')).read_text()) > 0
Path(os.path.join(TMP, 'tmp.txt')).write_text(
'this is a line of meaningless content for testing only.')
storage.push(os.path.join(TMP, 'tmp.txt'), '.', 'tmp')
assert 'tmp.txt' in storage.list('.', 'tmp')
# There isn't a way to cat the file directly by using storage component; it
# has to be copied back.
storage.pull('tmp.txt', os.path.join(TMP, 'tmp2.txt'), 'tmp')
assert Path(os.path.join(TMP, 'tmp.txt')).read_text() == Path(
os.path.join(TMP, 'tmp2.txt')).read_text()
storage.delete('tmp.txt', 'tmp')
assert 'tmp.txt' not in storage.list('.', 'tmp')
proc.terminate()
return proc.wait()
if __name__ == '__main__':
# Creates the isolate dir for daemon to ensure it can be shared across the
# processes.
with IsolateDaemon.IsolateDir():
sys.exit(main())