blob: f6a852ecb87385232490b50d62e5f7c708356d82 [file] [log] [blame]
#!/usr/bin/env python3.8
# Copyright 2020 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 sys
import test_env
from lib.factory import Factory
from host_fake import FakeHost
from lib.buildenv import BuildEnv
from lib.device import Device
class FakeFactory(Factory):
"""Fake factory that creates objects for testing.
Unlike the real factory, this object caches and reuses created BuildEnvs
and Devices. It also allows tests to access created objects for
examination.
Attributes:
buildenv: The associated BuildEnv object.
device: The associated Device object.
fuzzer: The most recently created FakeFuzzer object.
"""
def __init__(self):
super(FakeFactory, self).__init__(host=FakeHost())
# Factory created objects, lazily instantiated.
@property
def buildenv(self):
"""The associated BuildEnv object."""
if self._buildenv:
return self._buildenv
fuchsia_dir = '/fuchsia_dir'
self.host.mkdir(fuchsia_dir)
self.host.setenv('FUCHSIA_DIR', fuchsia_dir)
buildenv = BuildEnv(self)
build_dir = buildenv.abspath(fuchsia_dir, "build_dir")
self.host.mkdir(build_dir)
self.host.cwd = build_dir
self.host.touch(build_dir + '/host_x64/symbolizer')
self.host.mkdir(
'{}/prebuilt/third_party/clang/{}/lib/debug/.build-id'.format(
fuchsia_dir, self.host.platform))
self.host.touch(
'{}/prebuilt/third_party/clang/{}/bin/llvm-cov'.format(
fuchsia_dir, self.host.platform))
self.host.touch(
'{}/prebuilt/third_party/clang/{}/bin/llvm-profdata'.format(
fuchsia_dir, self.host.platform))
self.host.mkdir(build_dir + '/.build-id')
self.host.touch(build_dir + '/ssh-keys/ssh_config')
buildenv.configure(build_dir)
golden = 'data/v2.fuzzers.json'
self.host.add_golden(golden)
buildenv.read_fuzzers(golden)
fx_ssh_path = buildenv.abspath('//.fx-ssh-path')
ssh_identity_path = buildenv.abspath('test_ssh_identity')
self.host.touch(fx_ssh_path)
self.host.touch(ssh_identity_path)
with self.host.open(fx_ssh_path) as f:
f.write(ssh_identity_path)
self._buildenv = buildenv
return self._buildenv
@property
def device(self):
"""The associated Device object."""
if self._device:
return self._device
device = Device(self, addr='::1')
device.configure()
self._device = device
return self._device