1. Add prepare_qtip_image.sh to prepare qtip image before qtip test.
2. Add cleanup_qtip_image.sh to clean up qtip image after finishing
qtip test.
Both of them are invoked in run_qtip.sh
Change-Id: Iba892a2e02e31820ed0525f80a4e2885899557e0
Signed-off-by: wu.zhihui <wu.zhihui1@zte.com.cn>
--- /dev/null
+#!/bin/bash
+
+if [[ ! -f ${QTIP_DIR}/openrc ]];then
+ source ${REPOS_DIR}/releng/utils/fetch_os_creds.sh \
+ -d ${QTIP_DIR}/openrc \
+ -i ${INSTALLER_TYPE} \
+ -a ${INSTALLER_IP}
+fi
+
+source ${QTIP_DIR}/openrc
+
+cleanup_image()
+{
+ echo
+ if ! glance image-list; then
+ return
+ fi
+
+ echo "Deleting image QTIP_CentOS..."
+ glance image-delete $(glance image-list | grep -e QTIP_CentOS | awk '{print $2}')
+
+}
+
+cleanup_image
--- /dev/null
+#!/bin/bash
+IMGNAME='QTIP_CentOS.qcow2'
+IMGPATH='/home/opnfv/imgstore'
+IMGURL='http://build.opnfv.org/artifacts.opnfv.org/qtip/QTIP_CentOS.qcow2'
+
+load_image()
+{
+ if [[ -n $( glance image-list | grep -e QTIP_CentOS) ]]; then
+ return
+ fi
+
+ test -d $IMGPATH || mkdir -p $IMGPATH
+ if [[ ! -f "$IMGPATH/$IMGNAME" ]];then
+ echo
+ echo "========== Downloading QTIP_CentOS image =========="
+ cd $IMGPATH
+ wget -c --progress=dot:giga $IMGURL
+ fi
+
+ echo
+ echo "========== Loading QTIP_CentOS image =========="
+ output=$(glance image-create \
+ --name QTIP_CentOS \
+ --visibility public \
+ --disk-format qcow2 \
+ --container-format bare \
+ --file $IMGPATH/$IMGNAME )
+ echo "$output"
+
+ IMAGE_ID=$(echo "$output" | grep " id " | awk '{print $(NF-1)}')
+
+ if [ -z "$IMAGE_ID" ]; then
+ echo 'Failed uploading QTIP_CentOS image to cloud'.
+ exit 1
+ fi
+
+ echo "QTIP_CentOS image id: $IMAGE_ID"
+}
+
+rm -rf ${QTIP_DIR}/openrc
+
+${REPOS_DIR}/releng/utils/fetch_os_creds.sh \
+-d ${QTIP_DIR}/openrc \
+-i ${INSTALLER_TYPE} \
+-a ${INSTALLER_IP}
+
+source ${QTIP_DIR}/openrc
+
+load_image
#! /bin/bash
-
-
-
-cp ${REPOS_DIR}/releng/utils/fetch_os_creds.sh ${QTIP_DIR}/data/
-cd ${QTIP_DIR} && source get_env_info.sh \
--n ${INSTALLER_TYPE} \
--i ${INSTALLER_IP}
-
-source ${QTIP_DIR}/opnfv-creds.sh
-
-if [ "$TEST_CASE" == "compute" ]; then
- cd ${QTIP_DIR} && python qtip.py -l default -f compute
- cd ${QTIP_DIR}/data/ref_results/ && python compute_suite.py
-fi
-
-if [ "$TEST_CASE" == "storage" ]; then
- cd ${QTIP_DIR} && python qtip.py -l default -f storage
- cd ${QTIP_DIR}/data/ref_results/ && python storage_suite.py
-fi
-
-if [ "$TEST_CASE" == "network" ]; then
- cd ${QTIP_DIR} && python qtip.py -l default -f network
- cd ${QTIP_DIR}/data/ref_results/ && python network_suite.py
-fi
-
-
-if [ "$TEST_CASE" == "all" ]; then
- cd ${QTIP_DIR} && python qtip.py -l default -f compute
- cd ${QTIP_DIR} && python qtip.py -l default -f storage
- cd ${QTIP_DIR} && python qtip.py -l default -f network
-
- cd ${QTIP_DIR}/data/ref_results/ && python compute_suite.py
- cd ${QTIP_DIR}/data/ref_results/ && python storage_suite.py
- cd ${QTIP_DIR}/data/ref_results/ && python network_suite.py
-fi
-
-
-
-
+run_test_suite()
+{
+ if [ "$TEST_CASE" == "compute" ]; then
+ cd ${QTIP_DIR} && python qtip.py -l default -f compute
+ cd ${QTIP_DIR}/data/ref_results/ && python compute_suite.py
+ elif [ "$TEST_CASE" == "storage" ]; then
+ cd ${QTIP_DIR} && python qtip.py -l default -f storage
+ cd ${QTIP_DIR}/data/ref_results/ && python storage_suite.py
+ elif [ "$TEST_CASE" == "network" ]; then
+ cd ${QTIP_DIR} && python qtip.py -l default -f network
+ cd ${QTIP_DIR}/data/ref_results/ && python network_suite.py
+ elif [ "$TEST_CASE" == "all" ]; then
+ cd ${QTIP_DIR} && python qtip.py -l default -f compute
+ cd ${QTIP_DIR} && python qtip.py -l default -f storage
+ cd ${QTIP_DIR} && python qtip.py -l default -f network
+
+ cd ${QTIP_DIR}/data/ref_results/ && python compute_suite.py
+ cd ${QTIP_DIR}/data/ref_results/ && python storage_suite.py
+ cd ${QTIP_DIR}/data/ref_results/ && python network_suite.py
+ fi
+}
+
+source ${QTIP_DIR}/docker/prepare_qtip_image.sh
+
+run_test_suite
+
+source ${QTIP_DIR}/docker/cleanup_qtip_image.sh
+++ /dev/null
-##############################################################################\r
-# Copyright (c) 2015 Dell Inc and others.\r
-#\r
-# All rights reserved. This program and the accompanying materials\r
-# are made available under the terms of the Apache License, Version 2.0\r
-# which accompanies this distribution, and is available at\r
-# http://www.apache.org/licenses/LICENSE-2.0\r
-##############################################################################\r
-import os\r
-import time\r
-\r
-IMGSTORE = "/home/opnfv/imgstore"\r
-\r
-\r
-class FetchImg:\r
-\r
- def __init__(self):\r
- print 'Fetching Image!'\r
-\r
- @staticmethod\r
- def download():\r
- time.sleep(2)\r
- os.system('mkdir -p Temp_Img')\r
- filepath = './Temp_Img/QTIP_CentOS.qcow2'\r
- imgstorepath = IMGSTORE + "/QTIP_CentOS.qcow2"\r
- if os.path.isfile(imgstorepath):\r
- os.system("ln -s %s %s" % (imgstorepath, filepath))\r
- print "QTIP_CentOS.qcow2 exists locally. Skipping the download and using the file from IMG store"\r
- else:\r
- print 'Fetching QTIP_CentOS.qcow2'\r
- os.system('wget http://artifacts.opnfv.org/qtip/QTIP_CentOS.qcow2 -P Temp_Img')\r
-\r
- while not os.path.isfile(filepath):\r
- time.sleep(10)\r
- print 'Download Completed!'\r
import sys\r
from collections import defaultdict\r
from func.env_setup import Env_setup\r
-from func.fetchimg import FetchImg\r
import yaml\r
import heatclient.client\r
import keystoneclient\r
-import glanceclient\r
from novaclient import client\r
import time\r
from func.create_zones import create_zones\r
'1', endpoint=heat_endpoint, token=keystone.auth_token)\r
return self._heat_client\r
\r
- def _get_glance_client(self):\r
- if self._glance_client is None:\r
- keystone = self._get_keystone_client()\r
- glance_endpoint = keystone.service_catalog.url_for(\r
- service_type='image')\r
- self._glance_client = glanceclient.Client(\r
- '2', glance_endpoint, token=keystone.auth_token)\r
- return self._glance_client\r
-\r
def create_stack(self, vm_role_ip_dict, heat_template):\r
\r
global sshkey\r
stackname = 'QTIP'\r
heat = self._get_heat_client()\r
- glance = self._get_glance_client()\r
-\r
- available_images = []\r
- for image_list in glance.images.list():\r
\r
- available_images.append(image_list.name)\r
-\r
- if 'QTIP_CentOS' in available_images:\r
- print 'Image Present'\r
-\r
- elif 'QTIP_CentOS' not in available_images:\r
- fetchImage = FetchImg()\r
- fetchImage.download()\r
- print 'Uploading Image to Glance. Please wait'\r
- qtip_image = glance.images.create(\r
- name='QTIP_CentOS',\r
- visibility='public',\r
- disk_format='qcow2',\r
- container_format='bare')\r
- glance.images.upload(\r
- qtip_image.id, open('./Temp_Img/QTIP_CentOS.qcow2'))\r
for checks in range(3):\r
print "Try to delete heats %s" % checks\r
for prev_stacks in heat.stacks.list():\r
print 'QTIP Stacks exists.\nDeleting Existing Stack'\r
heat.stacks.delete('QTIP')\r
time.sleep(10)\r
-\r
print '\nStack Creating Started\n'\r
\r
try:\r
+++ /dev/null
-import mock
-from func.fetchimg import FetchImg
-
-
-class TestClass:
- @mock.patch('func.fetchimg.os')
- @mock.patch('func.fetchimg.os.path')
- def test_fetch_img_success(self, mock_path, mock_os):
- mock_os.system.return_value = True
- mock_path.isfile.return_value = True
- img = FetchImg()
- img.download()
-
- @mock.patch('func.fetchimg.time')
- @mock.patch('func.fetchimg.os.system')
- @mock.patch('func.fetchimg.os.path')
- def test_fetch_img_fail(self, mock_path, mock_system, mock_time):
- img = FetchImg()
- mock_system.return_value = True
- mock_path.isfile.side_effect = [False, False, True]
- img.download()
- assert mock_time.sleep.call_count == 2
-
- @mock.patch('func.fetchimg.time')
- @mock.patch('func.fetchimg.os.system')
- @mock.patch('func.fetchimg.os.path')
- def test_fetch_temp_success(self, mock_path, mock_system, mock_time):
- img = FetchImg()
- mock_system.return_value = True
- mock_path.isfile.side_effect = [True]
- img.download()
- filepath = './Temp_Img/QTIP_CentOS.qcow2'
- imgstorepath = "/home/opnfv/imgstore/QTIP_CentOS.qcow2"
- mock_system.assert_called_with("ln -s %s %s" % (imgstorepath, filepath))
v2_0 = Mock()
-class ImageMock(MagicMock):
- name = 'QTIP_CentOS'
-
-
-class ImagesMock(MagicMock):
- def list(self):
- return [ImageMock()]
-
-
class StackMock(MagicMock):
status = 'COMPLETE'
outputs = [{'output_key': 'availability_instance_1',
@mock.patch('func.spawn_vm.FetchImg')
@mock.patch('func.spawn_vm.create_zones')
@mock.patch('func.spawn_vm.client', autospec=True)
- @mock.patch('func.spawn_vm.glanceclient', autospec=True)
@mock.patch('func.spawn_vm.keystoneclient.v2_0', autospec=True)
@mock.patch('func.spawn_vm.heatclient.client', autospec=True)
- def test_create_zones_success(self, mock_heat, mock_keystone, mock_glance,
+ def test_create_zones_success(self, mock_heat, mock_keystone,
mock_nova_client, mock_zone, mock_fetch,
mock_setup, test_input, expected):
- mock_glance.Client.return_value = Mock(images=ImagesMock())
mock_nova_client.Client.return_value = Mock()
mock_heat.Client.return_value = Mock(stacks=HeatMock())
k = mock.patch.dict(os.environ, {'INSTALLER_TYPE': 'fuel'})