Add test suite OpenStack Pod Healthy ported from robot framework
Added Sanity Platform test suite OpenStack Pod Healthy Story: 2007472 Task: 39165 Change-Id: I55021aed1df2f1e51edc56f2a8e5e804e8ee4161 Signed-off-by: Mihail-Laurentiu Trica <mihail-laurentiu.trica@intel.com>
This commit is contained in:
parent
1bfd671cee
commit
4dfbb03919
|
@ -0,0 +1,135 @@
|
||||||
|
###
|
||||||
|
#
|
||||||
|
# Copyright (c) 2020 Intel Corporation
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
# Check the health of PODs services; update and apply the helm chart via system application-apply.
|
||||||
|
# Author(s): Mihail-Laurentiu Trica mihai-laurentiu.trica@intel.com
|
||||||
|
###
|
||||||
|
|
||||||
|
import os
|
||||||
|
from pytest import mark
|
||||||
|
|
||||||
|
from keywords import common, container_helper, kube_helper
|
||||||
|
from utils.clients.ssh import ControllerClient
|
||||||
|
|
||||||
|
POD_YAML = "testpod.yaml"
|
||||||
|
POD_NAME = "testpod"
|
||||||
|
CHART_MANIFEST = "helm-charts-manifest.tgz"
|
||||||
|
STX_HOME = "/home/sysadmin/"
|
||||||
|
DELAY = 60
|
||||||
|
|
||||||
|
|
||||||
|
# OpenStack pods healthy
|
||||||
|
@mark.robotsanity
|
||||||
|
def test_openstack_pods_healthy():
|
||||||
|
"""
|
||||||
|
Check the health of the OpenStack pods: healthy, running or in completed state
|
||||||
|
"""
|
||||||
|
application_status = container_helper.get_apps(application="stx-openstack")[0]
|
||||||
|
assert application_status == "applied", "System status is not in state applied"
|
||||||
|
command_health = kube_helper.wait_for_pods_healthy(namespace="stx-openstack")
|
||||||
|
assert command_health is None, "Check PODs health has failed"
|
||||||
|
|
||||||
|
|
||||||
|
# Reapply STX OpenStack
|
||||||
|
@mark.robotsanity
|
||||||
|
def test_reapply_stx_openstack():
|
||||||
|
"""
|
||||||
|
Re-apply stx openstack application without any modification to helm charts.
|
||||||
|
"""
|
||||||
|
# Modified the check_interval set on robot test from 300 t0 30 to shorten the timeouts
|
||||||
|
application_status = container_helper.apply_app(app_name="stx-openstack", applied_timeout=5400,
|
||||||
|
check_interval=30)[0]
|
||||||
|
assert application_status == 0, "Reapply STX OpenStack has failed"
|
||||||
|
|
||||||
|
|
||||||
|
# STX OpenStack Override Update Reset
|
||||||
|
@mark.robotsanity
|
||||||
|
def test_stx_openstack_override_update_reset():
|
||||||
|
"""
|
||||||
|
Helm override for OpenStack nova chart and reset.
|
||||||
|
"""
|
||||||
|
# Helm Override OpenStack
|
||||||
|
args_override_pairs = {"conf.nova.DEFAULT.foo": "bar"}
|
||||||
|
app_name_override = "stx-openstack"
|
||||||
|
chart_override = "nova"
|
||||||
|
namespace_override = "openstack"
|
||||||
|
command_override = container_helper.update_helm_override(chart=chart_override,
|
||||||
|
namespace=namespace_override,
|
||||||
|
app_name=app_name_override,
|
||||||
|
kv_pairs=args_override_pairs)[0]
|
||||||
|
assert command_override == 0, "Helm override has failed"
|
||||||
|
# System Application Apply stx-openstack
|
||||||
|
test_reapply_stx_openstack()
|
||||||
|
# Check Helm Override OpenStack
|
||||||
|
labels_override = "component=compute"
|
||||||
|
nova_compute_controllers = kube_helper.get_pods(
|
||||||
|
field="NAME", all_namespaces=True, labels=labels_override)
|
||||||
|
conf_path = "/etc/nova/nova.conf"
|
||||||
|
for nova_compute_controller in nova_compute_controllers:
|
||||||
|
cmd_str = "grep foo {}".format(conf_path)
|
||||||
|
code, command_output = kube_helper.exec_cmd_in_container(cmd=cmd_str,
|
||||||
|
pod=nova_compute_controller,
|
||||||
|
namespace=namespace_override)
|
||||||
|
assert code == 0, "Controller kubectl command has exited with an error"
|
||||||
|
assert "foo = bar" in command_output, "Check Helm Override OpenStack for {} " \
|
||||||
|
"has failed".format(nova_compute_controller)
|
||||||
|
|
||||||
|
|
||||||
|
# Kube System Services
|
||||||
|
@mark.robotsanity
|
||||||
|
def test_kube_system_services():
|
||||||
|
"""
|
||||||
|
Check pods status and kube-system services are displayed.
|
||||||
|
"""
|
||||||
|
# Check PODs Health
|
||||||
|
command_health = kube_helper.wait_for_pods_healthy(namespace="stx-openstack")
|
||||||
|
assert command_health is None, "Check PODs health has failed"
|
||||||
|
# Check Kube System Services
|
||||||
|
services_to_check = ['ingress', 'ingress-error-pages', 'ingress-exporter', 'kube-dns',
|
||||||
|
'tiller-deploy']
|
||||||
|
services_to_check.sort()
|
||||||
|
services_list = kube_helper.get_resources(field="NAME", namespace="kube-system",
|
||||||
|
resource_type="service")
|
||||||
|
services_list.sort()
|
||||||
|
for i in services_list:
|
||||||
|
i = ''.join(i)
|
||||||
|
assert services_to_check == services_list, "One or more services are missing from the list"
|
||||||
|
|
||||||
|
|
||||||
|
# Create Check Delete POD
|
||||||
|
@mark.robotsanity
|
||||||
|
def test_create_check_delete_pod():
|
||||||
|
"""
|
||||||
|
Launch a POD via kubectl, wait until it is active, then delete it.
|
||||||
|
"""
|
||||||
|
# Create pod
|
||||||
|
test_pod_yaml_path = os.path.join(os.getcwd(), "testcases/sanity/sanity_platform", POD_YAML)
|
||||||
|
stx_path = STX_HOME + POD_YAML
|
||||||
|
current_controller = ControllerClient.get_active_controller()
|
||||||
|
if not current_controller.file_exists(test_pod_yaml_path):
|
||||||
|
common.scp_from_localhost_to_active_controller(
|
||||||
|
source_path=test_pod_yaml_path, dest_path=stx_path, timeout=60, is_dir=False)
|
||||||
|
sub_cmd_str = "create -f"
|
||||||
|
code, output_create = kube_helper.exec_kube_cmd(
|
||||||
|
sub_cmd=sub_cmd_str, args=stx_path, con_ssh=current_controller)
|
||||||
|
assert code == 0, "Controller kubectl create has exited with an error"
|
||||||
|
assert output_create == "pod/testpod created", "Creation of testpod has failed"
|
||||||
|
timer = DELAY
|
||||||
|
while timer != 0:
|
||||||
|
command_check = kube_helper.get_pods(field="STATUS", all_namespaces=True,
|
||||||
|
pod_names=POD_NAME)
|
||||||
|
if command_check == "Running":
|
||||||
|
assert command_check == "Running"
|
||||||
|
timer = 0
|
||||||
|
else:
|
||||||
|
timer -= 5
|
||||||
|
# Delete pod
|
||||||
|
code, output_delete = kube_helper.delete_resources(resource_names=POD_NAME,
|
||||||
|
resource_types="pod",
|
||||||
|
con_ssh=current_controller,
|
||||||
|
check_both_controllers=True)
|
||||||
|
assert code == 0, "Controller kubectl delete has exited with an error"
|
||||||
|
assert output_delete is None, "Pod was not successfully deleted"
|
|
@ -0,0 +1,38 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Pod
|
||||||
|
metadata:
|
||||||
|
name: testpod
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: test-container
|
||||||
|
image: k8s.gcr.io/busybox
|
||||||
|
command: [ "sh", "-c"]
|
||||||
|
args:
|
||||||
|
- while true; do
|
||||||
|
echo -en '\n';
|
||||||
|
printenv MY_NODE_NAME MY_POD_NAME MY_POD_NAMESPACE;
|
||||||
|
printenv MY_POD_IP MY_POD_SERVICE_ACCOUNT;
|
||||||
|
sleep 10;
|
||||||
|
done;
|
||||||
|
env:
|
||||||
|
- name: MY_NODE_NAME
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: spec.nodeName
|
||||||
|
- name: MY_POD_NAME
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.name
|
||||||
|
- name: MY_POD_NAMESPACE
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.namespace
|
||||||
|
- name: MY_POD_IP
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: status.podIP
|
||||||
|
- name: MY_POD_SERVICE_ACCOUNT
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: spec.serviceAccountName
|
||||||
|
restartPolicy: Never
|
Loading…
Reference in New Issue