add rally to the run
diff --git a/tcp_tests/managers/rallymanager.py b/tcp_tests/managers/rallymanager.py
index bd937d5..af3e68d 100644
--- a/tcp_tests/managers/rallymanager.py
+++ b/tcp_tests/managers/rallymanager.py
@@ -11,6 +11,10 @@
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
+import datetime
+import json
+
+from junit_xml import TestSuite, TestCase
from tcp_tests import logger
from tcp_tests import settings
@@ -25,9 +29,9 @@
image_name = 'rallyforge/rally'
image_version = '0.5.0'
- def __init__(self, underlay, admin_node_name):
+ def __init__(self, underlay, admin_host):
super(RallyManager, self).__init__()
- self._admin_node_name = admin_node_name
+ self._admin_host = admin_host
self._underlay = underlay
def prepare(self):
@@ -40,17 +44,13 @@
rally verify genconfig
rally verify showconfig"""
cmd = "cat > {path} << EOF\n{content}\nEOF".format(
- path='/home/{user}/rally/install_tempest.sh'.format(
- user=settings.SSH_LOGIN), content=content)
- cmd1 = "chmod +x /home/{user}/rally/install_tempest.sh".format(
- user=settings.SSH_LOGIN)
- cmd2 = "cp /home/{user}/openrc-* /home/{user}/rally/openrc".format(
- user=settings.SSH_LOGIN)
+ path='/root/rally/install_tempest.sh', content=content)
+ cmd1 = "chmod +x /root/rally/install_tempest.sh"
+ cmd2 = "scp ctl01:/root/keystonerc /root/rally/openrc"
- with self._underlay.remote(node_name=self._admin_node_name) as remote:
+ with self._underlay.remote(host=self._admin_host) as remote:
LOG.info("Create rally workdir")
- remote.check_call('mkdir -p /home/{user}/rally'.format(
- user=settings.SSH_LOGIN))
+ remote.check_call('mkdir -p /root/rally')
LOG.info("Create install_tempest.sh")
remote.check_call(cmd)
LOG.info("Chmod +x install_tempest.sh")
@@ -61,14 +61,15 @@
def pull_image(self, version=None):
version = version or self.image_version
image = self.image_name
- cmd = "docker pull {image}:{version}".format(image=image,
- version=version)
- with self._underlay.remote(node_name=self._admin_node_name) as remote:
+ cmd = ("apt-get -y install docker.io &&"
+ " docker pull {image}:{version}".format(image=image,
+ version=version))
+ with self._underlay.remote(host=self._admin_host) as remote:
LOG.info("Pull {image}:{version}".format(image=image,
version=version))
remote.check_call(cmd)
- with self._underlay.remote(node_name=self._admin_node_name) as remote:
+ with self._underlay.remote(host=self._admin_host) as remote:
LOG.info("Getting image id")
cmd = "docker images | grep 0.5.0| awk '{print $3}'"
res = remote.check_call(cmd)
@@ -76,10 +77,9 @@
LOG.info("Image ID is {}".format(self.image_id))
def run(self):
- with self._underlay.remote(node_name=self._admin_node_name) as remote:
- cmd = ("docker run --net host -v /home/{user}/rally:/home/rally "
- "-tid -u root {image_id}".format(
- user=settings.SSH_LOGIN, image_id=self.image_id))
+ with self._underlay.remote(host=self._admin_host) as remote:
+ cmd = ("docker run --net host -v /root/rally:/home/rally "
+ "-tid -u root {image_id}".format(image_id=self.image_id))
LOG.info("Run Rally container")
remote.check_call(cmd)
@@ -92,27 +92,80 @@
LOG.info("Container ID is {}".format(self.docker_id))
def run_tempest(self, test=''):
- docker_exec = ('source /home/{user}/rally/openrc; '
+ docker_exec = ('source /root/rally/openrc; '
'docker exec -i {docker_id} bash -c "{cmd}"')
commands = [
docker_exec.format(cmd="./install_tempest.sh",
- user=settings.SSH_LOGIN,
docker_id=self.docker_id),
docker_exec.format(
cmd="source /home/rally/openrc && "
"rally verify start {test}".format(test=test),
- user=settings.SSH_LOGIN,
docker_id=self.docker_id),
docker_exec.format(
cmd="rally verify results --json --output-file result.json",
- user=settings.SSH_LOGIN,
docker_id=self.docker_id),
docker_exec.format(
cmd="rally verify results --html --output-file result.html",
- user=settings.SSH_LOGIN,
docker_id=self.docker_id),
]
- with self._underlay.remote(node_name=self._admin_node_name) as remote:
+ with self._underlay.remote(host=self._admin_host) as remote:
LOG.info("Run tempest inside Rally container")
for cmd in commands:
remote.check_call(cmd, verbose=True)
+
+ def get_results(self, store=True, store_file='tempest.xml'):
+ LOG.info('Storing tests results...')
+ res_file_name = 'result.json'
+ file_prefix = 'results_' + datetime.datetime.now().strftime(
+ '%Y%m%d_%H%M%S') + '_'
+ file_dst = '{0}/logs/{1}{2}'.format(
+ settings.LOGS_DIR, file_prefix, res_file_name)
+ with self._underlay.remote(host=self._admin_host) as remote:
+ remote.download(
+ '/root/rally/{1}'.format(res_file_name),
+ file_dst)
+ res = json.load(remote.open('/root/rally/result.json'))
+ if not store:
+ return res
+
+ formatted_tc = []
+ failed_cases = [res['test_cases'][case]
+ for case in res['test_cases']
+ if res['test_cases'][case]['status']
+ in 'fail']
+ for case in failed_cases:
+ if case:
+ tc = TestCase(case['name'])
+ tc.add_failure_info(case['traceback'])
+ formatted_tc.append(tc)
+
+ skipped_cases = [res['test_cases'][case]
+ for case in res['test_cases']
+ if res['test_cases'][case]['status'] in 'skip']
+ for case in skipped_cases:
+ if case:
+ tc = TestCase(case['name'])
+ tc.add_skipped_info(case['reason'])
+ formatted_tc.append(tc)
+
+ error_cases = [res['test_cases'][case] for case in res['test_cases']
+ if res['test_cases'][case]['status'] in 'error']
+
+ for case in error_cases:
+ if case:
+ tc = TestCase(case['name'])
+ tc.add_error_info(case['traceback'])
+ formatted_tc.append(tc)
+
+ success = [res['test_cases'][case] for case in res['test_cases']
+ if res['test_cases'][case]['status'] in 'success']
+ for case in success:
+ if case:
+ tc = TestCase(case['name'])
+ formatted_tc.append(tc)
+
+ ts = TestSuite("tempest", formatted_tc)
+ with open(store_file, 'w') as f:
+ ts.to_file(f, [ts], prettyprint=False)
+
+ return res