summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore21
-rw-r--r--cns-libs/cnslibs/cns/cns_baseclass.py8
-rw-r--r--cns-libs/cnslibs/common/cns_libs.py9
-rw-r--r--cns-libs/cnslibs/common/dynamic_provisioning.py27
-rw-r--r--tests/cns_tests_sample_config.yml1
-rw-r--r--tests/functional/common/heketi/test_volume_multi_req.py2
-rw-r--r--tests/functional/common/provisioning/test_dynamic_provisioning_block_p0_cases.py36
-rw-r--r--tests/functional/common/provisioning/test_dynamic_provisioning_p0_cases.py36
-rw-r--r--tox.ini15
9 files changed, 99 insertions, 56 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..68398d68
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,21 @@
+# Virtual environment related stuff
+.tox/*
+
+# Log files
+*.log
+
+# Linux swap files range from .saa to .swp
+*.s[a-w][a-p]
+
+# Python bytecode and other related temp files
+*.pyc
+*.pyo
+*egg-info
+
+# Development environment files
+.project
+.pydevproject
+
+# Cache files
+.cache
+.pytest_cache
diff --git a/cns-libs/cnslibs/cns/cns_baseclass.py b/cns-libs/cnslibs/cns/cns_baseclass.py
index a6edfdd0..6f8cb4b9 100644
--- a/cns-libs/cnslibs/cns/cns_baseclass.py
+++ b/cns-libs/cnslibs/cns/cns_baseclass.py
@@ -65,6 +65,7 @@ class CnsBaseClass(unittest.TestCase):
# Initializes heketi config variables
heketi_config = g.config['cns']['heketi_config']
+ cls.heketi_service_name = heketi_config['heketi_service_name']
cls.heketi_client_node = heketi_config['heketi_client_node']
cls.heketi_server_url = heketi_config['heketi_server_url']
cls.heketi_cli_user = heketi_config['heketi_cli_user']
@@ -113,6 +114,13 @@ class CnsBaseClass(unittest.TestCase):
cmd, cls.ocp_master_node[0], out, err))
cls.secret_data_key = out.strip()
+ cmd = 'oc project %s' % cls.cns_project_name
+ ret, out, err = g.run(cls.ocp_client[0], cmd, "root")
+ if ret != 0:
+ raise ExecutionError("failed to execute cmd %s on %s out: "
+ "%s err: %s" % (
+ cmd, cls.ocp_client[0], out, err))
+
if 'glustotest_run_id' not in g.config:
g.config['glustotest_run_id'] = (
datetime.datetime.now().strftime('%H_%M_%d_%m_%Y'))
diff --git a/cns-libs/cnslibs/common/cns_libs.py b/cns-libs/cnslibs/common/cns_libs.py
index d949ddfe..5973c8b8 100644
--- a/cns-libs/cnslibs/common/cns_libs.py
+++ b/cns-libs/cnslibs/common/cns_libs.py
@@ -1,16 +1,10 @@
-from collections import OrderedDict
from cnslibs.common.exceptions import (
- ConfigError,
ExecutionError)
from cnslibs.common.openshift_ops import (
get_ocp_gluster_pod_names,
oc_rsh)
from cnslibs.common.waiter import Waiter
-import fileinput
from glusto.core import Glusto as g
-import json
-import rtyaml
-import time
import yaml
@@ -273,7 +267,6 @@ def edit_iptables_cns(hostname):
return False
edit_flag = False
- commit_count = 0
with conn.builtin.open("/etc/sysconfig/iptables", "r+") as f:
for line in f.readlines():
if "--dport 3260" in line:
@@ -431,7 +424,7 @@ def validate_multipath_pod(hostname, podname, hacount):
g.log.error("failed to exectute cmd %s on %s, err %s"
% (cmd, pod_nodename, out))
return False
- active_count = int(output.strip())
+ active_count = int(out.strip())
if active_node_count != active_count:
g.log.error("active node count on %s for %s is %s and not 1"
% (pod_nodename, podname, active_count))
diff --git a/cns-libs/cnslibs/common/dynamic_provisioning.py b/cns-libs/cnslibs/common/dynamic_provisioning.py
index 9d6a062f..fea44b4b 100644
--- a/cns-libs/cnslibs/common/dynamic_provisioning.py
+++ b/cns-libs/cnslibs/common/dynamic_provisioning.py
@@ -1,10 +1,15 @@
from collections import OrderedDict
-from cnslibs.common.waiter import Waiter
+import json
+import os
+
from glusto.core import Glusto as g
from glustolibs.misc.misc_libs import upload_scripts
-import json
import rtyaml
-import time
+
+from cnslibs.common.waiter import Waiter
+
+
+TEMPLATE_DIR = os.path.abspath(os.path.dirname(__file__))
def create_pvc_file(hostname, claim_name, storage_class, size):
@@ -22,7 +27,8 @@ def create_pvc_file(hostname, claim_name, storage_class, size):
bool: True if successful,
otherwise False
'''
- with open("cnslibs/common/sample-glusterfs-pvc-claim.json") as data_file:
+ with open(os.path.join(TEMPLATE_DIR,
+ "sample-glusterfs-pvc-claim.json")) as data_file:
data = json.load(data_file, object_pairs_hook=OrderedDict)
data['metadata']['annotations'][
'volume.beta.kubernetes.io/storage-class'] = storage_class
@@ -63,8 +69,8 @@ def create_app_pod_file(hostname, claim_name, app_name, sample_app_name):
bool: True if successful,
otherwise False
'''
- data = rtyaml.load(open("cnslibs/common/sample-%s-pod."
- "yaml" % sample_app_name))
+ data = rtyaml.load(open(
+ os.path.join(TEMPLATE_DIR, "sample-%s-pod.yaml" % sample_app_name)))
data['spec']['volumes'][0]['persistentVolumeClaim'][
'claimName'] = claim_name
data['metadata']['name'] = app_name
@@ -101,7 +107,8 @@ def create_secret_file(hostname, secret_name, namespace,
bool: True if successful,
otherwise False
'''
- data = rtyaml.load(open("cnslibs/common/sample-glusterfs-secret.yaml"))
+ data = rtyaml.load(open(
+ os.path.join(TEMPLATE_DIR, "sample-glusterfs-secret.yaml")))
data['metadata']['name'] = secret_name
data['data']['key'] = data_key
@@ -156,8 +163,8 @@ def create_storage_class_file(hostname, sc_name, resturl,
bool: True if successful,
otherwise False
'''
- data = rtyaml.load(open("cnslibs/common/sample-glusterfs"
- "-storageclass.yaml"))
+ data = rtyaml.load(open(
+ os.path.join(TEMPLATE_DIR, "sample-glusterfs-storageclass.yaml")))
data['metadata']['name'] = sc_name
data['parameters']['resturl'] = resturl
@@ -260,7 +267,7 @@ def create_mongodb_pod(hostname, pvc_name, pvc_size, sc_name):
False otherwise
'''
ret = upload_scripts(hostname,
- "cnslibs/common/mongodb-template.json",
+ os.path.join(TEMPLATE_DIR, "mongodb-template.json"),
"/tmp/app-templates", "root")
if not ret:
g.log.error("Failed to upload mongodp template to %s" % hostname)
diff --git a/tests/cns_tests_sample_config.yml b/tests/cns_tests_sample_config.yml
index b77be3fa..0f031df6 100644
--- a/tests/cns_tests_sample_config.yml
+++ b/tests/cns_tests_sample_config.yml
@@ -72,6 +72,7 @@ cns:
trusted_storage_pool_list:
- [gluster_server1, gluster_server2]
heketi_config:
+ heketi_service_name: "fake-name-of-heketi-service"
heketi_client_node:
heketi_server_url: "http://heketi-storage-project.cloudapps.mystorage.com"
heketi_cli_user: "admin"
diff --git a/tests/functional/common/heketi/test_volume_multi_req.py b/tests/functional/common/heketi/test_volume_multi_req.py
index 825fd9dc..0a33f2a7 100644
--- a/tests/functional/common/heketi/test_volume_multi_req.py
+++ b/tests/functional/common/heketi/test_volume_multi_req.py
@@ -5,7 +5,7 @@ import contextlib
import random
import threading
import time
-import unitest
+import unittest
import ddt
import yaml
diff --git a/tests/functional/common/provisioning/test_dynamic_provisioning_block_p0_cases.py b/tests/functional/common/provisioning/test_dynamic_provisioning_block_p0_cases.py
index 933033ae..8db0b01d 100644
--- a/tests/functional/common/provisioning/test_dynamic_provisioning_block_p0_cases.py
+++ b/tests/functional/common/provisioning/test_dynamic_provisioning_block_p0_cases.py
@@ -28,12 +28,13 @@ class TestDynamicProvisioningBlockP0(CnsGlusterBlockBaseClass):
def test_dynamic_provisioning_glusterblock(self):
g.log.info("test_dynamic_provisioning_glusterblock")
storage_class = self.cns_storage_class['storage_class2']
- cmd = ("oc get svc | grep heketi | grep -v endpoints "
- "| awk '{print $2}'")
+ secret = self.cns_secret['secret2']
+ cmd = ("oc get svc %s "
+ "-o=custom-columns=:.spec.clusterIP" % self.heketi_service_name)
ret, out, err = g.run(self.ocp_master_node[0], cmd, "root")
self.assertEqual(ret, 0, "failed to execute command %s on %s" % (
cmd, self.ocp_master_node[0]))
- heketi_cluster_ip = out.strip().split("\n")[0]
+ heketi_cluster_ip = out.lstrip().strip()
resturl_block = "http://%s:8080" % heketi_cluster_ip
if not export_heketi_cli_server(
self.heketi_client_node,
@@ -57,7 +58,7 @@ class TestDynamicProvisioningBlockP0(CnsGlusterBlockBaseClass):
storage_class['provisioner'],
restuser=storage_class['restuser'],
restsecretnamespace=storage_class['restsecretnamespace'],
- restsecretname=storage_class['restsecretname'],
+ restsecretname=secret['secret_name'],
hacount=storage_class['hacount'],
clusterids=cluster_id)
self.assertTrue(ret, "creation of storage-class file failed")
@@ -67,7 +68,6 @@ class TestDynamicProvisioningBlockP0(CnsGlusterBlockBaseClass):
oc_create(self.ocp_master_node[0], file_path)
self.addCleanup(oc_delete, self.ocp_master_node[0],
'sc', sc_name)
- secret = self.cns_secret['secret2']
ret = create_secret_file(self.ocp_master_node[0],
secret['secret_name'],
secret['namespace'],
@@ -139,12 +139,13 @@ class TestDynamicProvisioningBlockP0(CnsGlusterBlockBaseClass):
def test_dynamic_provisioning_glusterblock_heketipod_failure(self):
g.log.info("test_dynamic_provisioning_glusterblock_Heketipod_Failure")
storage_class = self.cns_storage_class['storage_class2']
- cmd = ("oc get svc | grep heketi | grep -v endpoints "
- "| awk '{print $2}'")
+ secret = self.cns_secret['secret2']
+ cmd = ("oc get svc %s "
+ "-o=custom-columns=:.spec.clusterIP" % self.heketi_service_name)
ret, out, err = g.run(self.ocp_master_node[0], cmd, "root")
self.assertEqual(ret, 0, "failed to execute command %s on %s" % (
cmd, self.ocp_master_node[0]))
- heketi_cluster_ip = out.strip().split("\n")[0]
+ heketi_cluster_ip = out.lstrip().strip()
resturl_block = "http://%s:8080" % heketi_cluster_ip
if not export_heketi_cli_server(
self.heketi_client_node,
@@ -168,7 +169,7 @@ class TestDynamicProvisioningBlockP0(CnsGlusterBlockBaseClass):
storage_class['provisioner'],
restuser=storage_class['restuser'],
restsecretnamespace=storage_class['restsecretnamespace'],
- restsecretname=storage_class['restsecretname'],
+ restsecretname=secret['secret_name'],
hacount=storage_class['hacount'],
clusterids=cluster_id)
self.assertTrue(ret, "creation of storage-class file failed")
@@ -178,7 +179,6 @@ class TestDynamicProvisioningBlockP0(CnsGlusterBlockBaseClass):
oc_create(self.ocp_master_node[0], file_path)
self.addCleanup(oc_delete, self.ocp_master_node[0],
'sc', sc_name)
- secret = self.cns_secret['secret2']
ret = create_secret_file(self.ocp_master_node[0],
secret['secret_name'],
secret['namespace'],
@@ -236,12 +236,12 @@ class TestDynamicProvisioningBlockP0(CnsGlusterBlockBaseClass):
cmd, self.ocp_master_node[0]))
ret = verify_pod_status_running(self.ocp_master_node[0], "heketi")
self.assertTrue(ret, "verify heketi pod status as running failed")
- cmd = ("oc get svc | grep heketi | grep -v endpoints "
- "| awk '{print $2}'")
+ cmd = ("oc get svc %s "
+ "-o=custom-columns=:.spec.clusterIP" % self.heketi_service_name)
ret, out, err = g.run(self.ocp_master_node[0], cmd, "root")
self.assertEqual(ret, 0, "failed to execute command %s on %s" % (
cmd, self.ocp_master_node[0]))
- heketi_cluster_new_ip = out.strip().split("\n")[0]
+ heketi_cluster_new_ip = out.lstrip().strip()
if heketi_cluster_new_ip != heketi_cluster_ip:
oc_delete(self.ocp_master_node[0], 'sc', sc_name)
resturl_block = "http://%s:8080" % heketi_cluster_new_ip
@@ -296,12 +296,13 @@ class TestDynamicProvisioningBlockP0(CnsGlusterBlockBaseClass):
def test_dynamic_provisioning_glusterblock_glusterpod_failure(self):
g.log.info("test_dynamic_provisioning_glusterblock_Glusterpod_Failure")
storage_class = self.cns_storage_class['storage_class2']
- cmd = ("oc get svc | grep heketi | grep -v endpoints "
- "| awk '{print $2}'")
+ secret = self.cns_secret['secret2']
+ cmd = ("oc get svc %s "
+ "-o=custom-columns=:.spec.clusterIP" % self.heketi_service_name)
ret, out, err = g.run(self.ocp_master_node[0], cmd, "root")
self.assertEqual(ret, 0, "failed to execute command %s on %s" % (
cmd, self.ocp_master_node[0]))
- heketi_cluster_ip = out.strip().split("\n")[0]
+ heketi_cluster_ip = out.lstrip().strip()
resturl_block = "http://%s:8080" % heketi_cluster_ip
if not export_heketi_cli_server(
self.heketi_client_node,
@@ -325,7 +326,7 @@ class TestDynamicProvisioningBlockP0(CnsGlusterBlockBaseClass):
storage_class['provisioner'],
restuser=storage_class['restuser'],
restsecretnamespace=storage_class['restsecretnamespace'],
- restsecretname=storage_class['restsecretname'],
+ restsecretname=secret['secret_name'],
hacount=storage_class['hacount'],
clusterids=cluster_id)
self.assertTrue(ret, "creation of storage-class file failed")
@@ -335,7 +336,6 @@ class TestDynamicProvisioningBlockP0(CnsGlusterBlockBaseClass):
oc_create(self.ocp_master_node[0], file_path)
self.addCleanup(oc_delete, self.ocp_master_node[0],
'sc', sc_name)
- secret = self.cns_secret['secret2']
ret = create_secret_file(self.ocp_master_node[0],
secret['secret_name'],
secret['namespace'],
diff --git a/tests/functional/common/provisioning/test_dynamic_provisioning_p0_cases.py b/tests/functional/common/provisioning/test_dynamic_provisioning_p0_cases.py
index 0167573f..734cc8a5 100644
--- a/tests/functional/common/provisioning/test_dynamic_provisioning_p0_cases.py
+++ b/tests/functional/common/provisioning/test_dynamic_provisioning_p0_cases.py
@@ -28,14 +28,15 @@ class TestDynamicProvisioningP0(CnsBaseClass):
def test_dynamic_provisioning_glusterfile(self):
g.log.info("test_dynamic_provisioning_glusterfile")
storage_class = self.cns_storage_class['storage_class1']
+ secret = self.cns_secret['secret1']
sc_name = storage_class['name']
pvc_name1 = "mongodb1"
- cmd = ("oc get svc | grep heketi | grep -v endpoints "
- "| awk '{print $2}'")
+ cmd = ("oc get svc %s "
+ "-o=custom-columns=:.spec.clusterIP" % self.heketi_service_name)
ret, out, err = g.run(self.ocp_master_node[0], cmd, "root")
self.assertEqual(ret, 0, "failed to execute command %s on %s" % (
cmd, self.ocp_master_node[0]))
- heketi_cluster_ip = out.strip().split("\n")[0]
+ heketi_cluster_ip = out.lstrip().strip()
resturl = "http://%s:8080" % heketi_cluster_ip
ret = create_storage_class_file(
self.ocp_master_node[0],
@@ -44,7 +45,7 @@ class TestDynamicProvisioningP0(CnsBaseClass):
storage_class['provisioner'],
restuser=storage_class['restuser'],
secretnamespace=storage_class['secretnamespace'],
- secretname=storage_class['secretname'])
+ secretname=secret['secret_name'])
self.assertTrue(ret, "creation of storage-class file failed")
provisioner_name = storage_class['provisioner'].split("/")
file_path = "/%s-%s-storage-class.yaml" % (
@@ -52,7 +53,6 @@ class TestDynamicProvisioningP0(CnsBaseClass):
oc_create(self.ocp_master_node[0], file_path)
self.addCleanup(oc_delete, self.ocp_master_node[0],
'sc', sc_name)
- secret = self.cns_secret['secret1']
ret = create_secret_file(self.ocp_master_node[0],
secret['secret_name'],
secret['namespace'],
@@ -109,14 +109,15 @@ class TestDynamicProvisioningP0(CnsBaseClass):
def test_dynamic_provisioning_glusterfile_heketipod_failure(self):
g.log.info("test_dynamic_provisioning_glusterfile_Heketipod_Failure")
storage_class = self.cns_storage_class['storage_class1']
+ secret = self.cns_secret['secret1']
sc_name = storage_class['name']
pvc_name2 = "mongodb2"
- cmd = ("oc get svc | grep heketi | grep -v endpoints "
- "| awk '{print $2}'")
+ cmd = ("oc get svc %s "
+ "-o=custom-columns=:.spec.clusterIP" % self.heketi_service_name)
ret, out, err = g.run(self.ocp_master_node[0], cmd, "root")
self.assertEqual(ret, 0, "failed to execute command %s on %s" % (
cmd, self.ocp_master_node[0]))
- heketi_cluster_ip = out.strip().split("\n")[0]
+ heketi_cluster_ip = out.lstrip().strip()
resturl = "http://%s:8080" % heketi_cluster_ip
ret = create_storage_class_file(
self.ocp_master_node[0],
@@ -125,7 +126,7 @@ class TestDynamicProvisioningP0(CnsBaseClass):
storage_class['provisioner'],
restuser=storage_class['restuser'],
secretnamespace=storage_class['secretnamespace'],
- secretname=storage_class['secretname'])
+ secretname=secret['secret_name'])
self.assertTrue(ret, "creation of storage-class file failed")
provisioner_name = storage_class['provisioner'].split("/")
file_path = "/%s-%s-storage-class.yaml" % (
@@ -133,7 +134,6 @@ class TestDynamicProvisioningP0(CnsBaseClass):
oc_create(self.ocp_master_node[0], file_path)
self.addCleanup(oc_delete, self.ocp_master_node[0],
'sc', sc_name)
- secret = self.cns_secret['secret1']
ret = create_secret_file(self.ocp_master_node[0],
secret['secret_name'],
secret['namespace'],
@@ -191,12 +191,12 @@ class TestDynamicProvisioningP0(CnsBaseClass):
cmd, self.ocp_master_node[0]))
ret = verify_pod_status_running(self.ocp_master_node[0], "heketi")
self.assertTrue(ret, "verify heketi pod status as running failed")
- cmd = ("oc get svc | grep heketi | grep -v endpoints "
- "| awk '{print $2}'")
+ cmd = ("oc get svc %s "
+ "-o=custom-columns=:.spec.clusterIP" % self.heketi_service_name)
ret, out, err = g.run(self.ocp_master_node[0], cmd, "root")
self.assertEqual(ret, 0, "failed to execute command %s on %s" % (
cmd, self.ocp_master_node[0]))
- heketi_cluster_new_ip = out.strip().split("\n")[0]
+ heketi_cluster_new_ip = out.lstrip().strip()
if heketi_cluster_new_ip != heketi_cluster_ip:
oc_delete(self.ocp_master_node[0], 'sc', sc_name)
resturl = "http://%s:8080" % heketi_cluster_ip
@@ -251,14 +251,15 @@ class TestDynamicProvisioningP0(CnsBaseClass):
def test_dynamic_provisioning_glusterfile_glusterpod_failure(self):
g.log.info("test_dynamic_provisioning_glusterfile_Glusterpod_Failure")
storage_class = self.cns_storage_class['storage_class1']
+ secret = self.cns_secret['secret1']
sc_name = storage_class['name']
pvc_name4 = "mongodb4"
- cmd = ("oc get svc | grep heketi | grep -v endpoints "
- "| awk '{print $2}'")
+ cmd = ("oc get svc %s "
+ "-o=custom-columns=:.spec.clusterIP" % self.heketi_service_name)
ret, out, err = g.run(self.ocp_master_node[0], cmd, "root")
self.assertEqual(ret, 0, "failed to execute command %s on %s" % (
cmd, self.ocp_master_node[0]))
- heketi_cluster_ip = out.strip().split("\n")[0]
+ heketi_cluster_ip = out.lstrip().strip()
resturl = "http://%s:8080" % heketi_cluster_ip
ret = create_storage_class_file(
self.ocp_master_node[0],
@@ -267,7 +268,7 @@ class TestDynamicProvisioningP0(CnsBaseClass):
storage_class['provisioner'],
restuser=storage_class['restuser'],
secretnamespace=storage_class['secretnamespace'],
- secretname=storage_class['secretname'])
+ secretname=secret['secret_name'])
self.assertTrue(ret, "creation of storage-class file failed")
provisioner_name = storage_class['provisioner'].split("/")
file_path = "/%s-%s-storage-class.yaml" % (
@@ -275,7 +276,6 @@ class TestDynamicProvisioningP0(CnsBaseClass):
oc_create(self.ocp_master_node[0], file_path)
self.addCleanup(oc_delete, self.ocp_master_node[0],
'sc', sc_name)
- secret = self.cns_secret['secret1']
ret = create_secret_file(self.ocp_master_node[0],
secret['secret_name'],
secret['namespace'],
diff --git a/tox.ini b/tox.ini
index 460066d9..87f64768 100644
--- a/tox.ini
+++ b/tox.ini
@@ -6,13 +6,26 @@ envlist = pep8
[testenv]
basepython = python2.7
setenv = VIRTUAL_ENV={envdir}
-whitelist_externals = find
+whitelist_externals = *
commands = find . -type f -name "*.py[c|o]" -delete
[testenv:pep8]
deps = -r{toxinidir}/test-requirements.txt
commands = flake8 {posargs}
+[testenv:functional]
+deps =
+ rtyaml
+ ddt
+ git+git://github.com/loadtheaccumulator/glusto.git
+ git+git://github.com/gluster/glusto-tests.git#egg=glustolibs-gluster&subdirectory=glustolibs-gluster
+ git+git://github.com/gluster/glusto-tests.git#egg=glustolibs-io&subdirectory=glustolibs-io
+ git+git://github.com/gluster/glusto-tests.git#egg=glustolibs-misc&subdirectory=glustolibs-misc
+ --editable=file:///{toxinidir}/cns-libs
+commands =
+ find . -type f -name "*.py[c|o]" -delete
+ {posargs:bash -c "echo 'No commands have been specified. Exiting.'; exit 1"}
+
[testenv:venv]
commands = {posargs}