def test_eviction_fromfiles_strictgoal(): k = KubernetesCluster() k.load_dir(TEST_CLUSTER_FOLDER) k.create_resource(open(TEST_DAEMONET).read()) k._build_state() p = SingleGoalEvictionDetect(k.state_objects) p.select_target_service() p.run(timeout=6600, sessionName="test_eviction_fromfiles_strictgoal") if not p.plan: raise Exception("Could not solve %s" % p.__class__.__name__) print(Scenario(p.plan).asyaml()) if p.plan: i = 0 for a in p.plan: i = i + 1 print( i, ":", a.__class__.__name__, "\n", yaml.dump( { str(k): repr(v._get_value()) if v else f"NONE_VALUE:{v}" for (k, v) in a.kwargs.items() }, default_flow_style=False)) assert "StartPod" in p.plan.__str__()
def test_simple_load_scale(): k = KubernetesCluster() k.load_dir(TEST_DEPLOYMENT_DUMP) k.scale(5, "deployment/redis-master deployment/redis-master1") objects = filter(lambda x: isinstance(x, Deployment), k.state_objects) for p in objects: if len(p.podList) != 5: raise ValueError("Scale doesn't work")
def test_load_folder_load_pod_labels(): k = KubernetesCluster() k.load_dir(TEST_CLUSTER_FOLDER) k._build_state() for ds in filter(lambda x: isinstance(x, Pod), k.state_objects): if labelFactory.get("app", "redis-evict") in ds.metadata_labels._get_value(): return raise Exception("Can not check labels load")
def test_spec_selector_labels(): k = KubernetesCluster() k.load_dir(TEST_CLUSTER_FOLDER) k._build_state() for ds in filter(lambda x: isinstance(x, Service), k.state_objects): if labelFactory.get("app", "redis-evict") in ds.spec_selector._get_value(): return raise Exception("Can not check labels load")
def test_load_folder(): k = KubernetesCluster() k.load_dir(TEST_CLUSTER_FOLDER) k._build_state() # check that no pods are orphan pods = list(filter(lambda x: isinstance(x, Pod), k.state_objects)) assert pods for pod in pods: assert pod.atNode._property_value != Node.NODE_NULL
def test_exclude_regexp_unit(): k = KubernetesCluster() k.load_dir(TEST_CLUSTER_FOLDER) k.create_resource(open(TEST_DAEMONET).read()) k._build_state() mark_excluded(k.state_objects, "Service:front*", skip_check=False) for p in filter(lambda x: isinstance(x, Service), k.state_objects): if str(p.metadata_name) == "frontend": if p.searchable: raise ValueError("exclude doesn't work")
def test_service_load(): k = KubernetesCluster() k.load_dir(TEST_CLUSTER_FOLDER) k._build_state() objects = filter(lambda x: isinstance(x, Service), k.state_objects) for p in objects: if p.metadata_name == "redis-master-create" and \ labelFactory.get("app", "redis-create") in p.metadata_labels._get_value(): return raise ValueError("Could not find service loded")
def test_load_requests(): k = KubernetesCluster() k.load_dir(TEST_CLUSTER_FOLDER) k.create_resource(open(TEST_DAEMONET).read()) k._build_state() objects = filter(lambda x: isinstance(x, DaemonSet), k.state_objects) for p in objects: if p.metadata_name == "fluentd-elasticsearch": return raise ValueError("Could not find service loded")
def test_heapster_load(): k = KubernetesCluster() k.load_dir(TEST_CLUSTER_FOLDER) k._build_state() heapsterpod = next(filter(lambda x: isinstance(x, Pod) and \ "heapster" in str(x.metadata_name), k.state_objects)) criticalpc = next(filter(lambda x: isinstance(x, PriorityClass) \ and x.metadata_name == "system-cluster-critical", k.state_objects)) # print(heapsterpod.priorityClass._get_value(), criticalpc._get_value()) assert heapsterpod.priorityClass._get_value() == criticalpc._get_value() assert heapsterpod.priorityClass == criticalpc
def test_priority_is_loaded(): k = KubernetesCluster() k.load_dir(TEST_CLUSTER_FOLDER) k._build_state() priorityClasses = filter(lambda x: isinstance(x, PriorityClass), k.state_objects) for p in priorityClasses: if p.metadata_name == "high-priority" and p.preemptionPolicy == POLICY["PreemptLowerPriority"]\ and p.priority > 0: return raise ValueError("Could not find priority loded")
def test_pod_target_attached(): k = KubernetesCluster() k.load_dir(TEST_TARGET_DUMP) k.create_resource(open(TEST_TARGET_CREATE).read()) k._build_state() deployments = filter(lambda x: isinstance(x, Deployment), k.state_objects) for deployment in deployments: if deployment.metadata_name._get_value() == "redis-master-create": for pod in util.objDeduplicatorByName( deployment.podList._get_value()): assert pod.targetService._get_value() != None
def test_anyservice_interrupted_fromfiles(): k = KubernetesCluster() k.load_dir(TEST_CLUSTER_FOLDER) k.create_resource(open(TEST_DAEMONET).read()) k._build_state() mark_excluded_service(k.state_objects) p = AnyServiceInterrupted(k.state_objects) print_objects(k.state_objects) p.run(timeout=6600, sessionName="test_anyservice_interrupted_fromfiles") if not p.plan: raise Exception("Could not solve %s" % p.__class__.__name__) print(Scenario(p.plan).asyaml())
def test_queue_status(): "test length and status of scheduler queue after load" k = KubernetesCluster() k.load_dir(TEST_CLUSTER_FOLDER) k.create_resource(open(TEST_DAEMONET).read()) k._build_state() scheduler = next( filter(lambda x: isinstance(x, Scheduler), k.state_objects)) nodes = list(filter(lambda x: isinstance(x, Node), k.state_objects)) # assert scheduler.queueLength == len(nodes) assert scheduler.podQueue._get_value() assert scheduler.status == STATUS_SCHED["Changed"]
def test_load_limits(): k = KubernetesCluster() k.load_dir(TEST_CLUSTER_FOLDER) k.create_resource(open(TEST_DEPLOYMENT).read()) k._build_state() objects = filter(lambda x: isinstance(x, Deployment), k.state_objects) for p in objects: if p.metadata_name == "redis-master" and \ p.cpuRequest > -1 and \ p.memRequest > -1 and \ p.memLimit > -1: return raise ValueError("Could not find service loded")
def test_limits_for_pods_created(): k = KubernetesCluster() k.load_dir(TEST_CLUSTER_FOLDER) k.create_resource(open(TEST_DAEMONET).read()) k._build_state() objects = filter(lambda x: isinstance(x, Pod), k.state_objects) for p in objects: if str(p.metadata_name).startswith("fluentd-elasticsearch") and \ p.cpuRequest > -1 and \ p.memRequest > -1 and \ p.memLimit > -1: return raise ValueError("Could not find service loded")
def test_anydeployment_interrupted_fromfiles(): k = KubernetesCluster() k.load_dir(TEST_CLUSTER_FOLDER) k.create_resource(open(TEST_DEPLOYMENT).read()) k._build_state() mark_excluded_service(k.state_objects) print("------Objects before solver processing------") print_objects(k.state_objects) p = NodeInterupted(k.state_objects) p.run(timeout=6600, sessionName="test_anydeployment_interrupted_fromfiles") if not p.plan: raise Exception("Could not solve %s" % p.__class__.__name__) print("------Objects after solver processing------") print(Scenario(p.plan).asyaml()) print_objects(k.state_objects)
def test_load(): k = KubernetesCluster() k.load_dir(TEST_CLUSTER_FOLDER) k._build_state() objects = filter(lambda x: isinstance(x, DaemonSet), k.state_objects) for p in objects: if p.metadata_name == "fluentd-elasticsearch": assert p.cpuRequest._get_value( ) == util.cpuConvertToAbstractProblem("400m") assert p.memRequest._get_value( ) == util.memConvertToAbstractProblem("400Mi") assert p.memLimit._get_value() == util.memConvertToAbstractProblem( "400Mi") return raise ValueError("Could not find service loded")
def test_load_load_create_exeption(): k = KubernetesCluster() k.load_dir(TEST_CLUSTER_FOLDER) k.create_resource(open(TEST_DEPLOYMENT).read()) try: k._build_state() except AssertionError as e: print(str(e)) assert str( e ) == "Error from server (AlreadyExists): deployments.apps \"redis-master\" already exists" objects = filter(lambda x: isinstance(x, Deployment), k.state_objects) for p in objects: if p.metadata_name == "redis-master": return raise ValueError("Could not find service loded")
def test_load_create(): k = KubernetesCluster() k.load_dir(TEST_CLUSTER_FOLDER) k.apply_resource(open(TEST_DAEMONSET_APPLY).read()) k._build_state() objects = filter(lambda x: isinstance(x, DaemonSet), k.state_objects) for p in objects: if p.metadata_name == "fluentd-elasticsearch": assert len(util.objDeduplicatorByName(p.podList._get_value())) == 2 assert p.cpuRequest._get_value( ) == util.cpuConvertToAbstractProblem("10m") assert p.memRequest._get_value( ) == util.memConvertToAbstractProblem("10Mi") assert p.memLimit._get_value() == util.memConvertToAbstractProblem( "10Mi") return raise ValueError("Could not find service loded")
def run_dir_wo_cli(DUMP_local,CHANGE_local): k = KubernetesCluster() if not (DUMP_local is None): for dump_item in DUMP_local: k.load_dir(dump_item) if not (CHANGE_local is None): for change_item in CHANGE_local: k.create_resource(open(change_item).read()) k._build_state() p = OptimisticRun(k.state_objects) print("#### run_wo_cli:") print("#### print_objects before run: #####") print(print_objects(k.state_objects)) p.run(timeout=999000, sessionName="test_OptimisticRun") if not p.plan: raise Exception("Could not solve %s" % p.__class__.__name__) print("#### print_objects after run: ######") print(print_objects(k.state_objects))
def test_service_status(): k = KubernetesCluster() k.load_dir(TEST_CLUSTER_FOLDER) k._build_state() objects = filter(lambda x: isinstance(x, Service), k.state_objects) service_found = False for p in objects: if p.metadata_name == "redis-master-evict" and \ labelFactory.get("app", "redis-evict") in p.metadata_labels._get_value() and \ labelFactory.get("app", "redis-evict") in p.spec_selector._get_value() and \ p.status == STATUS_SERV["Pending"]: service_found = True break assert service_found objects = filter(lambda x: isinstance(x, Pod), k.state_objects) for p in objects: if p.targetService == Pod.TARGET_SERVICE_NULL and \ labelFactory.get("app", "redis-evict") in p.metadata_labels._get_value(): return raise ValueError("Could not find service loded")
def test_service_active_pods(): k = KubernetesCluster() k.load_dir(TEST_CLUSTER_FOLDER) k._build_state() p = StartServiceGoal(k.state_objects) p.select_target_service() global ALL_STATE ALL_STATE = k.state_objects # p.debug() try: p.xrun() except EmptyPlanError: return objects = filter(lambda x: isinstance(x, Service), k.state_objects) pods_active = False for p in objects: if p.metadata_name == "redis-master-evict" and \ labelFactory.get("app", "redis-evict") in p.metadata_labels._get_value() and \ p.status == STATUS_SERV["Started"] and\ p.amountOfActivePods > 0: pods_active = True break assert pods_active
def test_load_deployment(): k = KubernetesCluster() k.load_dir(TEST_DEPLOYMENT_DUMP) k._build_state()