Skip to content

Commit

Permalink
update tests
Browse files Browse the repository at this point in the history
  • Loading branch information
lucacome committed Aug 12, 2021
1 parent 2f2478b commit f3534b0
Show file tree
Hide file tree
Showing 10 changed files with 58 additions and 58 deletions.
4 changes: 2 additions & 2 deletions perf-tests/suite/test_ap_reload_perf.py
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,7 @@ def test_ap_perf_ingress_path_change(
test_namespace,
):
"""
Test reload times for changing paths
Test reload times for changing paths
"""

src1_ing_yaml = f"{TEST_DATA}/appprotect/appprotect-ingress.yaml"
Expand Down Expand Up @@ -287,7 +287,7 @@ def test_ap_perf_multiple_ingress(
with open(src2_ing_yaml) as f:
doc = yaml.safe_load(f)
# create ingress without AP annotation
create_ingress(kube_apis.extensions_v1_beta1, test_namespace, doc)
create_ingress(kube_apis.networking_v1, test_namespace, doc)
wait_before_test(10)
#  create ingress with AP annotations
create_ingress_with_ap_annotations(
Expand Down
8 changes: 4 additions & 4 deletions tests/docker/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
FROM python:3.9-slim

RUN apt-get update && apt-get install -y curl \
RUN apt-get update && apt-get install -y curl git \
&& curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl \
&& chmod +x ./kubectl \
&& mv ./kubectl /usr/local/bin

WORKDIR /workspace/tests

COPY tests/requirements.txt /workspace/tests/
RUN pip install -r requirements.txt
COPY tests/requirements.txt /workspace/tests/
RUN pip install -r requirements.txt

COPY tests /workspace/tests
COPY deployments /workspace/deployments

ENTRYPOINT ["python3", "-m", "pytest"]
ENTRYPOINT ["python3", "-m", "pytest", "suite/"]
2 changes: 1 addition & 1 deletion tests/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
PyYAML==5.4.1
requests==2.26.0
forcediphttpsadapter==1.0.1
kubernetes==12.0.1
-e git://github.com/kubernetes-client/python.git@c0ea27acc7347c9ae605f0c03e902b14c5ab9e5a#egg=kubernetes
pytest==6.2.4
ipaddress==1.0.23 # >= 1.0.17
cffi==1.14.6
Expand Down
14 changes: 7 additions & 7 deletions tests/suite/fixtures.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from kubernetes import config, client
from kubernetes.client import (
CoreV1Api,
ExtensionsV1beta1Api,
NetworkingV1Api,
RbacAuthorizationV1Api,
CustomObjectsApi,
ApiextensionsV1Api,
Expand Down Expand Up @@ -88,7 +88,7 @@ class KubeApis:
Attributes:
v1: CoreV1Api
extensions_v1_beta1: ExtensionsV1beta1Api
networking_v1: NetworkingV1Api
rbac_v1: RbacAuthorizationV1Api
api_extensions_v1: ApiextensionsV1Api
custom_objects: CustomObjectsApi
Expand All @@ -97,14 +97,14 @@ class KubeApis:
def __init__(
self,
v1: CoreV1Api,
extensions_v1_beta1: ExtensionsV1beta1Api,
networking_v1: NetworkingV1Api,
apps_v1_api: AppsV1Api,
rbac_v1: RbacAuthorizationV1Api,
api_extensions_v1: ApiextensionsV1Api,
custom_objects: CustomObjectsApi,
):
self.v1 = v1
self.extensions_v1_beta1 = extensions_v1_beta1
self.networking_v1 = networking_v1
self.apps_v1_api = apps_v1_api
self.rbac_v1 = rbac_v1
self.api_extensions_v1 = api_extensions_v1
Expand Down Expand Up @@ -308,7 +308,7 @@ def ingress_controller_prerequisites(
create_secret_from_yaml(
kube_apis.v1, namespace, f"{DEPLOYMENTS}/common/default-server-secret.yaml"
)

def fin():
print("Clean up prerequisites")
delete_namespace(kube_apis.v1, namespace)
Expand Down Expand Up @@ -342,13 +342,13 @@ def kube_apis(cli_arguments) -> KubeApis:
kubeconfig = cli_arguments["kubeconfig"]
config.load_kube_config(config_file=kubeconfig, context=context_name, persist_config=False)
v1 = client.CoreV1Api()
extensions_v1_beta1 = client.ExtensionsV1beta1Api()
networking_v1 = client.NetworkingV1Api()
apps_v1_api = client.AppsV1Api()
rbac_v1 = client.RbacAuthorizationV1Api()
api_extensions_v1 = client.ApiextensionsV1Api()
custom_objects = client.CustomObjectsApi()
return KubeApis(
v1, extensions_v1_beta1, apps_v1_api, rbac_v1, api_extensions_v1, custom_objects
v1, networking_v1, apps_v1_api, rbac_v1, api_extensions_v1, custom_objects
)


Expand Down
48 changes: 24 additions & 24 deletions tests/suite/resources_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import pytest
import requests

from kubernetes.client import CoreV1Api, ExtensionsV1beta1Api, RbacAuthorizationV1Api, V1Service, AppsV1Api
from kubernetes.client import CoreV1Api, NetworkingV1Api, RbacAuthorizationV1Api, V1Service, AppsV1Api
from kubernetes.client.rest import ApiException
from kubernetes.stream import stream
from kubernetes import client
Expand Down Expand Up @@ -225,7 +225,7 @@ def scale_deployment(v1:CoreV1Api, apps_v1_api: AppsV1Api, name, namespace, valu
replica_num = (apps_v1_api.read_namespaced_deployment_scale(name, namespace)).spec.replicas
time.sleep(1)
print("Number of replicas is not 0, retrying...")

else:
pytest.fail("wrong argument")

Expand All @@ -251,7 +251,7 @@ class PodNotReadyException(Exception):
def __init__(self, message="After several seconds the pods aren't ContainerReady. Exiting!"):
self.message = message
super().__init__(self.message)


def wait_until_all_pods_are_ready(v1: CoreV1Api, namespace) -> None:
"""
Expand Down Expand Up @@ -517,48 +517,48 @@ def ensure_item_removal(get_item, *args, **kwargs) -> None:
print("Item was removed")


def create_ingress_from_yaml(extensions_v1_beta1: ExtensionsV1beta1Api, namespace, yaml_manifest) -> str:
def create_ingress_from_yaml(networking_v1: NetworkingV1Api, namespace, yaml_manifest) -> str:
"""
Create an ingress based on yaml file.
:param extensions_v1_beta1: ExtensionsV1beta1Api
:param networking_v1: NetworkingV1Api
:param namespace: namespace name
:param yaml_manifest: an absolute path to file
:return: str
"""
print(f"Load {yaml_manifest}")
with open(yaml_manifest) as f:
dep = yaml.safe_load(f)
return create_ingress(extensions_v1_beta1, namespace, dep)
return create_ingress(networking_v1, namespace, dep)


def create_ingress(extensions_v1_beta1: ExtensionsV1beta1Api, namespace, body) -> str:
def create_ingress(networking_v1: NetworkingV1Api, namespace, body) -> str:
"""
Create an ingress based on a dict.
:param extensions_v1_beta1: ExtensionsV1beta1Api
:param networking_v1: NetworkingV1Api
:param namespace: namespace name
:param body: a dict
:return: str
"""
print("Create an ingress:")
extensions_v1_beta1.create_namespaced_ingress(namespace, body)
networking_v1.create_namespaced_ingress(namespace, body)
print(f"Ingress created with name '{body['metadata']['name']}'")
return body['metadata']['name']


def delete_ingress(extensions_v1_beta1: ExtensionsV1beta1Api, name, namespace) -> None:
def delete_ingress(networking_v1: NetworkingV1Api, name, namespace) -> None:
"""
Delete an ingress.
:param extensions_v1_beta1: ExtensionsV1beta1Api
:param networking_v1: NetworkingV1Api
:param namespace: namespace
:param name:
:return:
"""
print(f"Delete an ingress: {name}")
extensions_v1_beta1.delete_namespaced_ingress(name, namespace)
ensure_item_removal(extensions_v1_beta1.read_namespaced_ingress, name, namespace)
networking_v1.delete_namespaced_ingress(name, namespace)
ensure_item_removal(networking_v1.read_namespaced_ingress, name, namespace)
print(f"Ingress was removed with name '{name}'")


Expand All @@ -580,18 +580,18 @@ def generate_ingresses_with_annotation(yaml_manifest, annotations) -> []:
return res


def replace_ingress(extensions_v1_beta1: ExtensionsV1beta1Api, name, namespace, body) -> str:
def replace_ingress(networking_v1: NetworkingV1Api, name, namespace, body) -> str:
"""
Replace an Ingress based on a dict.
:param extensions_v1_beta1: ExtensionsV1beta1Api
:param networking_v1: NetworkingV1Api
:param name:
:param namespace: namespace
:param body: dict
:return: str
"""
print(f"Replace a Ingress: {name}")
resp = extensions_v1_beta1.replace_namespaced_ingress(name, namespace, body)
resp = networking_v1.replace_namespaced_ingress(name, namespace, body)
print(f"Ingress replaced with name '{name}'")
return resp.metadata.name

Expand Down Expand Up @@ -935,7 +935,7 @@ def wait_for_event_increment(kube_apis, namespace, event_count, offset) -> bool:
else:
print(f"Event was not registered after {retry} retries, exiting...")
return False


def create_ingress_controller(v1: CoreV1Api, apps_v1_api: AppsV1Api, cli_arguments,
namespace, args=None) -> str:
Expand Down Expand Up @@ -974,7 +974,7 @@ def delete_ingress_controller(apps_v1_api: AppsV1Api, name, dep_type, namespace)
"""
Delete IC according to its type.
:param apps_v1_api: ExtensionsV1beta1Api
:param apps_v1_api: NetworkingV1Api
:param name: name
:param dep_type: IC deployment type 'deployment' or 'daemon-set'
:param namespace: namespace name
Expand Down Expand Up @@ -1025,7 +1025,7 @@ def create_items_from_yaml(kube_apis, yaml_manifest, namespace) -> None:
elif doc["kind"] == "ConfigMap":
create_configmap(kube_apis.v1, namespace, doc)
elif doc["kind"] == "Ingress":
create_ingress(kube_apis.extensions_v1_beta1, namespace, doc)
create_ingress(kube_apis.networking_v1, namespace, doc)
elif doc["kind"] == "Service":
create_service(kube_apis.v1, namespace, doc)
elif doc["kind"] == "Deployment":
Expand Down Expand Up @@ -1062,7 +1062,7 @@ def create_ingress_with_ap_annotations(
] = ap_log_st
doc["metadata"]["annotations"]["appprotect.f5.com/app-protect-security-log"] = logconf
doc["metadata"]["annotations"]["appprotect.f5.com/app-protect-security-log-destination"] = f"syslog:server={syslog_ep}"
create_ingress(kube_apis.extensions_v1_beta1, namespace, doc)
create_ingress(kube_apis.networking_v1, namespace, doc)


def replace_ingress_with_ap_annotations(
Expand Down Expand Up @@ -1093,7 +1093,7 @@ def replace_ingress_with_ap_annotations(
] = ap_log_st
doc["metadata"]["annotations"]["appprotect.f5.com/app-protect-security-log"] = logconf
doc["metadata"]["annotations"]["appprotect.f5.com/app-protect-security-log-destination"] = f"syslog:server={syslog_ep}"
replace_ingress(kube_apis.extensions_v1_beta1, name, namespace, doc)
replace_ingress(kube_apis.networking_v1, name, namespace, doc)


def delete_items_from_yaml(kube_apis, yaml_manifest, namespace) -> None:
Expand All @@ -1114,7 +1114,7 @@ def delete_items_from_yaml(kube_apis, yaml_manifest, namespace) -> None:
elif doc["kind"] == "Secret":
delete_secret(kube_apis.v1, doc['metadata']['name'], namespace)
elif doc["kind"] == "Ingress":
delete_ingress(kube_apis.extensions_v1_beta1, doc['metadata']['name'], namespace)
delete_ingress(kube_apis.networking_v1, doc['metadata']['name'], namespace)
elif doc["kind"] == "Service":
delete_service(kube_apis.v1, doc['metadata']['name'], namespace)
elif doc["kind"] == "Deployment":
Expand Down Expand Up @@ -1210,7 +1210,7 @@ def ensure_response_from_backend(req_url, host, additional_headers=None, check40
headers = {"host": host}
if additional_headers:
headers.update(additional_headers)

if check404:
for _ in range(60):
resp = requests.get(req_url, headers=headers, verify=False)
Expand Down Expand Up @@ -1317,4 +1317,4 @@ def write_to_json(fname, data) -> None:
os.mkdir(file_path)

with open(f"json_files/{fname}", "w+") as f:
json.dump(data, f, ensure_ascii=False, indent=4)
json.dump(data, f, ensure_ascii=False, indent=4)
22 changes: 11 additions & 11 deletions tests/suite/test_annotations.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import pytest
import yaml
from kubernetes.client import ExtensionsV1beta1Api
from kubernetes.client import NetworkingV1Api

from suite.custom_assertions import assert_event_count_increased
from suite.fixtures import PublicEndpoint
Expand All @@ -21,11 +21,11 @@ def get_event_count(event_text, events_list) -> int:
return 0


def replace_ingresses_from_yaml(extensions_v1_beta1: ExtensionsV1beta1Api, namespace, yaml_manifest) -> None:
def replace_ingresses_from_yaml(networking_v1: NetworkingV1Api, namespace, yaml_manifest) -> None:
"""
Parse file and replace all Ingresses based on its contents.
:param extensions_v1_beta1: ExtensionsV1beta1Api
:param networking_v1: NetworkingV1Api
:param namespace: namespace
:param yaml_manifest: an absolute path to a file
:return:
Expand All @@ -35,7 +35,7 @@ def replace_ingresses_from_yaml(extensions_v1_beta1: ExtensionsV1beta1Api, names
docs = yaml.safe_load_all(f)
for doc in docs:
if doc['kind'] == 'Ingress':
replace_ingress(extensions_v1_beta1, doc['metadata']['name'], namespace, doc)
replace_ingress(networking_v1, doc['metadata']['name'], namespace, doc)


def get_minions_info_from_yaml(file) -> []:
Expand Down Expand Up @@ -203,7 +203,7 @@ def test_when_annotation_in_ing_only(self, kube_apis, annotations_setup, ingress
for ing in new_ing:
# in mergeable case this will update master ingress only
if ing['metadata']['name'] == annotations_setup.ingress_name:
replace_ingress(kube_apis.extensions_v1_beta1,
replace_ingress(kube_apis.networking_v1,
annotations_setup.ingress_name, annotations_setup.namespace, ing)
wait_before_test(1)
result_conf = get_ingress_nginx_template_conf(kube_apis.v1,
Expand Down Expand Up @@ -234,7 +234,7 @@ def test_when_annotation_in_configmap_only(self, kube_apis, annotations_setup, i
initial_events = get_events(kube_apis.v1, annotations_setup.namespace)
initial_count = get_event_count(annotations_setup.ingress_event_text, initial_events)
print("Case 3: keys in ConfigMap, no annotations in Ingress")
replace_ingresses_from_yaml(kube_apis.extensions_v1_beta1, annotations_setup.namespace,
replace_ingresses_from_yaml(kube_apis.networking_v1, annotations_setup.namespace,
annotations_setup.ingress_src_file)
replace_configmap_from_yaml(kube_apis.v1,
ingress_controller_prerequisites.config_map['metadata']['name'],
Expand Down Expand Up @@ -272,7 +272,7 @@ def test_ing_overrides_configmap(self, kube_apis, annotations_setup, ingress_con
for ing in new_ing:
# in mergeable case this will update master ingress only
if ing['metadata']['name'] == annotations_setup.ingress_name:
replace_ingress(kube_apis.extensions_v1_beta1,
replace_ingress(kube_apis.networking_v1,
annotations_setup.ingress_name, annotations_setup.namespace, ing)
replace_configmap_from_yaml(kube_apis.v1,
ingress_controller_prerequisites.config_map['metadata']['name'],
Expand Down Expand Up @@ -304,7 +304,7 @@ def test_upstream_zone_size_0(self, cli_arguments, kube_apis,
for ing in new_ing:
# in mergeable case this will update master ingress only
if ing['metadata']['name'] == annotations_setup.ingress_name:
replace_ingress(kube_apis.extensions_v1_beta1,
replace_ingress(kube_apis.networking_v1,
annotations_setup.ingress_name, annotations_setup.namespace, ing)
wait_before_test(1)
result_conf = get_ingress_nginx_template_conf(kube_apis.v1,
Expand Down Expand Up @@ -338,7 +338,7 @@ def test_validation(self, kube_apis, annotations_setup, ingress_controller_prere
for ing in new_ing:
# in mergeable case this will update master ingress only
if ing['metadata']['name'] == annotations_setup.ingress_name:
replace_ingress(kube_apis.extensions_v1_beta1,
replace_ingress(kube_apis.networking_v1,
annotations_setup.ingress_name, annotations_setup.namespace, ing)
wait_before_test()
result_conf = get_ingress_nginx_template_conf(kube_apis.v1,
Expand All @@ -365,7 +365,7 @@ def test_minion_overrides_master(self, kube_apis, annotations_setup, ingress_con
initial_events = get_events(kube_apis.v1, annotations_setup.namespace)
initial_count = get_event_count(annotations_setup.ingress_event_text, initial_events)
print("Case 7: minion annotation overrides master")
replace_ingresses_from_yaml(kube_apis.extensions_v1_beta1, annotations_setup.namespace, yaml_file)
replace_ingresses_from_yaml(kube_apis.networking_v1, annotations_setup.namespace, yaml_file)
wait_before_test(1)
result_conf = get_ingress_nginx_template_conf(kube_apis.v1,
annotations_setup.namespace,
Expand Down Expand Up @@ -395,7 +395,7 @@ def test_grpc_flow(self, kube_apis, annotations_grpc_setup, ingress_controller_p
annotations)
for ing in new_ing:
if ing['metadata']['name'] == annotations_grpc_setup.ingress_name:
replace_ingress(kube_apis.extensions_v1_beta1,
replace_ingress(kube_apis.networking_v1,
annotations_grpc_setup.ingress_name, annotations_grpc_setup.namespace, ing)
wait_before_test(1)
result_conf = get_ingress_nginx_template_conf(kube_apis.v1,
Expand Down
4 changes: 2 additions & 2 deletions tests/suite/test_app_protect_integration.py
Original file line number Diff line number Diff line change
Expand Up @@ -368,7 +368,7 @@ def test_ap_sec_logs_on(
print(response.text)
wait_before_test(10)
log_contents = get_file_contents(kube_apis.v1, log_loc, syslog_pod, test_namespace)

delete_items_from_yaml(kube_apis, src_ing_yaml, test_namespace)
delete_items_from_yaml(kube_apis, src_syslog_yaml, test_namespace)

Expand Down Expand Up @@ -465,7 +465,7 @@ def test_ap_multi_sec_logs(
"appprotect.f5.com/app-protect-security-log-destination"
] = f"syslog:server={syslog_ep}:514,syslog:server={syslog2_ep}:514"

create_ingress(kube_apis.extensions_v1_beta1, test_namespace, doc)
create_ingress(kube_apis.networking_v1, test_namespace, doc)

ingress_host = get_first_ingress_host_from_yaml(src_ing_yaml)

Expand Down

0 comments on commit f3534b0

Please sign in to comment.