setup function test framework 69/12369/1
authorGuo Ruijing <ruijing.guo@intel.com>
Thu, 14 Sep 2017 14:54:53 +0000 (22:54 +0800)
committerGuo Ruijing <ruijing.guo@intel.com>
Thu, 14 Sep 2017 14:57:58 +0000 (22:57 +0800)
this patch is to setup function test framwork for multicloud

Change-Id: I372ca4a11878b25fd9b5f4b7ed199e0d8748e11d
Issue-Id: MULTICLOUD-92
Signed-off-by: Guo Ruijing <ruijing.guo@intel.com>
12 files changed:
ocata/vagrant/Vagrantfile [new file with mode: 0644]
ocata/vagrant/bootstrap.sh [new file with mode: 0644]
ocata/vagrant/compute.conf [new file with mode: 0644]
ocata/vagrant/control.conf [new file with mode: 0644]
ocata/vagrant/setup_cell.sh [new file with mode: 0644]
ocata/vagrant/setup_compute.sh [new file with mode: 0644]
ocata/vagrant/setup_control.sh [new file with mode: 0644]
ocata/vagrant/test/Dockerfile [new file with mode: 0644]
ocata/vagrant/test/extsys.py [new file with mode: 0644]
ocata/vagrant/test/test1.sh [new file with mode: 0644]
ocata/vagrant/test/test_multicloud.sh [new file with mode: 0644]
ocata/vagrant/test/tests [new file with mode: 0644]

diff --git a/ocata/vagrant/Vagrantfile b/ocata/vagrant/Vagrantfile
new file mode 100644 (file)
index 0000000..d8b0f95
--- /dev/null
@@ -0,0 +1,42 @@
+# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
+$num_compute_nodes = 1
+
+Vagrant.configure("2") do |config|
+
+  config.vm.box = "bento/ubuntu-16.04"
+
+  config.vm.provider :virtualbox do |vb|
+    vb.customize ["modifyvm", :id, "--memory", 9192]
+    vb.customize ["modifyvm", :id, "--cpus", 4]
+    vb.customize ["modifyvm", :id, "--nicpromisc3", "allow-all"]
+    vb.customize "post-boot",["controlvm", :id, "setlinkstate1", "on"]
+  end
+
+
+  config.vm.define "control" do |config|
+    config.vm.hostname = "control"
+    config.vm.network "private_network", ip: "192.168.0.10"
+    config.vm.network :private_network,  ip: "192.168.1.10"
+    config.vm.provision "shell", path: "bootstrap.sh", privileged: false
+    config.vm.provision "shell", path: "setup_control.sh", privileged: false
+  end
+
+  (1 .. $num_compute_nodes).each do |n|
+    config.vm.define vm_name = "compute-#{n}" do |config|
+      config.vm.hostname = vm_name
+      config.vm.network "private_network", ip: "192.168.0.#{n+20}"
+      config.vm.network :private_network,  ip: "192.168.1.#{n+20}"
+      config.vm.provision "shell", path: "bootstrap.sh", privileged: false
+      config.vm.provision "shell", path: "setup_compute.sh", privileged: false
+    end
+  end
+
+  config.vm.define "multicloud" do |config|
+    config.vm.hostname = "multicloud"
+    config.vm.network "private_network", ip: "192.168.0.30"
+    config.vm.network :private_network,  ip: "192.168.1.30"
+    #config.vm.provision "shell", path: "setup_multivm.sh", privileged: false
+    config.vm.provision "shell", path: "test/test_multicloud.sh", privileged: false
+  end
+
+end
diff --git a/ocata/vagrant/bootstrap.sh b/ocata/vagrant/bootstrap.sh
new file mode 100644 (file)
index 0000000..79d31be
--- /dev/null
@@ -0,0 +1,16 @@
+#!/usr/bin/env bash
+
+set -e
+
+sudo apt-get update -y
+sudo apt-get install git -y
+git clone https://github.com/openstack-dev/devstack 
+cd devstack; git checkout stable/ocata
+sudo apt-get install openvswitch-switch -y
+sudo ovs-vsctl add-br br-ex
+ip=$(ip a s enp0s9 | grep inet | grep -v inet6 | sed "s/.*inet//" | cut -f2 -d' ')
+sudo ip address flush enp0s9
+sudo ovs-vsctl add-port br-ex enp0s9
+sudo ip a a $ip dev br-ex
+sudo ip link set dev br-ex up
+sudo ip link set dev enp0s9 up
diff --git a/ocata/vagrant/compute.conf b/ocata/vagrant/compute.conf
new file mode 100644 (file)
index 0000000..f6c19ea
--- /dev/null
@@ -0,0 +1,20 @@
+[[local|localrc]]
+SCREEN_LOGDIR=/opt/stack/log
+LOGFILE=stack.sh.log
+LOG_COLOR=False
+
+HOST_IP=HOSTIP
+HOST_NAME=HOSTNAME
+SERVICE_HOST=192.168.0.10
+SERVICE_HOST_NAME=control
+
+ADMIN_PASSWORD=admin
+SERVICE_PASSWORD=admin
+DATABASE_PASSWORD=mysql
+RABBIT_PASSWORD=rabbit
+
+ENABLED_SERVICES=rabbit,n-cpu,n-novnc,placement-client,q-agt
+LIBVIRT_TYPE=qemu
+
+OVS_BRIDGE_MAPPINGS=public:br-ex
+OVS_PHYSICAL_BRIDGE=br-ex
diff --git a/ocata/vagrant/control.conf b/ocata/vagrant/control.conf
new file mode 100644 (file)
index 0000000..5b55121
--- /dev/null
@@ -0,0 +1,29 @@
+[[local|localrc]]
+SCREEN_LOGDIR=/opt/stack/log
+LOGFILE=stack.sh.log
+LOG_COLOR=False
+
+HOST_IP=192.168.0.10
+HOST_NAME=control
+SERVICE_HOST=192.168.0.10
+SERVICE_HOST_NAME=control
+
+ADMIN_PASSWORD=admin
+SERVICE_PASSWORD=admin
+DATABASE_PASSWORD=mysql
+RABBIT_PASSWORD=rabbit
+
+enable_plugin heat https://git.openstack.org/openstack/heat stable/ocata
+disable_service n-net
+disable_service tempest
+ENABLED_SERVICES+=,placement-api,q-svc,q-dhcp,q-meta,q-l3
+ENABLED_SERVICES+=,h-eng,h-api,h-api-cfn,h-api-cw
+
+## Neutron options
+FLOATING_RANGE="192.168.1.0/24"
+PUBLIC_NETWORK_GATEWAY="192.168.1.1"
+FIXED_RANGE="10.0.0.0/24"
+Q_FLOATING_ALLOCATION_POOL=start=192.168.1.200,end=192.168.1.250
+Q_USE_SECGROUP=False
+Q_L3_ENABLED=True
+Q_USE_PROVIDERNET_FOR_PUBLIC=True
diff --git a/ocata/vagrant/setup_cell.sh b/ocata/vagrant/setup_cell.sh
new file mode 100644 (file)
index 0000000..0fa736a
--- /dev/null
@@ -0,0 +1,6 @@
+#!/bin/bash
+set -e
+
+source ~/devstack/openrc admin admin
+nova-manage cell_v2 discover_hosts
+nova-manage cell_v2 map_cell_and_hosts
diff --git a/ocata/vagrant/setup_compute.sh b/ocata/vagrant/setup_compute.sh
new file mode 100644 (file)
index 0000000..7b5964e
--- /dev/null
@@ -0,0 +1,14 @@
+#!/usr/bin/env bash
+
+set -e
+
+cd devstack
+cp /vagrant/compute.conf local.conf
+ip=$(ip a s enp0s8 | grep inet | grep -v inet6 | sed "s/.*inet //" | cut -f1 -d'/')
+host=$(hostname)
+sed -i -e "s/HOSTIP/$ip/" -e "s/HOSTNAME/$host/" local.conf
+./stack.sh
+
+sudo apt-get update -y
+sudo apt-get install -y putty
+echo y | plink -ssh -l vagrant -pw vagrant 192.168.0.10 "bash /vagrant/setup_cell.sh"
diff --git a/ocata/vagrant/setup_control.sh b/ocata/vagrant/setup_control.sh
new file mode 100644 (file)
index 0000000..fb7ef8a
--- /dev/null
@@ -0,0 +1,7 @@
+#!/usr/bin/env bash
+
+set -e
+
+cd devstack
+cp /vagrant/control.conf  local.conf
+./stack.sh
diff --git a/ocata/vagrant/test/Dockerfile b/ocata/vagrant/test/Dockerfile
new file mode 100644 (file)
index 0000000..b0789a2
--- /dev/null
@@ -0,0 +1,5 @@
+FROM multicloud-ocata:latest
+
+RUN apt-get update && \
+     apt-get install -y vim
+ADD extsys.py /opt/ocata/lib/ocata/ocata/pub/msapi/extsys.py
diff --git a/ocata/vagrant/test/extsys.py b/ocata/vagrant/test/extsys.py
new file mode 100644 (file)
index 0000000..ba98831
--- /dev/null
@@ -0,0 +1,142 @@
+# Copyright (c) 2017 Wind River Systems, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+import json
+import logging
+import re
+
+from rest_framework import status
+from newton.pub.exceptions import VimDriverNewtonException
+from newton.pub.utils.restcall import req_by_msb,req_to_aai
+
+
+logger = logging.getLogger(__name__)
+
+tisr4 = {
+    "createTime": "2017-04-01 02:22:27",
+    "domain": "Default",
+    "name": "TiS_R4",
+    "password": "admin",
+    "tenant": "admin",
+    "type": "openstack",
+    "url": "http://192.168.0.10:5000/v3",
+    "userName": "admin",
+    "vendor": "OpenStack",
+    "version": "ocata",
+    "vimId": "openstack-hudson-dc_RegionOne",
+    'cloud_owner':'openstack-hudson-dc',
+    'cloud_region_id':'RegionOne',
+    'cloud_extra_info':'',
+    'cloud_epa_caps':'{"huge_page":"true","cpu_pinning":"true",\
+        "cpu_thread_policy":"true","numa_aware":"true","sriov":"true",\
+        "dpdk_vswitch":"true","rdt":"false","numa_locality_pci":"true"}',
+    'insecure':'True',
+}
+
+#    "vimId": "6e720f68-34b3-44f0-a6a4-755929b20393"
+
+def mock_get_vim_by_id(method):
+    def wrapper(vimid):
+        return tisr4
+    return wrapper
+
+def mock_delete_vim_by_id(method):
+    def wrapper(vimid):
+        return status.HTTP_202_ACCEPTED
+    return wrapper
+
+#def get_vims():
+#    retcode, content, status_code = \
+#        req_by_msb("/api/aai-cloudInfrastructure/v1/cloud-infrastructure/cloud-regions", "GET")
+#    if retcode != 0:
+#        logger.error("Status code is %s, detail is %s.", status_code, content)
+#        raise VimDriverNewtonException("Failed to query VIMs from extsys.")
+#    return json.JSONDecoder().decode(content)
+
+@mock_get_vim_by_id
+def get_vim_by_id(vim_id):
+
+    cloud_owner,cloud_region_id = decode_vim_id(vim_id)
+
+    if cloud_owner and cloud_region_id:
+        retcode, content, status_code = \
+            req_to_aai("/cloud-infrastructure/cloud-regions/cloud-region/%s/%s"
+                       % (cloud_owner,cloud_region_id),"GET")
+        if retcode != 0:
+            logger.error("Status code is %s, detail is %s.", status_code, content)
+            raise VimDriverNewtonException(
+                "Failed to query VIM with id (%s:%s,%s)." % (vim_id,cloud_owner,cloud_region_id),
+                status_code, content)
+        tmp_viminfo = json.JSONDecoder().decode(content)
+
+        #assume esr-system-info-id is composed by {cloud-owner} _ {cloud-region-id}
+        retcode2,content2,status_code2 = \
+            req_to_aai("/cloud-infrastructure/cloud-regions/cloud-region/%s/%s"
+                       + "/esr-system-info-list/esr-system-info/%s_%s" \
+                       % (cloud_owner,cloud_region_id,cloud_owner,cloud_region_id),
+                       "GET")
+        if retcode2 != 0:
+            logger.error("Status code is %s, detail is %s.", status_code, content)
+            raise VimDriverNewtonException(
+                "Failed to query ESR system with id (%s:%s,%s)." % (vim_id,cloud_owner,cloud_region_id),
+                status_code, content)
+        tmp_authinfo = json.JSONDecoder().decode(content2)
+
+        #convert vim information
+
+        if tmp_viminfo:
+            viminfo = {}
+            viminfo['vimId'] = vim_id
+            viminfo['cloud_owner'] = cloud_owner
+            viminfo['cloud_region_id'] = cloud_region_id
+            viminfo['type'] = tmp_viminfo['cloud-type']
+            viminfo['name'] = tmp_viminfo['complex-name']
+            viminfo['version'] = tmp_viminfo['cloud-region-version']
+            viminfo['cloud_extra_info'] = tmp_viminfo['cloud-extra-info']
+            viminfo['cloud_epa_caps'] = tmp_viminfo['cloud-epa-caps']
+
+            if tmp_authinfo:
+                viminfo['userName'] = tmp_authinfo['user-name']
+                viminfo['password'] = tmp_authinfo['password']
+                viminfo['domain'] = tmp_authinfo['cloud-domain']
+                viminfo['url'] = tmp_authinfo['service-url']
+                viminfo['tenant'] = tmp_authinfo['default-tenant']
+                viminfo['cacert'] = tmp_authinfo['ssl-cacert']
+                viminfo['insecure'] = tmp_authinfo['ssl-insecure']
+            else:
+                return None
+
+            return viminfo
+        else:
+            return None
+    else:
+        return None
+
+@mock_delete_vim_by_id
+def delete_vim_by_id(vim_id):
+    cloud_owner, cloud_region_id = decode_vim_id(vim_id)
+    if cloud_owner and cloud_region_id:
+        retcode, content, status_code = \
+            req_to_aai("/cloud-infrastructure/cloud-regions/cloud-region/%s/%s"
+                       % ( cloud_owner, cloud_region_id), "DELETE")
+        if retcode != 0:
+            logger.error("Status code is %s, detail is %s.", status_code, content)
+            raise VimDriverNewtonException(
+                "Failed to delete VIM in AAI with id (%s:%s,%s)." % (vim_id,cloud_owner,cloud_region_id),
+                status_code, content)
+        return 0
+    # return non zero if failed to decode cloud owner and region id
+    return 1
+
+def decode_vim_id(vim_id):
+    m = re.search(r'^([0-9a-zA-Z-]+)_([0-9a-zA-Z_-]+)$', vim_id)
+    cloud_owner, cloud_region_id = m.group(1), m.group(2)
+    return cloud_owner, cloud_region_id
diff --git a/ocata/vagrant/test/test1.sh b/ocata/vagrant/test/test1.sh
new file mode 100644 (file)
index 0000000..5c7b793
--- /dev/null
@@ -0,0 +1,4 @@
+#!/bin/bash
+export MULTICLOUD_PLUGIN_ENDPOINT=http://172.16.77.40:9004/api/multicloud-ocata/v0/openstack-hudson-dc_RegionOne
+curl -v -s -H "Content-Type: application/json" -H "X-Auth-Token: $TOKEN" -X GET http://172.16.77.40:9004/api/multicloud-ocata/v0/swagger.json
+curl -v -s -H "Content-Type: application/json" -X POST -d '{ }'  $MULTICLOUD_PLUGIN_ENDPOINT/identity/v3/auth/tokens | grep X-Subject-Token
diff --git a/ocata/vagrant/test/test_multicloud.sh b/ocata/vagrant/test/test_multicloud.sh
new file mode 100644 (file)
index 0000000..d5f56de
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/bash
+sudo apt-get update -y
+sudo apt-get install -y docker.io 
+
+git clone http://gerrit.onap.org/r/multicloud/openstack
+cd openstack/ocata/docker
+sudo docker build -t multicloud-ocata:latest .
+cd /vagrant/test
+sudo docker build -t multicloud-ocata-test:latest .
+sudo docker network create --subnet=172.16.77.0/24 onap
+sudo docker run -d -t  --name ocata-test --network onap --ip 172.16.77.40 -e MSB_ADDR=172.16.77.40:9003 multicloud-ocata-test
+
+while true; do
+    sleep 10
+    curl http://172.16.77.40:9004/api/multicloud-ocata/v0/swagger.json && break
+done
+
+for i in `cat tests`
+do
+    bash ./$i
+done
diff --git a/ocata/vagrant/test/tests b/ocata/vagrant/test/tests
new file mode 100644 (file)
index 0000000..9fb8736
--- /dev/null
@@ -0,0 +1 @@
+test1.sh