summaryrefslogtreecommitdiff
path: root/tests/cloud_tests/images/base.py
diff options
context:
space:
mode:
authorWesley Wiedenmeier <wesley.wiedenmeier@gmail.com>2017-06-08 18:23:31 -0400
committerScott Moser <smoser@brickies.net>2017-06-08 18:24:17 -0400
commit76d58265e34851b78e952a7f275340863c90a9f5 (patch)
tree91bf17879724b180e43bff07e428bb9089cbb395 /tests/cloud_tests/images/base.py
parentad2680a689ab78847ccce7766d6591797d99e219 (diff)
downloadvyos-cloud-init-76d58265e34851b78e952a7f275340863c90a9f5.tar.gz
vyos-cloud-init-76d58265e34851b78e952a7f275340863c90a9f5.zip
Integration Testing: tox env, pyxld 2.2.3, and revamp framework
Massive update to clean up and greatly enhance the integration testing framework developed by Wesley Wiedenmeier. - Updated tox environment to run integration test 'citest' to utilize pylxd 2.2.3 - Add support for distro feature flags - add framework for feature flags to release config with feature groups and overrides allowed in any release conf override level - add support for feature flags in platform and config handling - during collect, skip testcases that require features not supported by the image with a warning message - Enable additional distros (i.e. centos, debian) - Add 'bddeb' command to build a deb from the current working tree cleanly in a container, so deps do not have to be installed on host - Adds a command line option '--preserve-data' that ensures that collected data will be left after tests run. This also allows the directory to store collected data in during the run command to be specified using '--data-dir'. - Updated Read the Docs testing page and doc strings for pep 257 compliance
Diffstat (limited to 'tests/cloud_tests/images/base.py')
-rw-r--r--tests/cloud_tests/images/base.py68
1 files changed, 36 insertions, 32 deletions
diff --git a/tests/cloud_tests/images/base.py b/tests/cloud_tests/images/base.py
index 394b11ff..0a1e0563 100644
--- a/tests/cloud_tests/images/base.py
+++ b/tests/cloud_tests/images/base.py
@@ -1,65 +1,69 @@
# This file is part of cloud-init. See LICENSE file for license information.
+"""Base class for images."""
+
class Image(object):
- """
- Base class for images
- """
+ """Base class for images."""
+
platform_name = None
- def __init__(self, name, config, platform):
- """
- setup
+ def __init__(self, platform, config):
+ """Set up image.
+
+ @param platform: platform object
+ @param config: image configuration
"""
- self.name = name
- self.config = config
self.platform = platform
+ self.config = config
def __str__(self):
- """
- a brief description of the image
- """
+ """A brief description of the image."""
return '-'.join((self.properties['os'], self.properties['release']))
@property
def properties(self):
- """
- {} containing: 'arch', 'os', 'version', 'release'
- """
+ """{} containing: 'arch', 'os', 'version', 'release'."""
raise NotImplementedError
- # FIXME: instead of having execute and push_file and other instance methods
- # here which pass through to a hidden instance, it might be better
- # to expose an instance that the image can be modified through
- def execute(self, command, stdin=None, stdout=None, stderr=None, env={}):
+ @property
+ def features(self):
+ """Feature flags supported by this image.
+
+ @return_value: list of feature names
"""
- execute command in image, modifying image
+ return [k for k, v in self.config.get('features', {}).items() if v]
+
+ @property
+ def setup_overrides(self):
+ """Setup options that need to be overridden for the image.
+
+ @return_value: dictionary to update args with
"""
+ # NOTE: more sophisticated options may be requied at some point
+ return self.config.get('setup_overrides', {})
+
+ def execute(self, *args, **kwargs):
+ """Execute command in image, modifying image."""
raise NotImplementedError
def push_file(self, local_path, remote_path):
- """
- copy file at 'local_path' to instance at 'remote_path', modifying image
- """
+ """Copy file at 'local_path' to instance at 'remote_path'."""
raise NotImplementedError
- def run_script(self, script):
- """
- run script in image, modifying image
- return_value: script output
+ def run_script(self, *args, **kwargs):
+ """Run script in image, modifying image.
+
+ @return_value: script output
"""
raise NotImplementedError
def snapshot(self):
- """
- create snapshot of image, block until done
- """
+ """Create snapshot of image, block until done."""
raise NotImplementedError
def destroy(self):
- """
- clean up data associated with image
- """
+ """Clean up data associated with image."""
pass
# vi: ts=4 expandtab