X-Git-Url: https://gerrit.akraino.org/r/gitweb?p=ta%2Fcloudtaf.git;a=blobdiff_plain;f=testcases%2Fcpu_pooling%2Ftc_003_exclusive_pool_tests_more_cpu.py;fp=testcases%2Fcpu_pooling%2Ftc_003_exclusive_pool_tests_more_cpu.py;h=f48f7e4f09221aff7487f418e32761af1378b1a6;hp=0000000000000000000000000000000000000000;hb=af5eb3ff36b92ab1d9c156ffa0391eadc73eb6ba;hpb=025a45508d009db84c34076fb4a668f712628d6d diff --git a/testcases/cpu_pooling/tc_003_exclusive_pool_tests_more_cpu.py b/testcases/cpu_pooling/tc_003_exclusive_pool_tests_more_cpu.py new file mode 100644 index 0000000..f48f7e4 --- /dev/null +++ b/testcases/cpu_pooling/tc_003_exclusive_pool_tests_more_cpu.py @@ -0,0 +1,76 @@ +import sys +import os +from robot.libraries.BuiltIn import BuiltIn +from robot.libraries.String import String +from robot.api import logger +from decorators_for_robot_functionalities import * +from test_constants import * + +sys.path.append(os.path.join(os.path.dirname(__file__), '..', '../libraries/common')) +import common_utils # noqa + + +ex = BuiltIn().get_library_instance('execute_command') +cpupools = {} + + +def tc_003_exclusive_pool_tests_more_cpu(): + steps = ['step1_with_two_process'] + BuiltIn().run_keyword("tc_003_exclusive_pool_tests_more_cpu.Setup") + common_utils.keyword_runner(steps) + + +def Setup(): + global cpupools, nodename + nodename = common_utils.decide_nodename() + cpupools = common_utils.get_cpupools() + logger.info("CPU pools: " + str(cpupools)) + logger.info("Default nodename to deploy: " + nodename) + + +def step1_with_two_process(): + try: + common_utils.helm_install(chart_name="default/cpu-pooling-exclusive3", release_name="cpu-pooling", + values="registry_url=" + reg + ",nodename=" + nodename) + common_utils.test_kubernetes_object_quality(kube_object=cpu_pooling_pod3, + expected_result="1", + filter=r'(Running)\s*[0]', + timeout=10) + + exclusive_cpus = cpupools[nodename]['exclusive_caas'] + + proc1_cpu, proc2_cpu = get_cpu_core_of_processes(cpu_pooling_pod3['obj_name'], "dumb-init -c sleep 1000") + if proc1_cpu not in exclusive_cpus: + raise Exception('{pod}: Proc1 running on non exclusive cpu core {cpu}!' + .format(pod=cpu_pooling_pod3['obj_name'], cpu=proc1_cpu)) + if proc2_cpu not in exclusive_cpus: + raise Exception('{pod}: Proc2 running on non exclusive cpu core {cpu}!' + .format(pod=cpu_pooling_pod3['obj_name'], cpu=proc2_cpu)) + if proc1_cpu == proc2_cpu: + raise Exception('{pod}: Two processes use same cpu core: {cpu}!' + .format(pod=cpu_pooling_pod3['obj_name'], cpu=proc2_cpu)) + finally: + common_utils.helm_delete("cpu-pooling") + common_utils.check_kubernetes_object(kube_object=cpu_pooling_pod3, + tester_function=common_utils.test_kubernetes_object_not_available, + timeout=60) + + +@robot_log +def get_cpu_core_of_processes(pod_name, command): + cpu_list = [] + exact_pod_name = ex.execute_unix_command("kubectl get pod | grep {0} | awk '{{print $1}}'".format(pod_name)) + bash_command = "ps | grep '{proc_name}' | grep -v grep | awk '{{print $1}}'".format(proc_name=command) + proc_ids = ex.execute_unix_command("kubectl exec {0} -- {1}".format(exact_pod_name, bash_command)) + logger.info("PROC_IDS:" + proc_ids) + for id in proc_ids.splitlines(): + bash_command = "cat /proc/{0}/stat | awk '{{print $39}}'".format(id) + command = "kubectl exec `kubectl get pod | grep {0} | awk '{{print $1}}'` -- {1}".format(pod_name, bash_command) + result = ex.execute_unix_command(command) + logger.info("CPU for pid " + id + "is: " + result) + cpu_list.append(int(result)) + if len(cpu_list) == 1: + return cpu_list[0] + elif not cpu_list: + return "" + return cpu_list