robot tcs, test charts, robot container added
[ta/cloudtaf.git] / testcases / cpu_pooling / tc_003_exclusive_pool_tests_more_cpu.py
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 (file)
index 0000000..f48f7e4
--- /dev/null
@@ -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