summaryrefslogtreecommitdiff
path: root/mason/tests/artifact_upload.py
diff options
context:
space:
mode:
Diffstat (limited to 'mason/tests/artifact_upload.py')
-rw-r--r--mason/tests/artifact_upload.py118
1 files changed, 118 insertions, 0 deletions
diff --git a/mason/tests/artifact_upload.py b/mason/tests/artifact_upload.py
new file mode 100644
index 0000000..21d1093
--- /dev/null
+++ b/mason/tests/artifact_upload.py
@@ -0,0 +1,118 @@
+# Copyright 2014 Codethink Ltd
+
+import cliapp
+import json
+import logging
+import os
+import urlparse
+
+from turbo_hipster.lib import common
+from turbo_hipster.lib import models
+
+
+#TODO: Less different instances of this would be nice
+class MorphologyHelper(object):
+
+ def __init__(self, path):
+ self.defs_repo = morphlib.gitdir.GitDirectory(path)
+ self.loader = morphlib.morphloader.MorphologyLoader()
+ self.finder = morphlib.morphologyfinder.MorphologyFinder(self.defs_repo)
+
+ def load_morphology(self, path):
+ text = self.finder.read_morphology(path)
+ return self.loader.load_from_string(text)
+
+ @classmethod
+ def iterate_systems(cls, systems_list):
+ for system in systems_list:
+ yield morphlib.util.sanitise_morphology_path(system['morph'])
+ if 'subsystems' in system:
+ for subsystem in cls.iterate_systems(system['subsystems']):
+ yield subsystem
+
+ def iterate_cluster_deployments(cls, cluster_morph):
+ for system in cluster_morph['systems']:
+ path = morphlib.util.sanitise_morphology_path(system['morph'])
+ defaults = system.get('deploy-defaults', {})
+ for name, options in system['deploy'].iteritems():
+ config = dict(defaults)
+ config.update(options)
+ yield path, name, config
+
+ def load_cluster_systems(self, cluster_morph):
+ for system_path in set(self.iterate_systems(cluster_morph['systems'])):
+ system_morph = self.load_morphology(system_path)
+ yield system_path, system_morph
+
+
+#TODO: Deployment
+
+
+class Runner(models.Task):
+
+ """This thread handles running the build-deploy-build test,
+ which is used to ensure that Baserock can build Baserock."""
+
+ log = logging.getLogger("task_plugins.build_deploy_test.task.Runner")
+
+ def __init__(self, worker_server, plugin_config, job_name):
+ super(Runner, self).__init__(worker_server, plugin_config, job_name)
+
+ self.total_steps = 5
+ print self.job_arguments
+
+ def do_job_steps(self):
+ self.log.info('Step 1: Creating a workspace')
+ self._create_workspace()
+
+ self.log.info('Step 2: Deploy and test the systems')
+ self._deploy_and_test_systems()
+
+ self.log.info('Step 3: Clean up')
+ self._clean_up()
+
+ def _do_git_config(self):
+ cliapp.runcmd(['git', 'config', 'user.name', 'Mason Test Runner'])
+ cliapp.runcmd(['git', 'config', 'user.email', 'mason@test.runner'])
+
+ @common.task_step
+ def _create_workspace(self):
+ self.commit = self.job_arguments['ZUUL_COMMIT']
+ self.project = self.job_arguments['ZUUL_PROJECT']
+ self.ref = self.job_arguments['ZUUL_REF']
+ self.workspace = '/root/mason-workspace'
+ self.zuul_url = self.job_arguments['ZUUL_URL']
+
+ url = urlparse.urlparse(self.zuul_url)
+ self.defs_checkout = os.path.join(self.workspace,
+ self.commit,
+ url.hostname,
+ '8080',
+ self.project)
+
+ self._do_git_config()
+ cliapp.runcmd(['morph', 'init', self.workspace])
+
+ repo = 'http://%s:8080/%s' % (url.hostname, self.project)
+ cliapp.runcmd(['morph', 'checkout', repo, self.commit], cwd=self.workspace)
+
+ @common.task_step
+ def _test_systems(self):
+ infrastructure = \
+ self.plugin_config['config']['test-infrastructure-type']
+ cmd = ['scripts/release-test']
+ args = ['--deployment-host',
+ self.plugin_config['config']['deployment-host'],
+ '--trove-host', self.plugin_config['config']['trove-host'],
+ '--trove-id', self.plugin_config['config']['trove-id'],
+ '--test-ref', self.commit
+ ]
+ if infrastructure == 'openstack':
+ cmd = ['/usr/lib/mason/mason-test-os']
+ args += ['--net-id',
+ self.plugin_config['config']['openstack-network-id']]
+ args += [self.plugin_config['config']['cluster-morphology']]
+
+ @common.task_step
+ def _clean_up(self):
+ cliapp.runcmd(['rm', '-rf', self.workspace])