aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitmodules3
-rw-r--r--docker/Dockerfile17
-rw-r--r--docker/Dockerfile.aarch6416
-rw-r--r--docs/com/README.txt9
-rwxr-xr-xdocs/com/pres/Summit/Berlin-2016/conversation.html22
-rwxr-xr-xdocs/com/pres/Summit/Berlin-2016/summit-Berlin.html26
-rwxr-xr-xdocs/com/pres/Summit/Berlin-2016/testapi.html22
-rwxr-xr-xdocs/com/pres/dashboard/dashboard_status.html22
m---------docs/com/pres/reveal.js0
-rw-r--r--[-rwxr-xr-x]functest/ci/__init__.py0
-rwxr-xr-xfunctest/ci/check_os.sh29
-rwxr-xr-xfunctest/ci/config_functest.yaml4
-rwxr-xr-xfunctest/ci/prepare_env.py2
-rwxr-xr-xfunctest/ci/testcases.yaml4
-rw-r--r--[-rwxr-xr-x]functest/ci/tier_builder.py0
-rw-r--r--[-rwxr-xr-x]functest/ci/tier_handler.py0
-rw-r--r--[-rwxr-xr-x]functest/opnfv_tests/features/copper.py0
-rw-r--r--[-rwxr-xr-x]functest/opnfv_tests/features/doctor.py0
-rw-r--r--[-rwxr-xr-x]functest/opnfv_tests/features/domino.py0
-rw-r--r--functest/opnfv_tests/features/odl_sfc.py8
-rw-r--r--[-rwxr-xr-x]functest/opnfv_tests/features/promise.py0
-rw-r--r--[-rwxr-xr-x]functest/opnfv_tests/features/sdnvpn.py0
-rw-r--r--[-rwxr-xr-x]functest/opnfv_tests/features/security_scan.py0
-rw-r--r--[-rwxr-xr-x]functest/opnfv_tests/mano/orchestra.py0
-rw-r--r--[-rwxr-xr-x]functest/opnfv_tests/openstack/healthcheck/healthcheck.sh0
-rw-r--r--functest/opnfv_tests/openstack/refstack_client/defcore.txt (renamed from functest/opnfv_tests/openstack/refstack_client/defcore_201608.txt)2
-rwxr-xr-xfunctest/opnfv_tests/openstack/refstack_client/refstack_client.py6
-rw-r--r--functest/opnfv_tests/openstack/tempest/conf_utils.py6
-rw-r--r--functest/opnfv_tests/openstack/tempest/custom_tests/blacklist.txt16
-rwxr-xr-x[-rw-r--r--]functest/opnfv_tests/vnf/ims/opera_ims.py0
-rwxr-xr-x[-rw-r--r--]functest/opnfv_tests/vnf/ims/orchestra_ims.py8
-rw-r--r--[-rwxr-xr-x]functest/opnfv_tests/vnf/router/__init__.py0
-rw-r--r--[-rwxr-xr-x]functest/opnfv_tests/vnf/router/vyos_vrouter.py0
-rw-r--r--functest/tests/unit/utils/test_openstack_utils.py6
-rw-r--r--functest/utils/decorators.py9
-rw-r--r--[-rwxr-xr-x]functest/utils/functest_logger.py13
-rw-r--r--[-rwxr-xr-x]functest/utils/openstack_utils.py17
-rw-r--r--kingbird_requirements.txt15
38 files changed, 198 insertions, 84 deletions
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 00000000..78668cf6
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "docs/com/pres/reveal.js"]
+ path = docs/com/pres/reveal.js
+ url = https://github.com/hakimel/reveal.js.git
diff --git a/docker/Dockerfile b/docker/Dockerfile
index 30c31dad..4c0995b9 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -120,8 +120,20 @@ RUN cd ${REPOS_DIR}/barometer \
&& pip install .
RUN find ${FUNCTEST_REPO_DIR} -name "*.py" \
- -not -path "*tests/unit*" |xargs grep __main__ |cut -d\: -f 1 |xargs chmod -c 755 \
- && find ${FUNCTEST_REPO_DIR} -name "*.sh" |xargs grep \#\! |cut -d\: -f 1 |xargs chmod -c 755
+ -not -path "*tests/unit*" \
+ -not -path "*functest_venv*" \
+ |xargs grep -L __main__ |cut -d\: -f 1 |xargs chmod -c 644 \
+ && find ${FUNCTEST_REPO_DIR} -name "*.sh" \
+ -not -path "*functest_venv*" \
+ |xargs grep -L \#\! |cut -d\: -f 1 |xargs chmod -c 644
+
+RUN find ${FUNCTEST_REPO_DIR} -name "*.py" \
+ -not -path "*tests/unit*" \
+ -not -path "*functest_venv*" \
+ |xargs grep __main__ |cut -d\: -f 1 |xargs chmod -c 755 \
+ && find ${FUNCTEST_REPO_DIR} -name "*.sh" \
+ -not -path "*functest_venv*" \
+ |xargs grep \#\! |cut -d\: -f 1 |xargs chmod -c 755
RUN /bin/bash ${REPOS_DIR}/parser/tests/parser_install.sh ${REPOS_DIR}
RUN ${REPOS_DIR}/rally/install_rally.sh --yes
@@ -144,6 +156,7 @@ RUN cd ${REPOS_DIR}/bgpvpn && pip install -e .
# Kingbird integration
RUN cd ${REPOS_DIR}/kingbird && pip install -e .
+RUN cd ${FUNCTEST_REPO_DIR} && pip install -r kingbird_requirements.txt
# refstack-client integration
RUN cd ${REPOS_DIR}/refstack-client && ./setup_env -t ${REFSTACK_TAG}
diff --git a/docker/Dockerfile.aarch64 b/docker/Dockerfile.aarch64
index 15f0bdc3..60f72a29 100644
--- a/docker/Dockerfile.aarch64
+++ b/docker/Dockerfile.aarch64
@@ -112,8 +112,20 @@ RUN cd ${RELENG_MODULE_DIR} \
&& pip install -e .
RUN find ${FUNCTEST_REPO_DIR} -name "*.py" \
- -not -path "*tests/unit*" |xargs grep __main__ |cut -d\: -f 1 |xargs chmod -c 755 \
- && find ${FUNCTEST_REPO_DIR} -name "*.sh" |xargs grep \#\! |cut -d\: -f 1 |xargs chmod -c 755
+ -not -path "*tests/unit*" \
+ -not -path "*functest_venv*" \
+ |xargs grep -L __main__ |cut -d\: -f 1 |xargs chmod -c 644 &&
+ find ${FUNCTEST_REPO_DIR} -name "*.sh" \
+ -not -path "*functest_venv*" \
+ |xargs grep -L \#\! |cut -d\: -f 1 |xargs chmod -c 644
+
+RUN find ${FUNCTEST_REPO_DIR} -name "*.py" \
+ -not -path "*tests/unit*" \
+ -not -path "*functest_venv*" \
+ |xargs grep __main__ |cut -d\: -f 1 |xargs chmod -c 755 &&
+ find ${FUNCTEST_REPO_DIR} -name "*.sh" \
+ -not -path "*functest_venv*" \
+ |xargs grep \#\! |cut -d\: -f 1 |xargs chmod -c 755
RUN /bin/bash ${REPOS_DIR}/parser/tests/parser_install.sh ${REPOS_DIR}
RUN ${REPOS_DIR}/rally/install_rally.sh --yes
diff --git a/docs/com/README.txt b/docs/com/README.txt
deleted file mode 100644
index 62d616b4..00000000
--- a/docs/com/README.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-This com folder contains the images, html and css files used to create
-communication based on reveal.js
-All the files are licensed under Creative Commons Attribution 4.0
-International License.
-.. http://creativecommons.org/licenses/by/4.0
-
-You can download reveal.js at: https://github.com/hakimel/reveal.js/
-Then you must put images and css on existing directory and add the pres
-directory
diff --git a/docs/com/pres/Summit/Berlin-2016/conversation.html b/docs/com/pres/Summit/Berlin-2016/conversation.html
index b56b1e10..356c2ad1 100755
--- a/docs/com/pres/Summit/Berlin-2016/conversation.html
+++ b/docs/com/pres/Summit/Berlin-2016/conversation.html
@@ -14,18 +14,18 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui">
- <link rel="stylesheet" href="../../../css/reveal.css">
+ <link rel="stylesheet" href="../../reveal.js/css/reveal.css">
<link rel="stylesheet" href="../../../css/theme/OPNFV-Berlin.css" id="theme">
<!-- Code syntax highlighting -->
- <link rel="stylesheet" href="../../../lib/css/zenburn.css">
+ <link rel="stylesheet" href="../../reveal.js/lib/css/zenburn.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
- link.href = window.location.search.match( /print-pdf/gi ) ? '../../../css/print/pdf.css' : '../../../css/print/paper.css';
+ link.href = window.location.search.match( /print-pdf/gi ) ? '../../reveal.js/css/print/pdf.css' : '../../reveal.js/css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
@@ -219,8 +219,8 @@
</div>
</div>
- <script src="../../../lib/js/head.min.js"></script>
- <script src="../../../js/reveal.js"></script>
+ <script src="../../reveal.js/lib/js/head.min.js"></script>
+ <script src="../../reveal.js/js/reveal.js"></script>
<script>
@@ -236,12 +236,12 @@
// Optional reveal.js plugins
dependencies: [
- { src: '../../../lib/js/classList.js', condition: function() { return !document.body.classList; } },
- { src: '../../../plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
- { src: '../../../plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
- { src: '../../../plugin/highlight/highlight.js', async: true, condition: function() { return !!document.querySelector( 'pre code' ); }, callback: function() { hljs.initHighlightingOnLoad(); } },
- { src: '../../../plugin/zoom-js/zoom.js', async: true },
- { src: '../../../plugin/notes/notes.js', async: true }
+ { src: '../../reveal.js/lib/js/classList.js', condition: function() { return !document.body.classList; } },
+ { src: '../../reveal.js/plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
+ { src: '../../reveal.js/plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
+ { src: '../../reveal.js/plugin/highlight/highlight.js', async: true, condition: function() { return !!document.querySelector( 'pre code' ); }, callback: function() { hljs.initHighlightingOnLoad(); } },
+ { src: '../../reveal.js/plugin/zoom-js/zoom.js', async: true },
+ { src: '../../reveal.js/plugin/notes/notes.js', async: true }
]
});
diff --git a/docs/com/pres/Summit/Berlin-2016/summit-Berlin.html b/docs/com/pres/Summit/Berlin-2016/summit-Berlin.html
index 8369443f..97fa66c1 100755
--- a/docs/com/pres/Summit/Berlin-2016/summit-Berlin.html
+++ b/docs/com/pres/Summit/Berlin-2016/summit-Berlin.html
@@ -14,23 +14,23 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui">
- <link rel="stylesheet" href="../../../css/reveal.css">
+ <link rel="stylesheet" href="../../reveal.js/css/reveal.css">
<link rel="stylesheet" href="../../../css/theme/OPNFV-Berlin.css" id="theme">
<!-- Code syntax highlighting -->
- <link rel="stylesheet" href="../../../lib/css/zenburn.css">
+ <link rel="stylesheet" href="../../reveal.js/lib/css/zenburn.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
- link.href = window.location.search.match( /print-pdf/gi ) ? '../../../css/print/pdf.css' : '../../../css/print/paper.css';
+ link.href = window.location.search.match( /print-pdf/gi ) ? '../../reveal.js/css/print/pdf.css' : '../../../css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
<!--[if lt IE 9]>
- <script src="lib/js/html5shiv.js"></script>
+ <script src="l../../reveal.jsml5shiv.js"></script>
<![endif]-->
</head>
@@ -277,12 +277,12 @@
</div>
<div class='footer'>
- <img src="../../../img/logo-OPNFV-Berlin.png" alt="OPNFV logo">
+ <img src="../../../img/logo-OPNFV-Berlin.png" alt="OPNFV logo">
</div>
</div>
- <script src="../../../lib/js/head.min.js"></script>
- <script src="../../../js/reveal.js"></script>
+ <script src="../../reveal.js/lib/js/head.min.js"></script>
+ <script src="../../reveal.js/js/reveal.js"></script>
<script>
@@ -298,12 +298,12 @@
// Optional reveal.js plugins
dependencies: [
- { src: '../../../lib/js/classList.js', condition: function() { return !document.body.classList; } },
- { src: '../../../plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
- { src: '../../../plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
- { src: '../../../plugin/highlight/highlight.js', async: true, condition: function() { return !!document.querySelector( 'pre code' ); }, callback: function() { hljs.initHighlightingOnLoad(); } },
- { src: '../../../plugin/zoom-js/zoom.js', async: true },
- { src: '../../../plugin/notes/notes.js', async: true }
+ { src: '../../reveal.js/lib/js/classList.js', condition: function() { return !document.body.classList; } },
+ { src: '../../reveal.js/plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
+ { src: '../../reveal.js/plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
+ { src: '../../reveal.js/plugin/highlight/highlight.js', async: true, condition: function() { return !!document.querySelector( 'pre code' ); }, callback: function() { hljs.initHighlightingOnLoad(); } },
+ { src: '../../reveal.js/plugin/zoom-js/zoom.js', async: true },
+ { src: '../../reveal.js/plugin/notes/notes.js', async: true }
]
});
diff --git a/docs/com/pres/Summit/Berlin-2016/testapi.html b/docs/com/pres/Summit/Berlin-2016/testapi.html
index 16f97c44..c40637cb 100755
--- a/docs/com/pres/Summit/Berlin-2016/testapi.html
+++ b/docs/com/pres/Summit/Berlin-2016/testapi.html
@@ -14,18 +14,18 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui">
- <link rel="stylesheet" href="../../../css/reveal.css">
+ <link rel="stylesheet" href="../../reveal.js/css/reveal.css">
<link rel="stylesheet" href="../../../css/theme/OPNFV-Berlin.css" id="theme">
<!-- Code syntax highlighting -->
- <link rel="stylesheet" href="../../../lib/css/zenburn.css">
+ <link rel="stylesheet" href="../../reveal.js/lib/css/zenburn.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
- link.href = window.location.search.match( /print-pdf/gi ) ? '../../../css/print/pdf.css' : '../../../css/print/paper.css';
+ link.href = window.location.search.match( /print-pdf/gi ) ? '../../reveal.js/css/print/pdf.css' : '../../reveal.js/css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
@@ -242,8 +242,8 @@ OK
</div>
</div>
- <script src="../../../lib/js/head.min.js"></script>
- <script src="../../../js/reveal.js"></script>
+ <script src="../../reveal.js/lib/js/head.min.js"></script>
+ <script src="../../reveal.js/js/reveal.js"></script>
<script>
@@ -259,12 +259,12 @@ OK
// Optional reveal.js plugins
dependencies: [
- { src: '../../../lib/js/classList.js', condition: function() { return !document.body.classList; } },
- { src: '../../../plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
- { src: '../../../plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
- { src: '../../../plugin/highlight/highlight.js', async: true, condition: function() { return !!document.querySelector( 'pre code' ); }, callback: function() { hljs.initHighlightingOnLoad(); } },
- { src: '../../../plugin/zoom-js/zoom.js', async: true },
- { src: '../../../plugin/notes/notes.js', async: true }
+ { src: '../../reveal.js/lib/js/classList.js', condition: function() { return !document.body.classList; } },
+ { src: '../../reveal.js/plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
+ { src: '../../reveal.js/plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
+ { src: '../../reveal.js/plugin/highlight/highlight.js', async: true, condition: function() { return !!document.querySelector( 'pre code' ); }, callback: function() { hljs.initHighlightingOnLoad(); } },
+ { src: '../../reveal.js/plugin/zoom-js/zoom.js', async: true },
+ { src: '../../reveal.js/plugin/notes/notes.js', async: true }
]
});
diff --git a/docs/com/pres/dashboard/dashboard_status.html b/docs/com/pres/dashboard/dashboard_status.html
index 7d46a74c..1321afa0 100755
--- a/docs/com/pres/dashboard/dashboard_status.html
+++ b/docs/com/pres/dashboard/dashboard_status.html
@@ -14,18 +14,18 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui">
- <link rel="stylesheet" href="../../css/reveal.css">
+ <link rel="stylesheet" href="../reveal.js/css/reveal.css">
<link rel="stylesheet" href="../../css/theme/OPNFV.css" id="theme">
<!-- Code syntax highlighting -->
- <link rel="stylesheet" href="../../lib/css/zenburn.css">
+ <link rel="stylesheet" href="../reveal.js/lib/css/zenburn.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
- link.href = window.location.search.match( /print-pdf/gi ) ? '../../css/print/pdf.css' : '../../css/print/paper.css';
+ link.href = window.location.search.match( /print-pdf/gi ) ? '../reveal.js/css/print/pdf.css' : '../reveal.js/css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
@@ -114,8 +114,8 @@
</div>
</div>
- <script src="../../lib/js/head.min.js"></script>
- <script src="../../js/reveal.js"></script>
+ <script src="../reveal.js/lib/js/head.min.js"></script>
+ <script src="../reveal.js/js/reveal.js"></script>
<script>
@@ -131,12 +131,12 @@
// Optional reveal.js plugins
dependencies: [
- { src: '../../lib/js/classList.js', condition: function() { return !document.body.classList; } },
- { src: '../../plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
- { src: '../../plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
- { src: '../../plugin/highlight/highlight.js', async: true, condition: function() { return !!document.querySelector( 'pre code' ); }, callback: function() { hljs.initHighlightingOnLoad(); } },
- { src: '../../plugin/zoom-js/zoom.js', async: true },
- { src: '../../plugin/notes/notes.js', async: true }
+ { src: '../reveal.js/lib/js/classList.js', condition: function() { return !document.body.classList; } },
+ { src: '../reveal.js/plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
+ { src: '../reveal.js/plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
+ { src: '../reveal.js/plugin/highlight/highlight.js', async: true, condition: function() { return !!document.querySelector( 'pre code' ); }, callback: function() { hljs.initHighlightingOnLoad(); } },
+ { src: '../reveal.js/plugin/zoom-js/zoom.js', async: true },
+ { src: '../reveal.js/plugin/notes/notes.js', async: true }
]
});
diff --git a/docs/com/pres/reveal.js b/docs/com/pres/reveal.js
new file mode 160000
+Subproject a349ff43c58c23f9c837b8ea9b5fc7d4761b8de
diff --git a/functest/ci/__init__.py b/functest/ci/__init__.py
index e69de29b..e69de29b 100755..100644
--- a/functest/ci/__init__.py
+++ b/functest/ci/__init__.py
diff --git a/functest/ci/check_os.sh b/functest/ci/check_os.sh
index 2c5c021c..3920b7ac 100755
--- a/functest/ci/check_os.sh
+++ b/functest/ci/check_os.sh
@@ -26,6 +26,11 @@ verify_connectivity() {
return 1
}
+verify_SSL_connectivity() {
+ openssl s_client -connect $1:$2 &>/dev/null
+ return $?
+}
+
check_service() {
local service cmd
service=$1
@@ -63,10 +68,16 @@ fi
echo "Checking OpenStack endpoints:"
publicURL=$(openstack catalog show identity |awk '/public/ {print $4}')
-publicIP=$(echo $publicURL|sed 's/^.*http\:\/\///'|sed 's/.[^:]*$//')
+publicIP=$(echo $publicURL|sed 's/^.*http.*\:\/\///'|sed 's/.[^:]*$//')
publicPort=$(echo $publicURL|sed 's/^.*://'|sed 's/\/.*$//')
-echo ">>Verifying connectivity to the public endpoint $publicIP:$publicPort..."
-verify_connectivity $publicIP $publicPort
+https_enabled=$(echo $publicURL | grep 'https')
+if [[ -n $https_enabled ]]; then
+ echo ">>Verifying SSL connectivity to the public endpoint $publicIP:$publicPort..."
+ verify_SSL_connectivity $publicIP $publicPort
+else
+ echo ">>Verifying connectivity to the public endpoint $publicIP:$publicPort..."
+ verify_connectivity $publicIP $publicPort
+fi
RETVAL=$?
if [ $RETVAL -ne 0 ]; then
echo "ERROR: Cannot talk to the public endpoint $publicIP:$publicPort ."
@@ -81,10 +92,16 @@ if [ -z ${adminURL} ]; then
openstack catalog show identity
exit 1
fi
-adminIP=$(echo $adminURL|sed 's/^.*http\:\/\///'|sed 's/.[^:]*$//')
+adminIP=$(echo $adminURL|sed 's/^.*http.*\:\/\///'|sed 's/.[^:]*$//')
adminPort=$(echo $adminURL|sed 's/^.*://'|sed 's/.[^\/]*$//')
-echo ">>Verifying connectivity to the admin endpoint $adminIP:$adminPort..."
-verify_connectivity $adminIP $adminPort
+https_enabled=$(echo $adminURL | grep 'https')
+if [[ -n $https_enabled ]]; then
+ echo ">>Verifying SSL connectivity to the admin endpoint $adminIP:$adminPort..."
+ verify_SSL_connectivity $adminIP $adminPort
+else
+ echo ">>Verifying connectivity to the admin endpoint $adminIP:$adminPort..."
+ verify_connectivity $adminIP $adminPort
+fi
RETVAL=$?
if [ $RETVAL -ne 0 ]; then
echo "ERROR: Cannot talk to the admin endpoint $adminIP:$adminPort ."
diff --git a/functest/ci/config_functest.yaml b/functest/ci/config_functest.yaml
index 00e44ad5..78f6257c 100755
--- a/functest/ci/config_functest.yaml
+++ b/functest/ci/config_functest.yaml
@@ -125,7 +125,7 @@ rally:
refstack:
tempest_conf_path: openstack/refstack_client/tempest.conf
- defcore_list: openstack/refstack_client/defcore_201608.txt
+ defcore_list: openstack/refstack_client/defcore.txt
vnf:
aaa:
@@ -200,4 +200,6 @@ example:
sg_desc: Example Security group
results:
+ # you can also set a dir (e.g. /home/opnfv/db) to dump results
+ # test_db_url: file:///home/opnfv/db
test_db_url: http://testresults.opnfv.org/test/api/v1
diff --git a/functest/ci/prepare_env.py b/functest/ci/prepare_env.py
index 724ea14d..e9a470f9 100755
--- a/functest/ci/prepare_env.py
+++ b/functest/ci/prepare_env.py
@@ -312,7 +312,7 @@ def install_tempest():
logger.debug("Tempest %s does not exist" %
CONST.tempest_deployment_name)
cmd = ("rally verify create-verifier --source {0} "
- "--name {1} --type tempest"
+ "--name {1} --type tempest --system-wide"
.format(CONST.dir_repo_tempest,
CONST.tempest_deployment_name))
error_msg = "Problem while installing Tempest."
diff --git a/functest/ci/testcases.yaml b/functest/ci/testcases.yaml
index 6bc12ab8..5f54b975 100755
--- a/functest/ci/testcases.yaml
+++ b/functest/ci/testcases.yaml
@@ -132,7 +132,7 @@ tiers:
-
name: refstack_defcore
- criteria: 'success_rate >= 80%'
+ criteria: 'success_rate == 100%'
blocking: false
clean_flag: false
description: >-
@@ -168,7 +168,7 @@ tiers:
-
name: odl_netvirt
criteria: 'success_rate == 100%'
- blocking: true
+ blocking: false
clean_flag: false
description: >-
Test Suite for the OpenDaylight SDN Controller when
diff --git a/functest/ci/tier_builder.py b/functest/ci/tier_builder.py
index f4c6f70f..f4c6f70f 100755..100644
--- a/functest/ci/tier_builder.py
+++ b/functest/ci/tier_builder.py
diff --git a/functest/ci/tier_handler.py b/functest/ci/tier_handler.py
index 6b4864b5..6b4864b5 100755..100644
--- a/functest/ci/tier_handler.py
+++ b/functest/ci/tier_handler.py
diff --git a/functest/opnfv_tests/features/copper.py b/functest/opnfv_tests/features/copper.py
index 735b315d..735b315d 100755..100644
--- a/functest/opnfv_tests/features/copper.py
+++ b/functest/opnfv_tests/features/copper.py
diff --git a/functest/opnfv_tests/features/doctor.py b/functest/opnfv_tests/features/doctor.py
index 4d295a67..4d295a67 100755..100644
--- a/functest/opnfv_tests/features/doctor.py
+++ b/functest/opnfv_tests/features/doctor.py
diff --git a/functest/opnfv_tests/features/domino.py b/functest/opnfv_tests/features/domino.py
index b36220fa..b36220fa 100755..100644
--- a/functest/opnfv_tests/features/domino.py
+++ b/functest/opnfv_tests/features/domino.py
diff --git a/functest/opnfv_tests/features/odl_sfc.py b/functest/opnfv_tests/features/odl_sfc.py
index 3b68d420..431cd47e 100644
--- a/functest/opnfv_tests/features/odl_sfc.py
+++ b/functest/opnfv_tests/features/odl_sfc.py
@@ -8,13 +8,15 @@
# http://www.apache.org/licenses/LICENSE-2.0
#
import functest.core.feature_base as base
+from sfc.tests.functest import run_tests
class OpenDaylightSFC(base.FeatureBase):
def __init__(self):
super(OpenDaylightSFC, self).__init__(project='sfc',
- case='functest-odl-sfc"',
+ case='functest-odl-sfc',
repo='dir_repo_sfc')
- dir_sfc_functest = '{}/sfc/tests/functest'.format(self.repo)
- self.cmd = 'cd %s && python ./run_tests.py' % dir_sfc_functest
+
+ def execute(self):
+ return run_tests.main()
diff --git a/functest/opnfv_tests/features/promise.py b/functest/opnfv_tests/features/promise.py
index 15636fbf..15636fbf 100755..100644
--- a/functest/opnfv_tests/features/promise.py
+++ b/functest/opnfv_tests/features/promise.py
diff --git a/functest/opnfv_tests/features/sdnvpn.py b/functest/opnfv_tests/features/sdnvpn.py
index 1919a03c..1919a03c 100755..100644
--- a/functest/opnfv_tests/features/sdnvpn.py
+++ b/functest/opnfv_tests/features/sdnvpn.py
diff --git a/functest/opnfv_tests/features/security_scan.py b/functest/opnfv_tests/features/security_scan.py
index 58f0ec74..58f0ec74 100755..100644
--- a/functest/opnfv_tests/features/security_scan.py
+++ b/functest/opnfv_tests/features/security_scan.py
diff --git a/functest/opnfv_tests/mano/orchestra.py b/functest/opnfv_tests/mano/orchestra.py
index fd5e40d0..fd5e40d0 100755..100644
--- a/functest/opnfv_tests/mano/orchestra.py
+++ b/functest/opnfv_tests/mano/orchestra.py
diff --git a/functest/opnfv_tests/openstack/healthcheck/healthcheck.sh b/functest/opnfv_tests/openstack/healthcheck/healthcheck.sh
index 7fa957c0..7fa957c0 100755..100644
--- a/functest/opnfv_tests/openstack/healthcheck/healthcheck.sh
+++ b/functest/opnfv_tests/openstack/healthcheck/healthcheck.sh
diff --git a/functest/opnfv_tests/openstack/refstack_client/defcore_201608.txt b/functest/opnfv_tests/openstack/refstack_client/defcore.txt
index 26eddafc..be8fd899 100644
--- a/functest/opnfv_tests/openstack/refstack_client/defcore_201608.txt
+++ b/functest/opnfv_tests/openstack/refstack_client/defcore.txt
@@ -77,7 +77,7 @@ tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_u
tempest.api.compute.test_quotas.QuotasTestJSON.test_get_default_quotas[id-9bfecac7-b966-4f47-913f-1a9e2c12134a]
tempest.api.compute.test_quotas.QuotasTestJSON.test_get_quotas[id-f1ef0a97-dbbb-4cca-adc5-c9fbc4f76107]
tempest.api.compute.test_versions.TestVersions.test_list_api_versions[id-6c0a0990-43b6-4529-9b61-5fd8daf7c55c]
-tempest.api.compute.volumes.test_attach_volume.AttachVolumeTestJSON.test_attach_detach_volume[id-52e9045a-e90d-4c0d-9087-79d657faffff]
+# tempest.api.compute.volumes.test_attach_volume.AttachVolumeTestJSON.test_attach_detach_volume[id-52e9045a-e90d-4c0d-9087-79d657faffff]
tempest.api.compute.volumes.test_attach_volume.AttachVolumeTestJSON.test_list_get_volume_attachments[id-7fa563fe-f0f7-43eb-9e22-a1ece036b513]
tempest.api.identity.v3.TestApiDiscovery.test_api_media_types[id-657c1970-4722-4189-8831-7325f3bc4265]
tempest.api.identity.v3.TestApiDiscovery.test_api_version_resources[id-b9232f5e-d9e5-4d97-b96c-28d3db4de1bd]
diff --git a/functest/opnfv_tests/openstack/refstack_client/refstack_client.py b/functest/opnfv_tests/openstack/refstack_client/refstack_client.py
index 740515e3..4312b7f9 100755
--- a/functest/opnfv_tests/openstack/refstack_client/refstack_client.py
+++ b/functest/opnfv_tests/openstack/refstack_client/refstack_client.py
@@ -130,10 +130,10 @@ class RefstackClient(testcase_base.TestcaseBase):
num_executed = int(num_tests) - int(num_skipped)
success_rate = 100 * int(num_success) / int(num_executed)
- self.details = {"num_tests": int(num_tests),
- "num_failures": int(num_failures),
+ self.details = {"tests": int(num_tests),
+ "failures": int(num_failures),
"success": success_testcases,
- "failed": failed_testcases,
+ "errors": failed_testcases,
"skipped": skipped_testcases}
except Exception:
success_rate = 0
diff --git a/functest/opnfv_tests/openstack/tempest/conf_utils.py b/functest/opnfv_tests/openstack/tempest/conf_utils.py
index a21322d8..1b718269 100644
--- a/functest/opnfv_tests/openstack/tempest/conf_utils.py
+++ b/functest/opnfv_tests/openstack/tempest/conf_utils.py
@@ -392,8 +392,12 @@ def configure_tempest_multisite_params(tempest_conf_file):
config.add_section("kingbird")
except Exception:
logger.info('kingbird section exist')
+
+ # set the domain id
+ config.set('auth', 'admin_domain_name', 'default')
+
config.set('kingbird', 'endpoint_type', 'publicURL')
- config.set('kingbird', 'TIME_TO_SYNC', '20')
+ config.set('kingbird', 'TIME_TO_SYNC', '120')
config.set('kingbird', 'endpoint_url', kingbird_endpoint_url)
config.set('kingbird', 'api_version', kingbird_api_version)
with open(tempest_conf_file, 'wb') as config_file:
diff --git a/functest/opnfv_tests/openstack/tempest/custom_tests/blacklist.txt b/functest/opnfv_tests/openstack/tempest/custom_tests/blacklist.txt
index fcdfe225..43edabc1 100644
--- a/functest/opnfv_tests/openstack/tempest/custom_tests/blacklist.txt
+++ b/functest/opnfv_tests/openstack/tempest/custom_tests/blacklist.txt
@@ -55,3 +55,19 @@
- tempest.scenario.test_server_basic_ops.TestServerBasicOps.test_server_basic_ops
- tempest.scenario.test_volume_boot_pattern.TestVolumeBootPattern.test_volume_boot_pattern
- tempest.scenario.test_volume_boot_pattern.TestVolumeBootPatternV2.test_volume_boot_pattern
+
+-
+ # https://bugs.launchpad.net/tempest/+bug/1577632
+ scenarios:
+ - os-odl_l2-nofeature-ha
+ - os-odl_l2-nofeature-noha
+ - os-odl_l2-sfc-ha
+ - os-odl_l2-sfc-noha
+ - os-odl_l2-bgpvpn-ha
+ - os-odl_l2-bgpvpn-noha
+ - os-odl_l3-nofeature-ha
+ - os-odl_l3-nofeature-noha
+ installers:
+ - fuel
+ tests:
+ - tempest.scenario.test_server_basic_ops.TestServerBasicOps.test_server_basic_ops
diff --git a/functest/opnfv_tests/vnf/ims/opera_ims.py b/functest/opnfv_tests/vnf/ims/opera_ims.py
index 7ead401f..7ead401f 100644..100755
--- a/functest/opnfv_tests/vnf/ims/opera_ims.py
+++ b/functest/opnfv_tests/vnf/ims/opera_ims.py
diff --git a/functest/opnfv_tests/vnf/ims/orchestra_ims.py b/functest/opnfv_tests/vnf/ims/orchestra_ims.py
index d13fe8fe..5c19be09 100644..100755
--- a/functest/opnfv_tests/vnf/ims/orchestra_ims.py
+++ b/functest/opnfv_tests/vnf/ims/orchestra_ims.py
@@ -311,10 +311,16 @@ class ImsVnf(vnf_base.VnfOnBoardingBase):
creds = os_utils.get_credentials()
self.logger.info("PoP creds: %s" % creds)
+ project_id = os_utils.get_tenant_id(
+ os_utils.get_keystone_client(),
+ creds.get("project_name"))
+
+ self.logger.debug("project id: %s" % project_id)
+
vim_json = {
"name": "vim-instance",
"authUrl": creds.get("auth_url"),
- "tenant": os.environ.get("OS_PROJECT_ID"),
+ "tenant": project_id,
"username": creds.get("username"),
"password": creds.get("password"),
"securityGroups": [
diff --git a/functest/opnfv_tests/vnf/router/__init__.py b/functest/opnfv_tests/vnf/router/__init__.py
index e69de29b..e69de29b 100755..100644
--- a/functest/opnfv_tests/vnf/router/__init__.py
+++ b/functest/opnfv_tests/vnf/router/__init__.py
diff --git a/functest/opnfv_tests/vnf/router/vyos_vrouter.py b/functest/opnfv_tests/vnf/router/vyos_vrouter.py
index 94a3ecfd..94a3ecfd 100755..100644
--- a/functest/opnfv_tests/vnf/router/vyos_vrouter.py
+++ b/functest/opnfv_tests/vnf/router/vyos_vrouter.py
diff --git a/functest/tests/unit/utils/test_openstack_utils.py b/functest/tests/unit/utils/test_openstack_utils.py
index ef3764cc..673ad5e2 100644
--- a/functest/tests/unit/utils/test_openstack_utils.py
+++ b/functest/tests/unit/utils/test_openstack_utils.py
@@ -28,7 +28,8 @@ class OSUtilsTesting(unittest.TestCase):
'OS_PROJECT_DOMAIN_NAME': os_prefix + 'project_domain_name',
'OS_PROJECT_NAME': os_prefix + 'project_name',
'OS_ENDPOINT_TYPE': os_prefix + 'endpoint_type',
- 'OS_REGION_NAME': os_prefix + 'region_name'}
+ 'OS_REGION_NAME': os_prefix + 'region_name',
+ 'OS_CACERT': os_prefix + 'https_cacert'}
def _get_os_env_vars(self):
return {'username': 'test_username', 'password': 'test_password',
@@ -37,7 +38,8 @@ class OSUtilsTesting(unittest.TestCase):
'project_domain_name': 'test_project_domain_name',
'project_name': 'test_project_name',
'endpoint_type': 'test_endpoint_type',
- 'region_name': 'test_region_name'}
+ 'region_name': 'test_region_name',
+ 'https_cacert': 'test_https_cacert'}
def setUp(self):
self.env_vars = ['OS_AUTH_URL', 'OS_USERNAME', 'OS_PASSWORD']
diff --git a/functest/utils/decorators.py b/functest/utils/decorators.py
index 99bcef3e..276235d9 100644
--- a/functest/utils/decorators.py
+++ b/functest/utils/decorators.py
@@ -1,6 +1,8 @@
#!/usr/bin/env python
+import errno
import mock
+import os
import requests.sessions
import urlparse
@@ -10,7 +12,12 @@ def can_dump_request_to_file(method):
def dump_preparedrequest(request, **kwargs):
parseresult = urlparse.urlparse(request.url)
if parseresult.scheme == "file":
- with open(parseresult.path.replace('/results', ''), 'a') as f:
+ try:
+ os.makedirs(parseresult.path)
+ except OSError as e:
+ if e.errno != errno.EEXIST:
+ raise
+ with open(os.path.join(parseresult.path, 'dump.txt'), 'a') as f:
headers = ""
for key in request.headers:
headers += key + " " + request.headers[key] + "\n"
diff --git a/functest/utils/functest_logger.py b/functest/utils/functest_logger.py
index 022211cb..555e9c28 100755..100644
--- a/functest/utils/functest_logger.py
+++ b/functest/utils/functest_logger.py
@@ -28,13 +28,24 @@ import json
from functest.utils.constants import CONST
+ignore = ["paramiko",
+ "stevedore.extension",
+ "keystoneauth.session",
+ "keystoneauth.identity.v3.base",
+ "novaclient.v2.client",
+ "neutronclient.v2_0.client",
+ "glanceclient.common.http",
+ "cinderclient.v2.client",
+ "cinderclient.client"]
+
class Logger(object):
def __init__(self, logger_name):
self.setup_logging()
self.logger = logging.getLogger(logger_name)
- logging.getLogger("paramiko").setLevel(logging.WARNING)
+ for module_name in ignore:
+ logging.getLogger(module_name).setLevel(logging.WARNING)
def getLogger(self):
return self.logger
diff --git a/functest/utils/openstack_utils.py b/functest/utils/openstack_utils.py
index e33af63b..ffc870f6 100755..100644
--- a/functest/utils/openstack_utils.py
+++ b/functest/utils/openstack_utils.py
@@ -82,7 +82,8 @@ def get_env_cred_dict():
'OS_PROJECT_DOMAIN_NAME': 'project_domain_name',
'OS_PROJECT_NAME': 'project_name',
'OS_ENDPOINT_TYPE': 'endpoint_type',
- 'OS_REGION_NAME': 'region_name'
+ 'OS_REGION_NAME': 'region_name',
+ 'OS_CACERT': 'https_cacert'
}
return env_cred_dict
@@ -149,6 +150,11 @@ def get_credentials_for_rally():
if region_name is not None:
cred_key = env_cred_dict.get('OS_REGION_NAME')
rally_conf[cred_key] = region_name
+
+ cacert = os.getenv('OS_CACERT')
+ if cacert is not None:
+ cred_key = env_cred_dict.get('OS_CACERT')
+ rally_conf[cred_key] = cacert
return rally_conf
@@ -168,7 +174,14 @@ def get_endpoint(service_type, endpoint_type='publicURL'):
def get_session(other_creds={}):
auth = get_session_auth(other_creds)
- return session.Session(auth=auth)
+ cacert = os.getenv('OS_CACERT')
+ if cacert is not None:
+ if not os.path.isfile(cacert):
+ raise Exception("The 'OS_CACERT' environment"
+ "variable is set to %s but the file"
+ "does not exist.", cacert)
+
+ return session.Session(auth=auth, verify=cacert)
# *********************************************
diff --git a/kingbird_requirements.txt b/kingbird_requirements.txt
new file mode 100644
index 00000000..adf1082c
--- /dev/null
+++ b/kingbird_requirements.txt
@@ -0,0 +1,15 @@
+#
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+ddt==1.1.1
+oslosphinx==4.11.0
+oslotest==2.14.0
+pylint==1.4.5
+requests-mock==1.3.0
+tempest-lib==1.0.0
+testresources==2.0.1
+testscenarios==0.5.0