blob: 12008762f1c07cb7032b0a2631a96a17b9fde817 [file] [log] [blame]
# Copyright 2017 The Chromium OS 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 os
import common
from autotest_lib.site_utils import lxc
from autotest_lib.site_utils.lxc import constants
from autotest_lib.site_utils.lxc import utils as lxc_utils
class FastContainerBucket(lxc.ContainerBucket):
"""A fast container bucket for testing.
If a base container image already exists in the default location on the
local machine, this container just makes a snapshot of it for testing,
rather than re-downloading and installing a fresh base continer.
"""
def __init__(self, lxc_path, host_path):
self.fast_setup = False
try:
if lxc_utils.path_exists(
os.path.join(constants.DEFAULT_CONTAINER_PATH,
constants.BASE)):
lxc_path = os.path.realpath(lxc_path)
if not lxc_utils.path_exists(lxc_path):
os.makedirs(lxc_path)
# Clone the base container (snapshot for speed) to make a base
# container for the unit test.
base = lxc.Container.createFromExistingDir(
constants.DEFAULT_CONTAINER_PATH, constants.BASE)
lxc.Container.clone(src=base,
new_name=constants.BASE,
new_path=lxc_path,
snapshot=True,
cleanup=False)
self.fast_setup = True
finally:
super(FastContainerBucket, self).__init__(lxc_path, host_path)
if self.base_container is not None:
self._setup_shared_host_path()
def setup_base(self, *args, **kwargs):
"""Runs setup_base if fast setup did not work."""
if not self.fast_setup:
super(FastContainerBucket, self).setup_base(*args, **kwargs)